diff --git a/.env b/.env
index b5c472a6fd..e45891d04a 100644
--- a/.env
+++ b/.env
@@ -1,3 +1,5 @@
 NODE_ENV=production
 VUE_APP_PREVIEW=false
-VUE_APP_API_BASE_URL=/api
\ No newline at end of file
+VUE_APP_API_BASE_URL=http://www.chinabronchiectasis.com/
+VUE_APP_API_UPLOAD_URL=http://61.132.50.164:8788/file-server/file/uploadFile
+VUE_APP_API_VIEW_PIC_URL=http://61.132.50.164:8788/attachs/
\ No newline at end of file
diff --git a/.env.preview b/.env.preview
index a9e44c82d9..a3c95efb63 100644
--- a/.env.preview
+++ b/.env.preview
@@ -1,3 +1,3 @@
 NODE_ENV=production
 VUE_APP_PREVIEW=true
-VUE_APP_API_BASE_URL=/api
\ No newline at end of file
+VUE_APP_API_BASE_URL=http://www.dtp-cloud.com:18780/file-server/file/uploadFile
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 185e663192..078a5b9e78 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,21 +1,18 @@
-.DS_Store
-node_modules
-/dist
-
-# local env files
-.env.local
-.env.*.local
-
-# Log files
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# Editor directories and files
-.idea
-.vscode
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw*
+.DS_Store
+node_modules
+/dist
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw*
+*.bat
diff --git a/README.md b/README.md
index 18cbd24e37..c20645224f 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
 English | [简体中文](./README.zh-CN.md)
 
-<h1 align="center">Ant Design Pro Vue</h1>
+<h1 align="center">Ant Design P211ro Vu22212</h1>
+<h1 align="center">提交测试</h1>
 <div align="center">
 An out-of-box UI solution for enterprise applications as a Vue boilerplate. based on  <a href="https://vuecomponent.github.io/ant-design-vue/docs/vue/introduce-cn/" target="_blank">Ant Design of Vue</a>
 </div>
@@ -58,7 +59,7 @@ Overview
 - Clone repo
 ```bash
 git clone https://github.com/sendya/ant-design-pro-vue.git
-cd ant-design-pro-vue
+cd ant-design-pro-vue 121213123
 ```
 
 - Install dependencies
diff --git a/commit.bat b/commit.bat
new file mode 100644
index 0000000000..2474482cd5
--- /dev/null
+++ b/commit.bat
@@ -0,0 +1,3 @@
+git add .
+git commit -m "df"
+git push origin master
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 69c0244312..49a34d051b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5,67 +5,81 @@
   "requires": true,
   "dependencies": {
     "@ant-design/colors": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-3.1.0.tgz",
-      "integrity": "sha512-Td7g1P53sNFyT4Gya6836e70TrhoVZ+HjZs6mpWIHrxl4/VqsjjOyzj/8ktOuw0lCx+BfYu9UO1CiJ0MoYYfhg==",
-      "dev": true,
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-3.2.2.tgz",
+      "integrity": "sha512-YKgNbG2dlzqMhA9NtI3/pbY16m3Yl/EeWBRa+lB1X1YaYxHrxNexiQYCLTWO/uDvAjLFMEDU+zR901waBtMtjQ==",
       "requires": {
         "tinycolor2": "^1.4.1"
       }
     },
     "@ant-design/icons": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-1.2.1.tgz",
-      "integrity": "sha512-gQx3nH6m1xvebOWh5xibhzVK02aoqHY7JUXUS4doAidSDRWsj5iwKC8Gq9DemDZ4T+bW6xO7jJZN1UsbvcW7Uw=="
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-2.1.1.tgz",
+      "integrity": "sha512-jCH+k2Vjlno4YWl6g535nHR09PwCEmTBKAG6VqF+rhkrSPRLfgpU2maagwbZPLjaHuU5Jd1DFQ2KJpQuI6uG8w=="
     },
     "@ant-design/icons-vue": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-1.0.1.tgz",
-      "integrity": "sha512-WRlfa3t9/e2wwVw9FPRgJ/pan4Ttzd+JvgounFsXdpuyDm0q6djAwhjj7W/ZxWWU3XkArbcaXTMSslnn25804w==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-2.0.0.tgz",
+      "integrity": "sha512-2c0QQE5hL4N48k5NkPG5sdpMl9YnvyNhf0U7YkdZYDlLnspoRU7vIA0UK9eHBs6OpFLcJB6o8eJrIl2ajBskPg==",
       "requires": {
-        "ant-design-palettes": "^1.1.3",
+        "@ant-design/colors": "^3.1.0",
         "babel-runtime": "^6.26.0"
       }
     },
     "@antv/adjust": {
       "version": "0.1.1",
-      "resolved": "http://registry.npm.taobao.org/@antv/adjust/download/@antv/adjust-0.1.1.tgz",
-      "integrity": "sha1-4mOrDhoZQaZIhC/Ahs9lp+O3Xpg=",
+      "resolved": "https://registry.npmjs.org/@antv/adjust/-/adjust-0.1.1.tgz",
+      "integrity": "sha512-9FaMOyBlM4AgoRL0b5o0VhEKAYkexBNUrxV8XmpHU/9NBPJONBOB/NZUlQDqxtLItrt91tCfbAuMQmF529UX2Q==",
       "requires": {
         "@antv/util": "~1.3.1"
       }
     },
     "@antv/attr": {
       "version": "0.1.2",
-      "resolved": "http://registry.npm.taobao.org/@antv/attr/download/@antv/attr-0.1.2.tgz",
-      "integrity": "sha1-LusSL8qvhRoth0mrx8YFGdP3fjc=",
+      "resolved": "https://registry.npmjs.org/@antv/attr/-/attr-0.1.2.tgz",
+      "integrity": "sha512-QXjP+T2I+pJQcwZx1oCA4tipG43vgeCeKcGGKahlcxb71OBAzjJZm1QbF4frKXcnOqRkxVXtCr70X9TRair3Ew==",
       "requires": {
         "@antv/util": "~1.3.1"
       }
     },
     "@antv/component": {
-      "version": "0.3.2",
-      "resolved": "http://registry.npm.taobao.org/@antv/component/download/@antv/component-0.3.2.tgz",
-      "integrity": "sha1-QYvZYSwHIFYFNMEXr3S1fYUdNco=",
+      "version": "0.3.9",
+      "resolved": "https://registry.npmjs.org/@antv/component/-/component-0.3.9.tgz",
+      "integrity": "sha512-Knh/Nq0S8UkTfZj4SL7XizagTfXYqjFAYIqFtOmUaKpRMgccUi7p1oA7fJdNPGktkndljy6fUmCWocEeBXRS2g==",
       "requires": {
         "@antv/attr": "~0.1.2",
         "@antv/g": "~3.3.5",
         "@antv/util": "~1.3.1",
         "wolfy87-eventemitter": "~5.1.0"
+      },
+      "dependencies": {
+        "@antv/g": {
+          "version": "3.3.6",
+          "resolved": "https://registry.npmjs.org/@antv/g/-/g-3.3.6.tgz",
+          "integrity": "sha512-2GtyTz++s0BbN6s0ZL2/nrqGYCkd52pVoNH92YkrTdTOvpO6Z4DNoo6jGVgZdPX6Nzwli6yduC8MinVAhE8X6g==",
+          "requires": {
+            "@antv/gl-matrix": "~2.7.1",
+            "@antv/util": "~1.3.1",
+            "d3-ease": "~1.0.3",
+            "d3-interpolate": "~1.1.5",
+            "d3-timer": "~1.0.6",
+            "wolfy87-eventemitter": "~5.1.0"
+          }
+        }
       }
     },
     "@antv/coord": {
       "version": "0.1.0",
-      "resolved": "http://registry.npm.taobao.org/@antv/coord/download/@antv/coord-0.1.0.tgz",
-      "integrity": "sha1-SKgK420HVS+WZX5/gJUifGPwwKk=",
+      "resolved": "https://registry.npmjs.org/@antv/coord/-/coord-0.1.0.tgz",
+      "integrity": "sha512-W1R8h3Jfb3AfMBVfCreFPMVetgEYuwHBIGn0+d3EgYXe2ckOF8XWjkpGF1fZhOMHREMr+Gt27NGiQh8yBdLUgg==",
       "requires": {
         "@antv/util": "~1.3.1"
       }
     },
     "@antv/data-set": {
       "version": "0.10.2",
-      "resolved": "http://registry.npm.taobao.org/@antv/data-set/download/@antv/data-set-0.10.2.tgz",
-      "integrity": "sha1-WEqVdOfghThHy2WNUbn3NFoAAy8=",
+      "resolved": "https://registry.npmjs.org/@antv/data-set/-/data-set-0.10.2.tgz",
+      "integrity": "sha512-FFWG5tiTiFiUrLDRwulraU5XfOdDjkYOlZna+AMT9FJw406D/gfS8eXM9YibscBH28M/+KLAVO8xEwuD1sc3bw==",
       "requires": {
         "@antv/hierarchy": "~0.4.0",
         "@antv/util": "~1.3.1",
@@ -87,28 +101,28 @@
       }
     },
     "@antv/g": {
-      "version": "3.3.6",
-      "resolved": "http://registry.npm.taobao.org/@antv/g/download/@antv/g-3.3.6.tgz",
-      "integrity": "sha1-Ef7Z3cntTloqokS3yKu5gqAD8gE=",
+      "version": "3.4.10",
+      "resolved": "https://registry.npmjs.org/@antv/g/-/g-3.4.10.tgz",
+      "integrity": "sha512-pKy/L1SyRBsXuujdkggqrdBA0/ciAgHiArYBdIJsxHRxCneUP01wGwHdGfDayh2+S0gcSBHynjhoEahsaZaLkw==",
       "requires": {
         "@antv/gl-matrix": "~2.7.1",
         "@antv/util": "~1.3.1",
         "d3-ease": "~1.0.3",
         "d3-interpolate": "~1.1.5",
         "d3-timer": "~1.0.6",
-        "wolfy87-eventemitter": "~5.1.0"
+        "detect-browser": "^5.1.0"
       }
     },
     "@antv/g2": {
-      "version": "3.5.3",
-      "resolved": "http://registry.npm.taobao.org/@antv/g2/download/@antv/g2-3.5.3.tgz",
-      "integrity": "sha1-hFFxmqyGBpC2ekCdX7ewaALErKY=",
+      "version": "3.5.17",
+      "resolved": "https://registry.npmjs.org/@antv/g2/-/g2-3.5.17.tgz",
+      "integrity": "sha512-gOjfA6pwXYEC5mrLbvg1kA3jZI5J5T2kQeGse+iBBsNc1Vje7zs9G+BleUaI4MLXSnqwhsj/ohfkP7d+h4ArNg==",
       "requires": {
         "@antv/adjust": "~0.1.0",
         "@antv/attr": "~0.1.2",
-        "@antv/component": "~0.3.2",
+        "@antv/component": "~0.3.3",
         "@antv/coord": "~0.1.0",
-        "@antv/g": "~3.3.6",
+        "@antv/g": "~3.4.10",
         "@antv/scale": "~0.1.1",
         "@antv/util": "~1.3.1",
         "venn.js": "~0.2.20",
@@ -117,31 +131,31 @@
     },
     "@antv/g2-brush": {
       "version": "0.0.2",
-      "resolved": "http://registry.npm.taobao.org/@antv/g2-brush/download/@antv/g2-brush-0.0.2.tgz",
-      "integrity": "sha1-C2Xz67+CaQICkT0LZ1mrKQD6qEE="
+      "resolved": "https://registry.npmjs.org/@antv/g2-brush/-/g2-brush-0.0.2.tgz",
+      "integrity": "sha512-7O9szwem19nmEgReXhFB8kVLRaz8J5MHvrzDSDY36YaBOaHSWRGHnvYt2KkkPqgWtHtLY1srssk4X/UmP5govA=="
     },
     "@antv/g2-plugin-slider": {
       "version": "2.1.1",
-      "resolved": "http://registry.npm.taobao.org/@antv/g2-plugin-slider/download/@antv/g2-plugin-slider-2.1.1.tgz",
-      "integrity": "sha1-wgxfHPCFvqR4+KsfyEg35FxGoGU="
+      "resolved": "https://registry.npmjs.org/@antv/g2-plugin-slider/-/g2-plugin-slider-2.1.1.tgz",
+      "integrity": "sha512-nB678VEGG3FkrvkDDFADAKjLQIeXzITEYqey5oeOpbf0vT5jOa55lQDyJDZ79cK8PmU/Hz6VPeSb3CNQBA+/FQ=="
     },
     "@antv/gl-matrix": {
       "version": "2.7.1",
-      "resolved": "http://registry.npm.taobao.org/@antv/gl-matrix/download/@antv/gl-matrix-2.7.1.tgz",
-      "integrity": "sha1-rLjjf3qz3wE0WrpDcteUK+QuuhQ="
+      "resolved": "https://registry.npmjs.org/@antv/gl-matrix/-/gl-matrix-2.7.1.tgz",
+      "integrity": "sha512-oOWcVNlpELIKi9x+Mm1Vwbz8pXfkbJKykoCIOJ/dNK79hSIANbpXJ5d3Rra9/wZqK6MC961B7sybFhPlLraT3Q=="
     },
     "@antv/hierarchy": {
       "version": "0.4.0",
-      "resolved": "http://registry.npm.taobao.org/@antv/hierarchy/download/@antv/hierarchy-0.4.0.tgz",
-      "integrity": "sha1-cStbRHfuC4uNsXTGgrU1awQRqrY=",
+      "resolved": "https://registry.npmjs.org/@antv/hierarchy/-/hierarchy-0.4.0.tgz",
+      "integrity": "sha512-ols+m+Z8QA4895SWMTOSjVImOX4tEbWQTwJ0NE+WATc0WLSKs6D9y2yaR+ZWt6P60BMGVIKS6lIfabO3CwGgnQ==",
       "requires": {
         "@antv/util": "~1.3.1"
       }
     },
     "@antv/scale": {
-      "version": "0.1.2",
-      "resolved": "http://registry.npm.taobao.org/@antv/scale/download/@antv/scale-0.1.2.tgz",
-      "integrity": "sha1-vZyzMDPYlEtSw+DkrM/WBUHDwUc=",
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/@antv/scale/-/scale-0.1.5.tgz",
+      "integrity": "sha512-7RAu4iH5+Hk21h6+aBMiDTfmLf4IibK2SWjx/+E4f4AXRpqucO+8u7IbZdFkakAWxvqhJtN3oePJuTKqOMcmlg==",
       "requires": {
         "@antv/util": "~1.3.1",
         "fecha": "~2.3.3"
@@ -149,379 +163,321 @@
     },
     "@antv/util": {
       "version": "1.3.1",
-      "resolved": "http://registry.npm.taobao.org/@antv/util/download/@antv/util-1.3.1.tgz",
-      "integrity": "sha1-MKNLIB/5Em7A1YxyyBZqnD5kTM0=",
+      "resolved": "https://registry.npmjs.org/@antv/util/-/util-1.3.1.tgz",
+      "integrity": "sha512-cbUta0hIJrKEaW3eKoGarz3Ita+9qUPF2YzTj8A6wds/nNiy20G26ztIWHU+5ThLc13B1n5Ik52LbaCaeg9enA==",
       "requires": {
         "@antv/gl-matrix": "^2.7.1"
       }
     },
     "@babel/code-frame": {
-      "version": "7.0.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0.tgz",
-      "integrity": "sha1-BuKrGb21NThVWaq7W6WXKUgoAPg=",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
+      "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
       "requires": {
-        "@babel/highlight": "^7.0.0"
+        "@babel/highlight": "^7.10.4"
       }
     },
+    "@babel/compat-data": {
+      "version": "7.12.7",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz",
+      "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw=="
+    },
     "@babel/core": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/core/download/@babel/core-7.4.3.tgz",
-      "integrity": "sha1-GY1tOvRWe+OYlVDZfgaN6UUDB08=",
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "@babel/generator": "^7.4.0",
-        "@babel/helpers": "^7.4.3",
-        "@babel/parser": "^7.4.3",
-        "@babel/template": "^7.4.0",
-        "@babel/traverse": "^7.4.3",
-        "@babel/types": "^7.4.0",
-        "convert-source-map": "^1.1.0",
+      "version": "7.12.9",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz",
+      "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==",
+      "requires": {
+        "@babel/code-frame": "^7.10.4",
+        "@babel/generator": "^7.12.5",
+        "@babel/helper-module-transforms": "^7.12.1",
+        "@babel/helpers": "^7.12.5",
+        "@babel/parser": "^7.12.7",
+        "@babel/template": "^7.12.7",
+        "@babel/traverse": "^7.12.9",
+        "@babel/types": "^7.12.7",
+        "convert-source-map": "^1.7.0",
         "debug": "^4.1.0",
-        "json5": "^2.1.0",
-        "lodash": "^4.17.11",
+        "gensync": "^1.0.0-beta.1",
+        "json5": "^2.1.2",
+        "lodash": "^4.17.19",
         "resolve": "^1.3.2",
         "semver": "^5.4.1",
         "source-map": "^0.5.0"
       },
       "dependencies": {
         "debug": {
-          "version": "4.1.1",
-          "resolved": "http://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
-          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+          "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
           "requires": {
-            "ms": "^2.1.1"
+            "ms": "2.1.2"
           }
         },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+        },
         "source-map": {
           "version": "0.5.7",
-          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
           "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
         }
       }
     },
     "@babel/generator": {
-      "version": "7.4.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.4.0.tgz",
-      "integrity": "sha1-wjDnlYmuenKf1GMbne1NwiBBgZY=",
+      "version": "7.12.5",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
+      "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
       "requires": {
-        "@babel/types": "^7.4.0",
+        "@babel/types": "^7.12.5",
         "jsesc": "^2.5.1",
-        "lodash": "^4.17.11",
-        "source-map": "^0.5.0",
-        "trim-right": "^1.0.1"
+        "source-map": "^0.5.0"
       },
       "dependencies": {
         "source-map": {
           "version": "0.5.7",
-          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
           "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
         }
       }
     },
     "@babel/helper-annotate-as-pure": {
-      "version": "7.0.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.0.0.tgz",
-      "integrity": "sha1-Mj053QtQ4Qx8Bsp9djjmhk2MXDI=",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz",
+      "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==",
       "requires": {
-        "@babel/types": "^7.0.0"
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.1.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
-      "integrity": "sha1-a2lijf5Ah3mODE7Zjj1Kay+9L18=",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz",
+      "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==",
       "requires": {
-        "@babel/helper-explode-assignable-expression": "^7.1.0",
-        "@babel/types": "^7.0.0"
+        "@babel/helper-explode-assignable-expression": "^7.10.4",
+        "@babel/types": "^7.10.4"
       }
     },
-    "@babel/helper-call-delegate": {
-      "version": "7.4.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-call-delegate/download/@babel/helper-call-delegate-7.4.0.tgz",
-      "integrity": "sha1-8wjqvg1E9FEheFOu303qX2/jKU8=",
+    "@babel/helper-compilation-targets": {
+      "version": "7.12.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz",
+      "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==",
       "requires": {
-        "@babel/helper-hoist-variables": "^7.4.0",
-        "@babel/traverse": "^7.4.0",
-        "@babel/types": "^7.4.0"
+        "@babel/compat-data": "^7.12.5",
+        "@babel/helper-validator-option": "^7.12.1",
+        "browserslist": "^4.14.5",
+        "semver": "^5.5.0"
       }
     },
     "@babel/helper-create-class-features-plugin": {
-      "version": "7.4.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz",
-      "integrity": "sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA==",
-      "dev": true,
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz",
+      "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==",
       "requires": {
-        "@babel/helper-function-name": "^7.1.0",
-        "@babel/helper-member-expression-to-functions": "^7.0.0",
-        "@babel/helper-optimise-call-expression": "^7.0.0",
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/helper-replace-supers": "^7.4.4",
-        "@babel/helper-split-export-declaration": "^7.4.4"
-      },
-      "dependencies": {
-        "@babel/generator": {
-          "version": "7.4.4",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz",
-          "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==",
-          "dev": true,
-          "requires": {
-            "@babel/types": "^7.4.4",
-            "jsesc": "^2.5.1",
-            "lodash": "^4.17.11",
-            "source-map": "^0.5.0",
-            "trim-right": "^1.0.1"
-          }
-        },
-        "@babel/helper-replace-supers": {
-          "version": "7.4.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz",
-          "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-member-expression-to-functions": "^7.0.0",
-            "@babel/helper-optimise-call-expression": "^7.0.0",
-            "@babel/traverse": "^7.4.4",
-            "@babel/types": "^7.4.4"
-          }
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.4.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
-          "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
-          "dev": true,
-          "requires": {
-            "@babel/types": "^7.4.4"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.4.5",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz",
-          "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==",
-          "dev": true
-        },
-        "@babel/traverse": {
-          "version": "7.4.5",
-          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz",
-          "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==",
-          "dev": true,
-          "requires": {
-            "@babel/code-frame": "^7.0.0",
-            "@babel/generator": "^7.4.4",
-            "@babel/helper-function-name": "^7.1.0",
-            "@babel/helper-split-export-declaration": "^7.4.4",
-            "@babel/parser": "^7.4.5",
-            "@babel/types": "^7.4.4",
-            "debug": "^4.1.0",
-            "globals": "^11.1.0",
-            "lodash": "^4.17.11"
-          }
-        },
-        "@babel/types": {
-          "version": "7.4.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
-          "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
-          "dev": true,
-          "requires": {
-            "esutils": "^2.0.2",
-            "lodash": "^4.17.11",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        }
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/helper-member-expression-to-functions": "^7.12.1",
+        "@babel/helper-optimise-call-expression": "^7.10.4",
+        "@babel/helper-replace-supers": "^7.12.1",
+        "@babel/helper-split-export-declaration": "^7.10.4"
+      }
+    },
+    "@babel/helper-create-regexp-features-plugin": {
+      "version": "7.12.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz",
+      "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.10.4",
+        "regexpu-core": "^4.7.1"
       }
     },
     "@babel/helper-define-map": {
-      "version": "7.4.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.4.0.tgz",
-      "integrity": "sha1-y/2MGy8ScI4mLCb2AM0W7Wo7xsk=",
+      "version": "7.10.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz",
+      "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==",
       "requires": {
-        "@babel/helper-function-name": "^7.1.0",
-        "@babel/types": "^7.4.0",
-        "lodash": "^4.17.11"
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/types": "^7.10.5",
+        "lodash": "^4.17.19"
       }
     },
     "@babel/helper-explode-assignable-expression": {
-      "version": "7.1.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.1.0.tgz",
-      "integrity": "sha1-U3+hP28WdN90WwwA7I/k6ZaByPY=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz",
+      "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==",
       "requires": {
-        "@babel/traverse": "^7.1.0",
-        "@babel/types": "^7.0.0"
+        "@babel/types": "^7.12.1"
       }
     },
     "@babel/helper-function-name": {
-      "version": "7.1.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.1.0.tgz",
-      "integrity": "sha1-oM6wFoX3M1XUNgwSR/WCv6/I/1M=",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
+      "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
       "requires": {
-        "@babel/helper-get-function-arity": "^7.0.0",
-        "@babel/template": "^7.1.0",
-        "@babel/types": "^7.0.0"
+        "@babel/helper-get-function-arity": "^7.10.4",
+        "@babel/template": "^7.10.4",
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helper-get-function-arity": {
-      "version": "7.0.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.0.0.tgz",
-      "integrity": "sha1-g1ctQyDipGVyY3NBE8QoaLZOScM=",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
+      "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
       "requires": {
-        "@babel/types": "^7.0.0"
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helper-hoist-variables": {
-      "version": "7.4.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.4.0.tgz",
-      "integrity": "sha1-JbYhOZriKYaTKXMKYgFbvrCm+9Y=",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz",
+      "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==",
       "requires": {
-        "@babel/types": "^7.4.0"
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helper-member-expression-to-functions": {
-      "version": "7.0.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.0.0.tgz",
-      "integrity": "sha1-jNFLCg33/wDwCefXpDaUX0fHoW8=",
+      "version": "7.12.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz",
+      "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==",
       "requires": {
-        "@babel/types": "^7.0.0"
+        "@babel/types": "^7.12.7"
       }
     },
     "@babel/helper-module-imports": {
-      "version": "7.0.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.0.0.tgz",
-      "integrity": "sha1-lggbcRHkhtpNLNlxrRpP4hbMLj0=",
+      "version": "7.12.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz",
+      "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==",
       "requires": {
-        "@babel/types": "^7.0.0"
+        "@babel/types": "^7.12.5"
       }
     },
     "@babel/helper-module-transforms": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.4.3.tgz",
-      "integrity": "sha1-seNXocSeWKRyEaaFOruOKq7+sGQ=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz",
+      "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==",
       "requires": {
-        "@babel/helper-module-imports": "^7.0.0",
-        "@babel/helper-simple-access": "^7.1.0",
-        "@babel/helper-split-export-declaration": "^7.0.0",
-        "@babel/template": "^7.2.2",
-        "@babel/types": "^7.2.2",
-        "lodash": "^4.17.11"
+        "@babel/helper-module-imports": "^7.12.1",
+        "@babel/helper-replace-supers": "^7.12.1",
+        "@babel/helper-simple-access": "^7.12.1",
+        "@babel/helper-split-export-declaration": "^7.11.0",
+        "@babel/helper-validator-identifier": "^7.10.4",
+        "@babel/template": "^7.10.4",
+        "@babel/traverse": "^7.12.1",
+        "@babel/types": "^7.12.1",
+        "lodash": "^4.17.19"
       }
     },
     "@babel/helper-optimise-call-expression": {
-      "version": "7.0.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.0.0.tgz",
-      "integrity": "sha1-opIMVwKwc8Fd5REGIAqoytIEl9U=",
+      "version": "7.12.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz",
+      "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==",
       "requires": {
-        "@babel/types": "^7.0.0"
+        "@babel/types": "^7.12.7"
       }
     },
     "@babel/helper-plugin-utils": {
-      "version": "7.0.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.0.0.tgz",
-      "integrity": "sha1-u7P77phmHFaQNCN8wDlnupm08lA="
-    },
-    "@babel/helper-regex": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.4.3.tgz",
-      "integrity": "sha1-nW5UKL/WOKtTs3rk7IyvBHdJUUc=",
-      "requires": {
-        "lodash": "^4.17.11"
-      }
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+      "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
     },
     "@babel/helper-remap-async-to-generator": {
-      "version": "7.1.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.1.0.tgz",
-      "integrity": "sha1-Nh2AghtvONp1vT8HheziCojF/n8=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz",
+      "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==",
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.0.0",
-        "@babel/helper-wrap-function": "^7.1.0",
-        "@babel/template": "^7.1.0",
-        "@babel/traverse": "^7.1.0",
-        "@babel/types": "^7.0.0"
+        "@babel/helper-annotate-as-pure": "^7.10.4",
+        "@babel/helper-wrap-function": "^7.10.4",
+        "@babel/types": "^7.12.1"
       }
     },
     "@babel/helper-replace-supers": {
-      "version": "7.4.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.4.0.tgz",
-      "integrity": "sha1-T1attq7c1EnS2pOZwtzwVFRjtkw=",
+      "version": "7.12.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz",
+      "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==",
       "requires": {
-        "@babel/helper-member-expression-to-functions": "^7.0.0",
-        "@babel/helper-optimise-call-expression": "^7.0.0",
-        "@babel/traverse": "^7.4.0",
-        "@babel/types": "^7.4.0"
+        "@babel/helper-member-expression-to-functions": "^7.12.1",
+        "@babel/helper-optimise-call-expression": "^7.10.4",
+        "@babel/traverse": "^7.12.5",
+        "@babel/types": "^7.12.5"
       }
     },
     "@babel/helper-simple-access": {
-      "version": "7.1.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.1.0.tgz",
-      "integrity": "sha1-Ze65VMjCRb6qToWdphiPOdceWFw=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz",
+      "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==",
+      "requires": {
+        "@babel/types": "^7.12.1"
+      }
+    },
+    "@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz",
+      "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==",
       "requires": {
-        "@babel/template": "^7.1.0",
-        "@babel/types": "^7.0.0"
+        "@babel/types": "^7.12.1"
       }
     },
     "@babel/helper-split-export-declaration": {
-      "version": "7.4.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.4.0.tgz",
-      "integrity": "sha1-Vxv9UnAfSSkg1jt/c1Aw6aPhC1U=",
+      "version": "7.11.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
+      "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
       "requires": {
-        "@babel/types": "^7.4.0"
+        "@babel/types": "^7.11.0"
       }
     },
+    "@babel/helper-validator-identifier": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
+      "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+    },
+    "@babel/helper-validator-option": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz",
+      "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A=="
+    },
     "@babel/helper-wrap-function": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.2.0.tgz",
-      "integrity": "sha1-xOABJEV2nigVtVKW6tQ6lYVJ9vo=",
+      "version": "7.12.3",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz",
+      "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==",
       "requires": {
-        "@babel/helper-function-name": "^7.1.0",
-        "@babel/template": "^7.1.0",
-        "@babel/traverse": "^7.1.0",
-        "@babel/types": "^7.2.0"
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/template": "^7.10.4",
+        "@babel/traverse": "^7.10.4",
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helpers": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.4.3.tgz",
-      "integrity": "sha1-ex01Q2NJSzHLmiQXroavMreFOjs=",
+      "version": "7.12.5",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz",
+      "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==",
       "requires": {
-        "@babel/template": "^7.4.0",
-        "@babel/traverse": "^7.4.3",
-        "@babel/types": "^7.4.0"
+        "@babel/template": "^7.10.4",
+        "@babel/traverse": "^7.12.5",
+        "@babel/types": "^7.12.5"
       }
     },
     "@babel/highlight": {
-      "version": "7.0.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.0.0.tgz",
-      "integrity": "sha1-9xDDjI1Fjm3ZogGvtjf8t4HOmeQ=",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
+      "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
       "requires": {
+        "@babel/helper-validator-identifier": "^7.10.4",
         "chalk": "^2.0.0",
-        "esutils": "^2.0.2",
         "js-tokens": "^4.0.0"
       },
       "dependencies": {
         "ansi-styles": {
           "version": "3.2.1",
-          "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz",
-          "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
           "requires": {
             "color-convert": "^1.9.0"
           }
         },
         "chalk": {
           "version": "2.4.2",
-          "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz",
-          "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
           "requires": {
             "ansi-styles": "^3.2.1",
             "escape-string-regexp": "^1.0.5",
@@ -530,8 +486,8 @@
         },
         "supports-color": {
           "version": "5.5.0",
-          "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz",
-          "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+          "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
           "requires": {
             "has-flag": "^3.0.0"
           }
@@ -539,606 +495,771 @@
       }
     },
     "@babel/parser": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.4.3.tgz",
-      "integrity": "sha1-6zrID2SqEByQfUzlQGNg/nW3iVs="
+      "version": "7.12.7",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz",
+      "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg=="
     },
     "@babel/plugin-proposal-async-generator-functions": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.2.0.tgz",
-      "integrity": "sha1-somzBmadzkrSCwJSiJoVdoydQX4=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz",
+      "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/helper-remap-async-to-generator": "^7.1.0",
-        "@babel/plugin-syntax-async-generators": "^7.2.0"
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-remap-async-to-generator": "^7.12.1",
+        "@babel/plugin-syntax-async-generators": "^7.8.0"
       }
     },
     "@babel/plugin-proposal-class-properties": {
-      "version": "7.4.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz",
-      "integrity": "sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg==",
-      "dev": true,
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz",
+      "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==",
       "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.4.4",
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-create-class-features-plugin": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-proposal-decorators": {
-      "version": "7.4.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz",
-      "integrity": "sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw==",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz",
+      "integrity": "sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.4.4",
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/plugin-syntax-decorators": "^7.2.0"
+        "@babel/helper-create-class-features-plugin": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-decorators": "^7.12.1"
+      }
+    },
+    "@babel/plugin-proposal-dynamic-import": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz",
+      "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.0"
+      }
+    },
+    "@babel/plugin-proposal-export-namespace-from": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz",
+      "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-json-strings": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.2.0.tgz",
-      "integrity": "sha1-Vo7MRGxhSK5rJn8CVREwiR4p8xc=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz",
+      "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/plugin-syntax-json-strings": "^7.2.0"
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-json-strings": "^7.8.0"
+      }
+    },
+    "@babel/plugin-proposal-logical-assignment-operators": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz",
+      "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+      }
+    },
+    "@babel/plugin-proposal-nullish-coalescing-operator": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz",
+      "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
+      }
+    },
+    "@babel/plugin-proposal-numeric-separator": {
+      "version": "7.12.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz",
+      "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
       }
     },
     "@babel/plugin-proposal-object-rest-spread": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.4.3.tgz",
-      "integrity": "sha1-vifNQW7O66hBQTBbk8KC9d4ju7Q=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz",
+      "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
+        "@babel/plugin-transform-parameters": "^7.12.1"
       }
     },
     "@babel/plugin-proposal-optional-catch-binding": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.2.0.tgz",
-      "integrity": "sha1-E12B7baKCB5V5W7EhUHs6AZcOPU=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz",
+      "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.2.0"
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
+      }
+    },
+    "@babel/plugin-proposal-optional-chaining": {
+      "version": "7.12.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz",
+      "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.0"
+      }
+    },
+    "@babel/plugin-proposal-private-methods": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz",
+      "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==",
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-proposal-unicode-property-regex": {
-      "version": "7.4.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.4.0.tgz",
-      "integrity": "sha1-IC2R7pd9dg74P09BaygNVovoRiM=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz",
+      "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/helper-regex": "^7.0.0",
-        "regexpu-core": "^4.5.4"
+        "@babel/helper-create-regexp-features-plugin": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-syntax-async-generators": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.2.0.tgz",
-      "integrity": "sha1-aeHw2zTG9aDPfiszI78VmnbIy38=",
+      "version": "7.8.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+      "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-class-properties": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz",
+      "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-syntax-decorators": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz",
-      "integrity": "sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.1.tgz",
+      "integrity": "sha512-ir9YW5daRrTYiy9UJ2TzdNIJEZu8KclVzDcfSt4iEmOtwQ4llPtWInNKJyKnVXp1vE4bbVd5S31M/im3mYMO1w==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-syntax-dynamic-import": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz",
-      "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==",
-      "dev": true,
+      "version": "7.8.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+      "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-export-namespace-from": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+      "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.8.3"
       }
     },
     "@babel/plugin-syntax-json-strings": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.2.0.tgz",
-      "integrity": "sha1-cr0T9v/h0lk4Ep0qGGsR/WKVFHA=",
+      "version": "7.8.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+      "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.8.0"
       }
     },
     "@babel/plugin-syntax-jsx": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz",
-      "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz",
+      "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-syntax-logical-assignment-operators": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+      "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-syntax-nullish-coalescing-operator": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+      "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-numeric-separator": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+      "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-syntax-object-rest-spread": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.2.0.tgz",
-      "integrity": "sha1-O3o+czUQxX6CC5FCpleayLDfrS4=",
+      "version": "7.8.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+      "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.8.0"
       }
     },
     "@babel/plugin-syntax-optional-catch-binding": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.2.0.tgz",
-      "integrity": "sha1-qUAT1u2okI3+akd+f57ahWVuz1w=",
+      "version": "7.8.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+      "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-optional-chaining": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+      "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-top-level-await": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz",
+      "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-arrow-functions": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.2.0.tgz",
-      "integrity": "sha1-mur75Nb/xlY7+Pg3IJFijwB3lVA=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz",
+      "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-async-to-generator": {
-      "version": "7.4.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.4.0.tgz",
-      "integrity": "sha1-I0/j5Fjc6VhlwNFS0lYRmyN4NLA=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz",
+      "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==",
       "requires": {
-        "@babel/helper-module-imports": "^7.0.0",
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/helper-remap-async-to-generator": "^7.1.0"
+        "@babel/helper-module-imports": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-remap-async-to-generator": "^7.12.1"
       }
     },
     "@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.2.0.tgz",
-      "integrity": "sha1-XTzBHo1d3XUqpkyRSNDbbLef0ZA=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz",
+      "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-block-scoping": {
-      "version": "7.4.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.4.0.tgz",
-      "integrity": "sha1-Fk3zu0Hj3rlUxMoy/6n8qlbTC8s=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz",
+      "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "lodash": "^4.17.11"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-classes": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.4.3.tgz",
-      "integrity": "sha1-rcehE3q0KHpVXUKcxW7N6PQMBiw=",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.0.0",
-        "@babel/helper-define-map": "^7.4.0",
-        "@babel/helper-function-name": "^7.1.0",
-        "@babel/helper-optimise-call-expression": "^7.0.0",
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/helper-replace-supers": "^7.4.0",
-        "@babel/helper-split-export-declaration": "^7.4.0",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz",
+      "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.10.4",
+        "@babel/helper-define-map": "^7.10.4",
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/helper-optimise-call-expression": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-replace-supers": "^7.12.1",
+        "@babel/helper-split-export-declaration": "^7.10.4",
         "globals": "^11.1.0"
       }
     },
     "@babel/plugin-transform-computed-properties": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.2.0.tgz",
-      "integrity": "sha1-g6ffamWIZbHI9kHVEMbzryICFto=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz",
+      "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-destructuring": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.4.3.tgz",
-      "integrity": "sha1-GpX1yivy+R7wZI1d44qNRy2kNQ8=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz",
+      "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-dotall-regex": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.4.3.tgz",
-      "integrity": "sha1-/O/xwW0AxT0y2YBEhgb4Es1tAr8=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz",
+      "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/helper-regex": "^7.4.3",
-        "regexpu-core": "^4.5.4"
+        "@babel/helper-create-regexp-features-plugin": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-duplicate-keys": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.2.0.tgz",
-      "integrity": "sha1-2VLEkw8xKk2//xjwspFOYMNVMLM=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz",
+      "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.2.0.tgz",
-      "integrity": "sha1-pjhoKJ5bQAf3BU1GSRr1FDV2YAg=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz",
+      "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==",
       "requires": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-for-of": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.4.3.tgz",
-      "integrity": "sha1-w2/0DYk/K4NSIColWIJPcM116f4=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz",
+      "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-function-name": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.4.3.tgz",
-      "integrity": "sha1-Ewwn7H+08MujDpWJiUSeXsjSK70=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz",
+      "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==",
       "requires": {
-        "@babel/helper-function-name": "^7.1.0",
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-literals": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.2.0.tgz",
-      "integrity": "sha1-aQNT6B+SZ9rU/Yz9d+r6hqulPqE=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz",
+      "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-member-expression-literals": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.2.0.tgz",
-      "integrity": "sha1-+hCqXFiiy2r88sn/qMtNiz1Imi0=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz",
+      "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-modules-amd": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.2.0.tgz",
-      "integrity": "sha1-gqm85FuVRB9heiQBHcidEtp/TuY=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz",
+      "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==",
       "requires": {
-        "@babel/helper-module-transforms": "^7.1.0",
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-module-transforms": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-commonjs": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.4.3.tgz",
-      "integrity": "sha1-ORfyYEY6wI+Ilqpb1UQD9uH+0WU=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz",
+      "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==",
       "requires": {
-        "@babel/helper-module-transforms": "^7.4.3",
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/helper-simple-access": "^7.1.0"
+        "@babel/helper-module-transforms": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-simple-access": "^7.12.1",
+        "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-systemjs": {
-      "version": "7.4.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.4.0.tgz",
-      "integrity": "sha1-wkleVVKBNXl7yBb11Q+FFpjFhqE=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz",
+      "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==",
       "requires": {
-        "@babel/helper-hoist-variables": "^7.4.0",
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-hoist-variables": "^7.10.4",
+        "@babel/helper-module-transforms": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-validator-identifier": "^7.10.4",
+        "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-umd": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.2.0.tgz",
-      "integrity": "sha1-dnjOdRafCHe46yI1U4wHQmjdAa4=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz",
+      "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==",
       "requires": {
-        "@babel/helper-module-transforms": "^7.1.0",
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-module-transforms": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.4.2",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.4.2.tgz",
-      "integrity": "sha1-gAORE21svMgHKNvbo8HG5G+GwS4=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz",
+      "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==",
       "requires": {
-        "regexp-tree": "^0.1.0"
+        "@babel/helper-create-regexp-features-plugin": "^7.12.1"
       }
     },
     "@babel/plugin-transform-new-target": {
-      "version": "7.4.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.4.0.tgz",
-      "integrity": "sha1-Z2WKHZRO21PI1PowBEc6DdeDgVA=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz",
+      "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-object-super": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.2.0.tgz",
-      "integrity": "sha1-s11MEPVrq11lAEfa0PHY6IFLZZg=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz",
+      "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/helper-replace-supers": "^7.1.0"
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-replace-supers": "^7.12.1"
       }
     },
     "@babel/plugin-transform-parameters": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.4.3.tgz",
-      "integrity": "sha1-5f9ikp/fTPk+WLrbXiQwMDADgA0=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz",
+      "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==",
       "requires": {
-        "@babel/helper-call-delegate": "^7.4.0",
-        "@babel/helper-get-function-arity": "^7.0.0",
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-property-literals": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.2.0.tgz",
-      "integrity": "sha1-A+M/ZT9bJcTrVyyYuUhQVbOJ6QU=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz",
+      "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-regenerator": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.4.3.tgz",
-      "integrity": "sha1-Kml6+WiH4rv10wOrAiHROd5ec5w=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz",
+      "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==",
       "requires": {
-        "regenerator-transform": "^0.13.4"
+        "regenerator-transform": "^0.14.2"
       }
     },
     "@babel/plugin-transform-reserved-words": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.2.0.tgz",
-      "integrity": "sha1-R5Kvh8mYpJNnWX0H/t8CY20uFjQ=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz",
+      "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-runtime": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.4.3.tgz",
-      "integrity": "sha1-TWaRaQ7NyfXLjDqxcKFXbB9VY3E=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz",
+      "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==",
       "requires": {
-        "@babel/helper-module-imports": "^7.0.0",
-        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-module-imports": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4",
         "resolve": "^1.8.1",
         "semver": "^5.5.1"
       }
     },
     "@babel/plugin-transform-shorthand-properties": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.2.0.tgz",
-      "integrity": "sha1-YzOu4vjW7n4oYVRXKYk0o7RhmPA=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz",
+      "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-spread": {
-      "version": "7.2.2",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.2.2.tgz",
-      "integrity": "sha1-MQOpq+IvdCttQG7NPNSbd0kZtAY=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz",
+      "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1"
       }
     },
     "@babel/plugin-transform-sticky-regex": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.2.0.tgz",
-      "integrity": "sha1-oeRUtZlVYKnB4NU338FQYf0mh+E=",
+      "version": "7.12.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz",
+      "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/helper-regex": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-template-literals": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.2.0.tgz",
-      "integrity": "sha1-2H7QG46qx6kkc/YIyXwIneK6Hls=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz",
+      "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==",
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.0.0",
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-typeof-symbol": {
-      "version": "7.2.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.2.0.tgz",
-      "integrity": "sha1-EX0rzsL79ktLWdH5gZiUaC0p8rI=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz",
+      "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-transform-unicode-escapes": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz",
+      "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-unicode-regex": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.4.3.tgz",
-      "integrity": "sha1-OGhwP8Do9EPdplZUspjfV297hjs=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz",
+      "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/helper-regex": "^7.4.3",
-        "regexpu-core": "^4.5.4"
+        "@babel/helper-create-regexp-features-plugin": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/polyfill": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/polyfill/download/@babel/polyfill-7.4.3.tgz",
-      "integrity": "sha1-My3G9XtxgBfDqLN7TuqKpu6sEYc=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz",
+      "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==",
       "dev": true,
       "requires": {
         "core-js": "^2.6.5",
-        "regenerator-runtime": "^0.13.2"
+        "regenerator-runtime": "^0.13.4"
       },
       "dependencies": {
         "regenerator-runtime": {
-          "version": "0.13.2",
-          "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.2.tgz",
-          "integrity": "sha1-MuWcmm+5saSv8JtJMMotRHc0NEc=",
+          "version": "0.13.7",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
+          "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==",
           "dev": true
         }
       }
     },
     "@babel/preset-env": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.4.3.tgz",
-      "integrity": "sha1-5x4W4SPcD79lpSy8vO/QcvvQKIA=",
+      "version": "7.12.7",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.7.tgz",
+      "integrity": "sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew==",
+      "requires": {
+        "@babel/compat-data": "^7.12.7",
+        "@babel/helper-compilation-targets": "^7.12.5",
+        "@babel/helper-module-imports": "^7.12.5",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-validator-option": "^7.12.1",
+        "@babel/plugin-proposal-async-generator-functions": "^7.12.1",
+        "@babel/plugin-proposal-class-properties": "^7.12.1",
+        "@babel/plugin-proposal-dynamic-import": "^7.12.1",
+        "@babel/plugin-proposal-export-namespace-from": "^7.12.1",
+        "@babel/plugin-proposal-json-strings": "^7.12.1",
+        "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1",
+        "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
+        "@babel/plugin-proposal-numeric-separator": "^7.12.7",
+        "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
+        "@babel/plugin-proposal-optional-catch-binding": "^7.12.1",
+        "@babel/plugin-proposal-optional-chaining": "^7.12.7",
+        "@babel/plugin-proposal-private-methods": "^7.12.1",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.12.1",
+        "@babel/plugin-syntax-async-generators": "^7.8.0",
+        "@babel/plugin-syntax-class-properties": "^7.12.1",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.0",
+        "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+        "@babel/plugin-syntax-json-strings": "^7.8.0",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
+        "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.0",
+        "@babel/plugin-syntax-top-level-await": "^7.12.1",
+        "@babel/plugin-transform-arrow-functions": "^7.12.1",
+        "@babel/plugin-transform-async-to-generator": "^7.12.1",
+        "@babel/plugin-transform-block-scoped-functions": "^7.12.1",
+        "@babel/plugin-transform-block-scoping": "^7.12.1",
+        "@babel/plugin-transform-classes": "^7.12.1",
+        "@babel/plugin-transform-computed-properties": "^7.12.1",
+        "@babel/plugin-transform-destructuring": "^7.12.1",
+        "@babel/plugin-transform-dotall-regex": "^7.12.1",
+        "@babel/plugin-transform-duplicate-keys": "^7.12.1",
+        "@babel/plugin-transform-exponentiation-operator": "^7.12.1",
+        "@babel/plugin-transform-for-of": "^7.12.1",
+        "@babel/plugin-transform-function-name": "^7.12.1",
+        "@babel/plugin-transform-literals": "^7.12.1",
+        "@babel/plugin-transform-member-expression-literals": "^7.12.1",
+        "@babel/plugin-transform-modules-amd": "^7.12.1",
+        "@babel/plugin-transform-modules-commonjs": "^7.12.1",
+        "@babel/plugin-transform-modules-systemjs": "^7.12.1",
+        "@babel/plugin-transform-modules-umd": "^7.12.1",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1",
+        "@babel/plugin-transform-new-target": "^7.12.1",
+        "@babel/plugin-transform-object-super": "^7.12.1",
+        "@babel/plugin-transform-parameters": "^7.12.1",
+        "@babel/plugin-transform-property-literals": "^7.12.1",
+        "@babel/plugin-transform-regenerator": "^7.12.1",
+        "@babel/plugin-transform-reserved-words": "^7.12.1",
+        "@babel/plugin-transform-shorthand-properties": "^7.12.1",
+        "@babel/plugin-transform-spread": "^7.12.1",
+        "@babel/plugin-transform-sticky-regex": "^7.12.7",
+        "@babel/plugin-transform-template-literals": "^7.12.1",
+        "@babel/plugin-transform-typeof-symbol": "^7.12.1",
+        "@babel/plugin-transform-unicode-escapes": "^7.12.1",
+        "@babel/plugin-transform-unicode-regex": "^7.12.1",
+        "@babel/preset-modules": "^0.1.3",
+        "@babel/types": "^7.12.7",
+        "core-js-compat": "^3.7.0",
+        "semver": "^5.5.0"
+      }
+    },
+    "@babel/preset-modules": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz",
+      "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==",
       "requires": {
-        "@babel/helper-module-imports": "^7.0.0",
         "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
-        "@babel/plugin-proposal-json-strings": "^7.2.0",
-        "@babel/plugin-proposal-object-rest-spread": "^7.4.3",
-        "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
-        "@babel/plugin-proposal-unicode-property-regex": "^7.4.0",
-        "@babel/plugin-syntax-async-generators": "^7.2.0",
-        "@babel/plugin-syntax-json-strings": "^7.2.0",
-        "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
-        "@babel/plugin-transform-arrow-functions": "^7.2.0",
-        "@babel/plugin-transform-async-to-generator": "^7.4.0",
-        "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
-        "@babel/plugin-transform-block-scoping": "^7.4.0",
-        "@babel/plugin-transform-classes": "^7.4.3",
-        "@babel/plugin-transform-computed-properties": "^7.2.0",
-        "@babel/plugin-transform-destructuring": "^7.4.3",
-        "@babel/plugin-transform-dotall-regex": "^7.4.3",
-        "@babel/plugin-transform-duplicate-keys": "^7.2.0",
-        "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
-        "@babel/plugin-transform-for-of": "^7.4.3",
-        "@babel/plugin-transform-function-name": "^7.4.3",
-        "@babel/plugin-transform-literals": "^7.2.0",
-        "@babel/plugin-transform-member-expression-literals": "^7.2.0",
-        "@babel/plugin-transform-modules-amd": "^7.2.0",
-        "@babel/plugin-transform-modules-commonjs": "^7.4.3",
-        "@babel/plugin-transform-modules-systemjs": "^7.4.0",
-        "@babel/plugin-transform-modules-umd": "^7.2.0",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.2",
-        "@babel/plugin-transform-new-target": "^7.4.0",
-        "@babel/plugin-transform-object-super": "^7.2.0",
-        "@babel/plugin-transform-parameters": "^7.4.3",
-        "@babel/plugin-transform-property-literals": "^7.2.0",
-        "@babel/plugin-transform-regenerator": "^7.4.3",
-        "@babel/plugin-transform-reserved-words": "^7.2.0",
-        "@babel/plugin-transform-shorthand-properties": "^7.2.0",
-        "@babel/plugin-transform-spread": "^7.2.0",
-        "@babel/plugin-transform-sticky-regex": "^7.2.0",
-        "@babel/plugin-transform-template-literals": "^7.2.0",
-        "@babel/plugin-transform-typeof-symbol": "^7.2.0",
-        "@babel/plugin-transform-unicode-regex": "^7.4.3",
-        "@babel/types": "^7.4.0",
-        "browserslist": "^4.5.2",
-        "core-js-compat": "^3.0.0",
-        "invariant": "^2.2.2",
-        "js-levenshtein": "^1.1.3",
-        "semver": "^5.5.0"
+        "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+        "@babel/plugin-transform-dotall-regex": "^7.4.4",
+        "@babel/types": "^7.4.4",
+        "esutils": "^2.0.2"
       }
     },
     "@babel/runtime": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.4.3.tgz",
-      "integrity": "sha1-eYiORSA0IjrZYJGHoK0f4NKtS9w=",
-      "dev": true,
+      "version": "7.12.5",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
+      "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
       "requires": {
-        "regenerator-runtime": "^0.13.2"
+        "regenerator-runtime": "^0.13.4"
       },
       "dependencies": {
         "regenerator-runtime": {
-          "version": "0.13.2",
-          "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.2.tgz",
-          "integrity": "sha1-MuWcmm+5saSv8JtJMMotRHc0NEc=",
-          "dev": true
+          "version": "0.13.7",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
+          "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
         }
       }
     },
     "@babel/runtime-corejs2": {
-      "version": "7.4.5",
-      "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.4.5.tgz",
-      "integrity": "sha512-5yLuwzvIDecKwYMzJtiarky4Fb5643H3Ao5jwX0HrMR5oM5mn2iHH9wSZonxwNK0oAjAFUQAiOd4jT7/9Y2jMQ==",
+      "version": "7.12.5",
+      "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.12.5.tgz",
+      "integrity": "sha512-kt5YpZ7F5A05LOgQuaMXXmcxakK/qttf5C/E1BJPA3Kf5PanbjPzDoXN+PIslUnjUxpuKblCsXyP0QfMiqyKqA==",
       "dev": true,
       "requires": {
         "core-js": "^2.6.5",
-        "regenerator-runtime": "^0.13.2"
+        "regenerator-runtime": "^0.13.4"
       },
       "dependencies": {
         "regenerator-runtime": {
-          "version": "0.13.2",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz",
-          "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==",
+          "version": "0.13.7",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
+          "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==",
           "dev": true
         }
       }
     },
     "@babel/template": {
-      "version": "7.4.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/template/download/@babel/template-7.4.0.tgz",
-      "integrity": "sha1-EkdOnAd7rlhcXYNalcCwt5DCXIs=",
+      "version": "7.12.7",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz",
+      "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==",
       "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "@babel/parser": "^7.4.0",
-        "@babel/types": "^7.4.0"
+        "@babel/code-frame": "^7.10.4",
+        "@babel/parser": "^7.12.7",
+        "@babel/types": "^7.12.7"
       }
     },
     "@babel/traverse": {
-      "version": "7.4.3",
-      "resolved": "http://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.4.3.tgz",
-      "integrity": "sha1-GgHwePxXXVif8wwPcb88PZzLrYQ=",
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "@babel/generator": "^7.4.0",
-        "@babel/helper-function-name": "^7.1.0",
-        "@babel/helper-split-export-declaration": "^7.4.0",
-        "@babel/parser": "^7.4.3",
-        "@babel/types": "^7.4.0",
+      "version": "7.12.9",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz",
+      "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==",
+      "requires": {
+        "@babel/code-frame": "^7.10.4",
+        "@babel/generator": "^7.12.5",
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/helper-split-export-declaration": "^7.11.0",
+        "@babel/parser": "^7.12.7",
+        "@babel/types": "^7.12.7",
         "debug": "^4.1.0",
         "globals": "^11.1.0",
-        "lodash": "^4.17.11"
+        "lodash": "^4.17.19"
       },
       "dependencies": {
         "debug": {
-          "version": "4.1.1",
-          "resolved": "http://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
-          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+          "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
           "requires": {
-            "ms": "^2.1.1"
+            "ms": "2.1.2"
           }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
         }
       }
     },
     "@babel/types": {
-      "version": "7.4.0",
-      "resolved": "http://registry.npm.taobao.org/@babel/types/download/@babel/types-7.4.0.tgz",
-      "integrity": "sha1-Zwck930kzObMfYz2RZnVEdFkiUw=",
+      "version": "7.12.7",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz",
+      "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==",
       "requires": {
-        "esutils": "^2.0.2",
-        "lodash": "^4.17.11",
+        "@babel/helper-validator-identifier": "^7.10.4",
+        "lodash": "^4.17.19",
         "to-fast-properties": "^2.0.0"
       }
     },
     "@hapi/address": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.0.0.tgz",
-      "integrity": "sha512-mV6T0IYqb0xL1UALPFplXYQmR0twnXG0M6jUswpquqT2sD12BOiCiLy3EvMp/Fy7s3DZElC4/aPjEjo2jeZpvw==",
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
+      "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==",
+      "dev": true
+    },
+    "@hapi/bourne": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz",
+      "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==",
       "dev": true
     },
     "@hapi/hoek": {
-      "version": "6.2.4",
-      "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-6.2.4.tgz",
-      "integrity": "sha512-HOJ20Kc93DkDVvjwHyHawPwPkX44sIrbXazAUDiUXaY2R9JwQGo2PhFfnQtdrsIe4igjG2fPgMra7NYw7qhy0A==",
+      "version": "8.5.1",
+      "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz",
+      "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==",
       "dev": true
     },
     "@hapi/joi": {
-      "version": "15.0.3",
-      "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.0.3.tgz",
-      "integrity": "sha512-z6CesJ2YBwgVCi+ci8SI8zixoj8bGFn/vZb9MBPbSyoxsS2PnWYjHcyTM17VLK6tx64YVK38SDIh10hJypB+ig==",
+      "version": "15.1.1",
+      "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz",
+      "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==",
       "dev": true,
       "requires": {
         "@hapi/address": "2.x.x",
-        "@hapi/hoek": "6.x.x",
+        "@hapi/bourne": "1.x.x",
+        "@hapi/hoek": "8.x.x",
         "@hapi/topo": "3.x.x"
       }
     },
     "@hapi/topo": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.0.tgz",
-      "integrity": "sha512-gZDI/eXOIk8kP2PkUKjWu9RW8GGVd2Hkgjxyr/S7Z+JF+0mr7bAlbw+DkTRxnD580o8Kqxlnba9wvqp5aOHBww==",
+      "version": "3.1.6",
+      "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz",
+      "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==",
       "dev": true,
       "requires": {
-        "@hapi/hoek": "6.x.x"
+        "@hapi/hoek": "^8.3.0"
       }
     },
     "@intervolga/optimize-cssnano-plugin": {
@@ -1184,9 +1305,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -1240,36 +1361,40 @@
     },
     "@types/anymatch": {
       "version": "1.3.1",
-      "resolved": "http://registry.npm.taobao.org/@types/anymatch/download/@types/anymatch-1.3.1.tgz",
-      "integrity": "sha1-M2utwb7sudrMOL6izzKt9ieoQho=",
+      "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz",
+      "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==",
       "dev": true
     },
     "@types/d3-format": {
-      "version": "1.3.1",
-      "resolved": "http://registry.npm.taobao.org/@types/d3-format/download/@types/d3-format-1.3.1.tgz",
-      "integrity": "sha1-Nb+IJkvWvNo5JRFlu4J/Z4ecQ4Q="
-    },
-    "@types/events": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
-      "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
-      "dev": true
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-2.0.0.tgz",
+      "integrity": "sha512-uagdkftxnGkO4pZw5jEYOM5ZnZOEsh7z8j11Qxk85UkB2RzfUUxRl7R9VvvJZHwKn8l+x+rpS77Nusq7FkFmIg=="
     },
     "@types/glob": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
-      "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
+      "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==",
       "dev": true,
       "requires": {
-        "@types/events": "*",
         "@types/minimatch": "*",
         "@types/node": "*"
       }
     },
+    "@types/json-schema": {
+      "version": "7.0.6",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz",
+      "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw=="
+    },
+    "@types/json5": {
+      "version": "0.0.29",
+      "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+      "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
+      "dev": true
+    },
     "@types/loader-utils": {
       "version": "1.1.3",
-      "resolved": "http://registry.npm.taobao.org/@types/loader-utils/download/@types/loader-utils-1.1.3.tgz",
-      "integrity": "sha1-grkWPy6tWWxoqMA+RQ+9bgid9AE=",
+      "resolved": "https://registry.npmjs.org/@types/loader-utils/-/loader-utils-1.1.3.tgz",
+      "integrity": "sha512-euKGFr2oCB3ASBwG39CYJMR3N9T0nanVqXdiH7Zu/Nqddt6SmFRxytq/i2w9LQYNQekEtGBz+pE3qG6fQTNvRg==",
       "dev": true,
       "requires": {
         "@types/node": "*",
@@ -1277,9 +1402,9 @@
       }
     },
     "@types/lodash": {
-      "version": "4.14.123",
-      "resolved": "http://registry.npm.taobao.org/@types/lodash/download/@types/lodash-4.14.123.tgz",
-      "integrity": "sha1-Ob5dIRR4yN072umO51u37+Sr/k0="
+      "version": "4.14.165",
+      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.165.tgz",
+      "integrity": "sha512-tjSSOTHhI5mCHTy/OOXYIhi2Wt1qcbHmuXD1Ha7q70CgI/I71afO4XtLb/cVexki1oVYchpul/TOuu3Arcdxrg=="
     },
     "@types/minimatch": {
       "version": "3.0.3",
@@ -1288,9 +1413,9 @@
       "dev": true
     },
     "@types/node": {
-      "version": "11.13.6",
-      "resolved": "http://registry.npm.taobao.org/@types/node/download/@types/node-11.13.6.tgz",
-      "integrity": "sha1-N+x1aQgwrLDXTOPGxDyqt4cIHoU="
+      "version": "14.14.10",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz",
+      "integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ=="
     },
     "@types/normalize-package-data": {
       "version": "2.4.0",
@@ -1299,9 +1424,15 @@
       "dev": true
     },
     "@types/q": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz",
-      "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==",
+      "version": "1.5.4",
+      "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
+      "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==",
+      "dev": true
+    },
+    "@types/source-list-map": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
+      "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==",
       "dev": true
     },
     "@types/strip-bom": {
@@ -1317,15 +1448,15 @@
       "dev": true
     },
     "@types/tapable": {
-      "version": "1.0.4",
-      "resolved": "http://registry.npm.taobao.org/@types/tapable/download/@types/tapable-1.0.4.tgz",
-      "integrity": "sha1-tP/H3Je0mMlps2CkHu4kf4JhY3A=",
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz",
+      "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==",
       "dev": true
     },
     "@types/uglify-js": {
-      "version": "3.0.4",
-      "resolved": "http://registry.npm.taobao.org/@types/uglify-js/download/@types/uglify-js-3.0.4.tgz",
-      "integrity": "sha1-lr6uI99vVhhiqDC0KIpJ6GuqwII=",
+      "version": "3.11.1",
+      "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.11.1.tgz",
+      "integrity": "sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q==",
       "dev": true,
       "requires": {
         "source-map": "^0.6.1"
@@ -1333,57 +1464,77 @@
       "dependencies": {
         "source-map": {
           "version": "0.6.1",
-          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
           "dev": true
         }
       }
     },
     "@types/webpack": {
-      "version": "4.4.27",
-      "resolved": "http://registry.npm.taobao.org/@types/webpack/download/@types/webpack-4.4.27.tgz",
-      "integrity": "sha1-i7lCkYWXems7nm5hMvVhBmqn58I=",
+      "version": "4.41.25",
+      "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.25.tgz",
+      "integrity": "sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ==",
       "dev": true,
       "requires": {
         "@types/anymatch": "*",
         "@types/node": "*",
         "@types/tapable": "*",
         "@types/uglify-js": "*",
+        "@types/webpack-sources": "*",
         "source-map": "^0.6.0"
       },
       "dependencies": {
         "source-map": {
           "version": "0.6.1",
-          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "@types/webpack-sources": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.0.0.tgz",
+      "integrity": "sha512-a5kPx98CNFRKQ+wqawroFunvFqv7GHm/3KOI52NY9xWADgc8smu4R6prt4EU/M4QfVjvgBkMqU4fBhw3QfMVkg==",
+      "dev": true,
+      "requires": {
+        "@types/node": "*",
+        "@types/source-list-map": "*",
+        "source-map": "^0.7.3"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.7.3",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+          "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
           "dev": true
         }
       }
     },
     "@vue/babel-helper-vue-jsx-merge-props": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz",
-      "integrity": "sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz",
+      "integrity": "sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==",
       "dev": true
     },
     "@vue/babel-plugin-transform-vue-jsx": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.0.0.tgz",
-      "integrity": "sha512-U+JNwVQSmaLKjO3lzCUC3cNXxprgezV1N+jOdqbP4xWNaqtWUCJnkjTVcgECM18A/AinDKPcUUeoyhU7yxUxXQ==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz",
+      "integrity": "sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==",
       "dev": true,
       "requires": {
         "@babel/helper-module-imports": "^7.0.0",
         "@babel/plugin-syntax-jsx": "^7.2.0",
-        "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
         "html-tags": "^2.0.0",
         "lodash.kebabcase": "^4.1.1",
         "svg-tags": "^1.0.0"
       }
     },
     "@vue/babel-preset-app": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-3.8.0.tgz",
-      "integrity": "sha512-A2NBzIVdtNq52foc+P+yQ/7rSm2q2oPpn2FJVW4hFgaWVOL+HaOLCjWDEQyEeMbRZvyOVHMuom097u3p2H2Rfw==",
+      "version": "3.12.1",
+      "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-3.12.1.tgz",
+      "integrity": "sha512-Zjy5jQaikV1Pz+ri0YgXFS7q4/5wCxB5tRkDOEIt5+4105u0Feb/pvH20nVL6nx9GyXrECFfcm7Yxr/z++OaPQ==",
       "dev": true,
       "requires": {
         "@babel/helper-module-imports": "^7.0.0",
@@ -1455,46 +1606,66 @@
       }
     },
     "@vue/babel-preset-jsx": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.0.0.tgz",
-      "integrity": "sha512-5CbDu/QHS+TtQNw5aYAffiMxBBB2Eo9+RJpS8X+6FJbdG5Rvc4TVipEqkrg0pJviWadNg7TEy0Uz4o7VNXeIZw==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz",
+      "integrity": "sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==",
+      "dev": true,
+      "requires": {
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+        "@vue/babel-sugar-composition-api-inject-h": "^1.2.1",
+        "@vue/babel-sugar-composition-api-render-instance": "^1.2.4",
+        "@vue/babel-sugar-functional-vue": "^1.2.2",
+        "@vue/babel-sugar-inject-h": "^1.2.2",
+        "@vue/babel-sugar-v-model": "^1.2.3",
+        "@vue/babel-sugar-v-on": "^1.2.3"
+      }
+    },
+    "@vue/babel-sugar-composition-api-inject-h": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz",
+      "integrity": "sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@vue/babel-sugar-composition-api-render-instance": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz",
+      "integrity": "sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==",
       "dev": true,
       "requires": {
-        "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
-        "@vue/babel-plugin-transform-vue-jsx": "^1.0.0",
-        "@vue/babel-sugar-functional-vue": "^1.0.0",
-        "@vue/babel-sugar-inject-h": "^1.0.0",
-        "@vue/babel-sugar-v-model": "^1.0.0",
-        "@vue/babel-sugar-v-on": "^1.0.0"
+        "@babel/plugin-syntax-jsx": "^7.2.0"
       }
     },
     "@vue/babel-sugar-functional-vue": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.0.0.tgz",
-      "integrity": "sha512-XE/jNaaorTuhWayCz+QClk5AB9OV5HzrwbzEC6sIUY0J60A28ONQKeTwxfidW42egOkqNH/UU6eE3KLfmiDj0Q==",
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz",
+      "integrity": "sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==",
       "dev": true,
       "requires": {
         "@babel/plugin-syntax-jsx": "^7.2.0"
       }
     },
     "@vue/babel-sugar-inject-h": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.0.0.tgz",
-      "integrity": "sha512-NxWU+DqtbZgfGvd25GPoFMj+rvyQ8ZA1pHj8vIeqRij+vx3sXoKkObjA9ulZunvWw5F6uG9xYy4ytpxab/X+Hg==",
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz",
+      "integrity": "sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==",
       "dev": true,
       "requires": {
         "@babel/plugin-syntax-jsx": "^7.2.0"
       }
     },
     "@vue/babel-sugar-v-model": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.0.0.tgz",
-      "integrity": "sha512-Pfg2Al0io66P1eO6zUbRIgpyKCU2qTnumiE0lao/wA/uNdb7Dx5Tfd1W6tO5SsByETPnEs8i8+gawRIXX40rFw==",
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz",
+      "integrity": "sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==",
       "dev": true,
       "requires": {
         "@babel/plugin-syntax-jsx": "^7.2.0",
-        "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
-        "@vue/babel-plugin-transform-vue-jsx": "^1.0.0",
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
         "camelcase": "^5.0.0",
         "html-tags": "^2.0.0",
         "svg-tags": "^1.0.0"
@@ -1509,13 +1680,13 @@
       }
     },
     "@vue/babel-sugar-v-on": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.0.0.tgz",
-      "integrity": "sha512-2aqJaDLKdSSGlxZU+GjFERaSNUaa6DQreV+V/K4W/6Lxj8520/r1lChWEa/zuAoPD2Vhy0D2QrqqO+I0D6CkKw==",
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz",
+      "integrity": "sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==",
       "dev": true,
       "requires": {
         "@babel/plugin-syntax-jsx": "^7.2.0",
-        "@vue/babel-plugin-transform-vue-jsx": "^1.0.0",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
         "camelcase": "^5.0.0"
       },
       "dependencies": {
@@ -1528,469 +1699,40 @@
       }
     },
     "@vue/cli-overlay": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.8.0.tgz",
-      "integrity": "sha512-4hY/+r9OwpMb7BPFnQGKftMC8CrfbV00REEFOij52+L4swQw+m879+5zX3Z0xHfPftw6JyaqJB0rmQ0ILI6Ovw==",
+      "version": "3.12.1",
+      "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.12.1.tgz",
+      "integrity": "sha512-Bym92EN+lj+cNRN2ozbYyH+V8DMXWGbCDUk+hiJ4EYDBZfBkZKvalk1/mOBFwyxiopnnbOEBAAhL/UuMQ1xARg==",
       "dev": true
     },
     "@vue/cli-plugin-babel": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-3.8.0.tgz",
-      "integrity": "sha512-VLWvpgDM+HN2FZu1x+r9pisombDTK1k+RPNPeslnwjGjrUXmKNAamXL1ZIsPwsj6k6PpWPN4jetBIMqcBzBu6Q==",
+      "version": "3.12.1",
+      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-3.12.1.tgz",
+      "integrity": "sha512-Zetvz8PikLCGomeKOKu8pC9YQ7cfxs7pGpvEOzaxGdhMnebhjAYR6i6dOB57A6N5lhxQksXCtYTv26QgfiIpdg==",
       "dev": true,
       "requires": {
         "@babel/core": "^7.0.0",
-        "@vue/babel-preset-app": "^3.8.0",
-        "@vue/cli-shared-utils": "^3.8.0",
+        "@vue/babel-preset-app": "^3.12.1",
+        "@vue/cli-shared-utils": "^3.12.1",
         "babel-loader": "^8.0.5",
-        "webpack": ">=4 < 4.29"
-      },
-      "dependencies": {
-        "@webassemblyjs/ast": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz",
-          "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/helper-module-context": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/wast-parser": "1.7.11"
-          }
-        },
-        "@webassemblyjs/floating-point-hex-parser": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz",
-          "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-api-error": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz",
-          "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-buffer": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz",
-          "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-code-frame": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz",
-          "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/wast-printer": "1.7.11"
-          }
-        },
-        "@webassemblyjs/helper-fsm": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz",
-          "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-module-context": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz",
-          "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-wasm-bytecode": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz",
-          "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-wasm-section": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz",
-          "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-buffer": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/wasm-gen": "1.7.11"
-          }
-        },
-        "@webassemblyjs/ieee754": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz",
-          "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==",
-          "dev": true,
-          "requires": {
-            "@xtuc/ieee754": "^1.2.0"
-          }
-        },
-        "@webassemblyjs/leb128": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz",
-          "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==",
-          "dev": true,
-          "requires": {
-            "@xtuc/long": "4.2.1"
-          }
-        },
-        "@webassemblyjs/utf8": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz",
-          "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==",
-          "dev": true
-        },
-        "@webassemblyjs/wasm-edit": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz",
-          "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-buffer": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/helper-wasm-section": "1.7.11",
-            "@webassemblyjs/wasm-gen": "1.7.11",
-            "@webassemblyjs/wasm-opt": "1.7.11",
-            "@webassemblyjs/wasm-parser": "1.7.11",
-            "@webassemblyjs/wast-printer": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wasm-gen": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz",
-          "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/ieee754": "1.7.11",
-            "@webassemblyjs/leb128": "1.7.11",
-            "@webassemblyjs/utf8": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wasm-opt": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz",
-          "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-buffer": "1.7.11",
-            "@webassemblyjs/wasm-gen": "1.7.11",
-            "@webassemblyjs/wasm-parser": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wasm-parser": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz",
-          "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-api-error": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/ieee754": "1.7.11",
-            "@webassemblyjs/leb128": "1.7.11",
-            "@webassemblyjs/utf8": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wast-parser": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz",
-          "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/floating-point-hex-parser": "1.7.11",
-            "@webassemblyjs/helper-api-error": "1.7.11",
-            "@webassemblyjs/helper-code-frame": "1.7.11",
-            "@webassemblyjs/helper-fsm": "1.7.11",
-            "@xtuc/long": "4.2.1"
-          }
-        },
-        "@webassemblyjs/wast-printer": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz",
-          "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/wast-parser": "1.7.11",
-            "@xtuc/long": "4.2.1"
-          }
-        },
-        "@xtuc/long": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz",
-          "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==",
-          "dev": true
-        },
-        "acorn": {
-          "version": "5.7.3",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
-          "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
-          "dev": true
-        },
-        "acorn-dynamic-import": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
-          "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
-          "dev": true,
-          "requires": {
-            "acorn": "^5.0.0"
-          }
-        },
-        "schema-utils": {
-          "version": "0.4.7",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
-          "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        },
-        "webpack": {
-          "version": "4.28.4",
-          "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.28.4.tgz",
-          "integrity": "sha512-NxjD61WsK/a3JIdwWjtIpimmvE6UrRi3yG54/74Hk9rwNj5FPkA4DJCf1z4ByDWLkvZhTZE+P3C/eh6UD5lDcw==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-module-context": "1.7.11",
-            "@webassemblyjs/wasm-edit": "1.7.11",
-            "@webassemblyjs/wasm-parser": "1.7.11",
-            "acorn": "^5.6.2",
-            "acorn-dynamic-import": "^3.0.0",
-            "ajv": "^6.1.0",
-            "ajv-keywords": "^3.1.0",
-            "chrome-trace-event": "^1.0.0",
-            "enhanced-resolve": "^4.1.0",
-            "eslint-scope": "^4.0.0",
-            "json-parse-better-errors": "^1.0.2",
-            "loader-runner": "^2.3.0",
-            "loader-utils": "^1.1.0",
-            "memory-fs": "~0.4.1",
-            "micromatch": "^3.1.8",
-            "mkdirp": "~0.5.0",
-            "neo-async": "^2.5.0",
-            "node-libs-browser": "^2.0.0",
-            "schema-utils": "^0.4.4",
-            "tapable": "^1.1.0",
-            "terser-webpack-plugin": "^1.1.0",
-            "watchpack": "^1.5.0",
-            "webpack-sources": "^1.3.0"
-          }
-        }
+        "webpack": "^4.0.0"
       }
     },
     "@vue/cli-plugin-eslint": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.8.0.tgz",
-      "integrity": "sha512-18LDJmjH0DDw9T4+RbrSVk4xkF8t8RDRsEPJLPurno1YVJodIkQ6lqVu82faVgtvPyCoqiaicoTq/iwi1avoLQ==",
+      "version": "3.12.1",
+      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.12.1.tgz",
+      "integrity": "sha512-tVTZlEZsy3sQbO4LLWFK11yzlWwqVAqaM+IY+BeWHITBzEJKh2KmouG+x6x/reXiU3qROsMJ4Ej3Hs8buSMWyQ==",
       "dev": true,
       "requires": {
-        "@vue/cli-shared-utils": "^3.8.0",
+        "@vue/cli-shared-utils": "^3.12.1",
         "babel-eslint": "^10.0.1",
         "eslint": "^4.19.1",
         "eslint-loader": "^2.1.2",
         "eslint-plugin-vue": "^4.7.1",
         "globby": "^9.2.0",
-        "webpack": ">=4 < 4.29"
+        "webpack": "^4.0.0",
+        "yorkie": "^2.0.0"
       },
       "dependencies": {
-        "@webassemblyjs/ast": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz",
-          "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/helper-module-context": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/wast-parser": "1.7.11"
-          }
-        },
-        "@webassemblyjs/floating-point-hex-parser": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz",
-          "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-api-error": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz",
-          "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-buffer": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz",
-          "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-code-frame": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz",
-          "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/wast-printer": "1.7.11"
-          }
-        },
-        "@webassemblyjs/helper-fsm": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz",
-          "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-module-context": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz",
-          "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-wasm-bytecode": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz",
-          "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-wasm-section": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz",
-          "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-buffer": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/wasm-gen": "1.7.11"
-          }
-        },
-        "@webassemblyjs/ieee754": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz",
-          "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==",
-          "dev": true,
-          "requires": {
-            "@xtuc/ieee754": "^1.2.0"
-          }
-        },
-        "@webassemblyjs/leb128": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz",
-          "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==",
-          "dev": true,
-          "requires": {
-            "@xtuc/long": "4.2.1"
-          }
-        },
-        "@webassemblyjs/utf8": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz",
-          "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==",
-          "dev": true
-        },
-        "@webassemblyjs/wasm-edit": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz",
-          "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-buffer": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/helper-wasm-section": "1.7.11",
-            "@webassemblyjs/wasm-gen": "1.7.11",
-            "@webassemblyjs/wasm-opt": "1.7.11",
-            "@webassemblyjs/wasm-parser": "1.7.11",
-            "@webassemblyjs/wast-printer": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wasm-gen": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz",
-          "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/ieee754": "1.7.11",
-            "@webassemblyjs/leb128": "1.7.11",
-            "@webassemblyjs/utf8": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wasm-opt": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz",
-          "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-buffer": "1.7.11",
-            "@webassemblyjs/wasm-gen": "1.7.11",
-            "@webassemblyjs/wasm-parser": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wasm-parser": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz",
-          "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-api-error": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/ieee754": "1.7.11",
-            "@webassemblyjs/leb128": "1.7.11",
-            "@webassemblyjs/utf8": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wast-parser": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz",
-          "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/floating-point-hex-parser": "1.7.11",
-            "@webassemblyjs/helper-api-error": "1.7.11",
-            "@webassemblyjs/helper-code-frame": "1.7.11",
-            "@webassemblyjs/helper-fsm": "1.7.11",
-            "@xtuc/long": "4.2.1"
-          }
-        },
-        "@webassemblyjs/wast-printer": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz",
-          "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/wast-parser": "1.7.11",
-            "@xtuc/long": "4.2.1"
-          }
-        },
-        "@xtuc/long": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz",
-          "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==",
-          "dev": true
-        },
-        "acorn": {
-          "version": "5.7.3",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
-          "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
-          "dev": true
-        },
-        "acorn-dynamic-import": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
-          "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
-          "dev": true,
-          "requires": {
-            "acorn": "^5.0.0"
-          }
-        },
         "ajv": {
           "version": "5.5.2",
           "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
@@ -2138,42 +1880,6 @@
             "yallist": "^2.1.2"
           }
         },
-        "schema-utils": {
-          "version": "0.4.7",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
-          "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-keywords": "^3.1.0"
-          },
-          "dependencies": {
-            "ajv": {
-              "version": "6.10.0",
-              "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
-              "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
-              "dev": true,
-              "requires": {
-                "fast-deep-equal": "^2.0.1",
-                "fast-json-stable-stringify": "^2.0.0",
-                "json-schema-traverse": "^0.4.1",
-                "uri-js": "^4.2.2"
-              }
-            },
-            "fast-deep-equal": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-              "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
-              "dev": true
-            },
-            "json-schema-traverse": {
-              "version": "0.4.1",
-              "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-              "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-              "dev": true
-            }
-          }
-        },
         "strip-ansi": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
@@ -2194,74 +1900,6 @@
             "has-flag": "^3.0.0"
           }
         },
-        "webpack": {
-          "version": "4.28.4",
-          "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.28.4.tgz",
-          "integrity": "sha512-NxjD61WsK/a3JIdwWjtIpimmvE6UrRi3yG54/74Hk9rwNj5FPkA4DJCf1z4ByDWLkvZhTZE+P3C/eh6UD5lDcw==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-module-context": "1.7.11",
-            "@webassemblyjs/wasm-edit": "1.7.11",
-            "@webassemblyjs/wasm-parser": "1.7.11",
-            "acorn": "^5.6.2",
-            "acorn-dynamic-import": "^3.0.0",
-            "ajv": "^6.1.0",
-            "ajv-keywords": "^3.1.0",
-            "chrome-trace-event": "^1.0.0",
-            "enhanced-resolve": "^4.1.0",
-            "eslint-scope": "^4.0.0",
-            "json-parse-better-errors": "^1.0.2",
-            "loader-runner": "^2.3.0",
-            "loader-utils": "^1.1.0",
-            "memory-fs": "~0.4.1",
-            "micromatch": "^3.1.8",
-            "mkdirp": "~0.5.0",
-            "neo-async": "^2.5.0",
-            "node-libs-browser": "^2.0.0",
-            "schema-utils": "^0.4.4",
-            "tapable": "^1.1.0",
-            "terser-webpack-plugin": "^1.1.0",
-            "watchpack": "^1.5.0",
-            "webpack-sources": "^1.3.0"
-          },
-          "dependencies": {
-            "ajv": {
-              "version": "6.10.0",
-              "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
-              "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
-              "dev": true,
-              "requires": {
-                "fast-deep-equal": "^2.0.1",
-                "fast-json-stable-stringify": "^2.0.0",
-                "json-schema-traverse": "^0.4.1",
-                "uri-js": "^4.2.2"
-              }
-            },
-            "eslint-scope": {
-              "version": "4.0.3",
-              "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
-              "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
-              "dev": true,
-              "requires": {
-                "esrecurse": "^4.1.0",
-                "estraverse": "^4.1.1"
-              }
-            },
-            "fast-deep-equal": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-              "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
-              "dev": true
-            },
-            "json-schema-traverse": {
-              "version": "0.4.1",
-              "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-              "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-              "dev": true
-            }
-          }
-        },
         "yallist": {
           "version": "2.1.2",
           "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
@@ -2272,12 +1910,12 @@
       }
     },
     "@vue/cli-plugin-unit-jest": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-3.8.0.tgz",
-      "integrity": "sha512-8kvoh6NZYY7FjuqRorqo47VTi62a3u69+oAxqBiIOkc28OGaju/FrL0Vm95vRB8tMkU6EPXKVRtCjPz8R2QeZA==",
+      "version": "3.12.1",
+      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-3.12.1.tgz",
+      "integrity": "sha512-Cc9Kq4+RaUN1yfNVb7c9hVDNXo2tFTWHgwooCL3XWMu2iL+pDawQt8ZeSqauDY95JoMeEAVy2xBimjL+7jo/jw==",
       "dev": true,
       "requires": {
-        "@vue/cli-shared-utils": "^3.8.0",
+        "@vue/cli-shared-utils": "^3.12.1",
         "babel-jest": "^23.6.0",
         "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
         "jest": "^23.6.0",
@@ -2288,16 +1926,16 @@
       }
     },
     "@vue/cli-service": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.8.0.tgz",
-      "integrity": "sha512-ipJF4RHjyLyLC4oLx+JM1Jk6tiIG0KjCFAqfOscQ44K4CdyS03oFMAUR+SZYy/UXKccMnoeY6Ld4YrGXSytQsg==",
+      "version": "3.12.1",
+      "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.12.1.tgz",
+      "integrity": "sha512-PDxNrTGnSKzeV1ruFlsRIAO8JcPizwT0EJXq9GeyooU+p+sOkv7aKkCBJQVYNjZapD1NOGWx6CvAAC/wAW+gew==",
       "dev": true,
       "requires": {
         "@intervolga/optimize-cssnano-plugin": "^1.0.5",
         "@soda/friendly-errors-webpack-plugin": "^1.7.1",
-        "@vue/cli-overlay": "^3.8.0",
-        "@vue/cli-shared-utils": "^3.8.0",
-        "@vue/component-compiler-utils": "^2.6.0",
+        "@vue/cli-overlay": "^3.12.1",
+        "@vue/cli-shared-utils": "^3.12.1",
+        "@vue/component-compiler-utils": "^3.0.0",
         "@vue/preload-webpack-plugin": "^1.1.0",
         "@vue/web-component-wrapper": "^1.2.0",
         "acorn": "^6.1.1",
@@ -2316,6 +1954,7 @@
         "cssnano": "^4.1.10",
         "current-script-polyfill": "^1.0.0",
         "debug": "^4.1.1",
+        "default-gateway": "^5.0.2",
         "dotenv": "^7.0.0",
         "dotenv-expand": "^5.1.0",
         "escape-string-regexp": "^1.0.5",
@@ -2325,10 +1964,10 @@
         "hash-sum": "^1.0.2",
         "html-webpack-plugin": "^3.2.0",
         "launch-editor-middleware": "^2.2.1",
-        "lodash.defaultsdeep": "^4.6.0",
+        "lodash.defaultsdeep": "^4.6.1",
         "lodash.mapvalues": "^4.6.0",
         "lodash.transform": "^4.6.0",
-        "mini-css-extract-plugin": "^0.6.0",
+        "mini-css-extract-plugin": "^0.8.0",
         "minimist": "^1.2.0",
         "ora": "^3.4.0",
         "portfinder": "^1.0.20",
@@ -2343,209 +1982,13 @@
         "thread-loader": "^2.1.2",
         "url-loader": "^1.1.2",
         "vue-loader": "^15.7.0",
-        "webpack": ">=4 < 4.29",
+        "webpack": "^4.0.0",
         "webpack-bundle-analyzer": "^3.3.0",
         "webpack-chain": "^4.11.0",
         "webpack-dev-server": "^3.4.1",
-        "webpack-merge": "^4.2.1",
-        "yorkie": "^2.0.0"
+        "webpack-merge": "^4.2.1"
       },
       "dependencies": {
-        "@webassemblyjs/ast": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz",
-          "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/helper-module-context": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/wast-parser": "1.7.11"
-          }
-        },
-        "@webassemblyjs/floating-point-hex-parser": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz",
-          "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-api-error": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz",
-          "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-buffer": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz",
-          "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-code-frame": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz",
-          "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/wast-printer": "1.7.11"
-          }
-        },
-        "@webassemblyjs/helper-fsm": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz",
-          "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-module-context": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz",
-          "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-wasm-bytecode": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz",
-          "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-wasm-section": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz",
-          "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-buffer": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/wasm-gen": "1.7.11"
-          }
-        },
-        "@webassemblyjs/ieee754": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz",
-          "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==",
-          "dev": true,
-          "requires": {
-            "@xtuc/ieee754": "^1.2.0"
-          }
-        },
-        "@webassemblyjs/leb128": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz",
-          "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==",
-          "dev": true,
-          "requires": {
-            "@xtuc/long": "4.2.1"
-          }
-        },
-        "@webassemblyjs/utf8": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz",
-          "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==",
-          "dev": true
-        },
-        "@webassemblyjs/wasm-edit": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz",
-          "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-buffer": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/helper-wasm-section": "1.7.11",
-            "@webassemblyjs/wasm-gen": "1.7.11",
-            "@webassemblyjs/wasm-opt": "1.7.11",
-            "@webassemblyjs/wasm-parser": "1.7.11",
-            "@webassemblyjs/wast-printer": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wasm-gen": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz",
-          "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/ieee754": "1.7.11",
-            "@webassemblyjs/leb128": "1.7.11",
-            "@webassemblyjs/utf8": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wasm-opt": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz",
-          "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-buffer": "1.7.11",
-            "@webassemblyjs/wasm-gen": "1.7.11",
-            "@webassemblyjs/wasm-parser": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wasm-parser": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz",
-          "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-api-error": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/ieee754": "1.7.11",
-            "@webassemblyjs/leb128": "1.7.11",
-            "@webassemblyjs/utf8": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wast-parser": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz",
-          "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/floating-point-hex-parser": "1.7.11",
-            "@webassemblyjs/helper-api-error": "1.7.11",
-            "@webassemblyjs/helper-code-frame": "1.7.11",
-            "@webassemblyjs/helper-fsm": "1.7.11",
-            "@xtuc/long": "4.2.1"
-          }
-        },
-        "@webassemblyjs/wast-printer": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz",
-          "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/wast-parser": "1.7.11",
-            "@xtuc/long": "4.2.1"
-          }
-        },
-        "@xtuc/long": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz",
-          "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==",
-          "dev": true
-        },
-        "acorn-dynamic-import": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
-          "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
-          "dev": true,
-          "requires": {
-            "acorn": "^5.0.0"
-          },
-          "dependencies": {
-            "acorn": {
-              "version": "5.7.3",
-              "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
-              "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
-              "dev": true
-            }
-          }
-        },
         "ansi-regex": {
           "version": "4.1.0",
           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
@@ -2584,50 +2027,54 @@
           }
         },
         "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+          "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
           "dev": true,
           "requires": {
-            "ms": "^2.1.1"
+            "ms": "2.1.2"
           }
         },
-        "parse-json": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
-          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+          "dev": true
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
+        },
+        "parse-json": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz",
+          "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==",
           "dev": true,
           "requires": {
+            "@babel/code-frame": "^7.0.0",
             "error-ex": "^1.3.1",
-            "json-parse-better-errors": "^1.0.1"
+            "json-parse-even-better-errors": "^2.3.0",
+            "lines-and-columns": "^1.1.6"
           }
         },
         "read-pkg": {
-          "version": "5.1.1",
-          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.1.1.tgz",
-          "integrity": "sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==",
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+          "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
           "dev": true,
           "requires": {
             "@types/normalize-package-data": "^2.4.0",
             "normalize-package-data": "^2.5.0",
-            "parse-json": "^4.0.0",
-            "type-fest": "^0.4.1"
-          }
-        },
-        "schema-utils": {
-          "version": "0.4.7",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
-          "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-keywords": "^3.1.0"
+            "parse-json": "^5.0.0",
+            "type-fest": "^0.6.0"
           }
         },
         "semver": {
-          "version": "6.1.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz",
-          "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==",
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
           "dev": true
         },
         "string-width": {
@@ -2659,46 +2106,6 @@
             "has-flag": "^3.0.0"
           }
         },
-        "webpack": {
-          "version": "4.28.4",
-          "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.28.4.tgz",
-          "integrity": "sha512-NxjD61WsK/a3JIdwWjtIpimmvE6UrRi3yG54/74Hk9rwNj5FPkA4DJCf1z4ByDWLkvZhTZE+P3C/eh6UD5lDcw==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-module-context": "1.7.11",
-            "@webassemblyjs/wasm-edit": "1.7.11",
-            "@webassemblyjs/wasm-parser": "1.7.11",
-            "acorn": "^5.6.2",
-            "acorn-dynamic-import": "^3.0.0",
-            "ajv": "^6.1.0",
-            "ajv-keywords": "^3.1.0",
-            "chrome-trace-event": "^1.0.0",
-            "enhanced-resolve": "^4.1.0",
-            "eslint-scope": "^4.0.0",
-            "json-parse-better-errors": "^1.0.2",
-            "loader-runner": "^2.3.0",
-            "loader-utils": "^1.1.0",
-            "memory-fs": "~0.4.1",
-            "micromatch": "^3.1.8",
-            "mkdirp": "~0.5.0",
-            "neo-async": "^2.5.0",
-            "node-libs-browser": "^2.0.0",
-            "schema-utils": "^0.4.4",
-            "tapable": "^1.1.0",
-            "terser-webpack-plugin": "^1.1.0",
-            "watchpack": "^1.5.0",
-            "webpack-sources": "^1.3.0"
-          },
-          "dependencies": {
-            "acorn": {
-              "version": "5.7.3",
-              "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
-              "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
-              "dev": true
-            }
-          }
-        },
         "wrap-ansi": {
           "version": "5.1.0",
           "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
@@ -2713,9 +2120,9 @@
       }
     },
     "@vue/cli-shared-utils": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.8.0.tgz",
-      "integrity": "sha512-wn1L8pmQnotfftHOYm0VeXs2+cQTySd73uhWXwyO6pT0ehjqlY5c2RTipClmFF3Q+YCYjwlNpsV650F3l1tV8w==",
+      "version": "3.12.1",
+      "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.12.1.tgz",
+      "integrity": "sha512-jFblzRFjutGwu5utOKdVlPlsbA1lBUNNQlAThzNqej+JtTKJjnvjlhjKX0Gq0oOny5FjKWhoyfQ74p9h1qE6JQ==",
       "dev": true,
       "requires": {
         "@hapi/joi": "^15.0.1",
@@ -2753,9 +2160,9 @@
           }
         },
         "semver": {
-          "version": "6.1.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz",
-          "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==",
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
           "dev": true
         },
         "supports-color": {
@@ -2770,9 +2177,9 @@
       }
     },
     "@vue/component-compiler-utils": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz",
-      "integrity": "sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz",
+      "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==",
       "dev": true,
       "requires": {
         "consolidate": "^0.15.1",
@@ -2780,8 +2187,8 @@
         "lru-cache": "^4.1.2",
         "merge-source-map": "^1.1.0",
         "postcss": "^7.0.14",
-        "postcss-selector-parser": "^5.0.0",
-        "prettier": "1.16.3",
+        "postcss-selector-parser": "^6.0.2",
+        "prettier": "^1.18.2",
         "source-map": "~0.6.1",
         "vue-template-es2015-compiler": "^1.9.0"
       },
@@ -2828,9 +2235,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -2863,8 +2270,8 @@
     },
     "@vue/eslint-config-standard": {
       "version": "4.0.0",
-      "resolved": "http://registry.npm.taobao.org/@vue/eslint-config-standard/download/@vue/eslint-config-standard-4.0.0.tgz",
-      "integrity": "sha1-a+RH7mdOOw9zPFhAmP2aIubXb80=",
+      "resolved": "https://registry.npmjs.org/@vue/eslint-config-standard/-/eslint-config-standard-4.0.0.tgz",
+      "integrity": "sha512-bQghq1cw1BuMRHNhr3tRpAJx1tpGy0QtajQX873kLtA9YVuOIoXR7nAWnTN09bBHnSUh2N288vMsqPi2fI4Hzg==",
       "dev": true,
       "requires": {
         "eslint-config-standard": "^12.0.0",
@@ -2875,19 +2282,20 @@
       }
     },
     "@vue/preload-webpack-plugin": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.0.tgz",
-      "integrity": "sha512-rcn2KhSHESBFMPj5vc5X2pI9bcBNQQixvJXhD5gZ4rN2iym/uH2qfDSQfUS5+qwiz0a85TCkeUs6w6jxFDudbw==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz",
+      "integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==",
       "dev": true
     },
     "@vue/test-utils": {
-      "version": "1.0.0-beta.29",
-      "resolved": "http://registry.npm.taobao.org/@vue/test-utils/download/@vue/test-utils-1.0.0-beta.29.tgz",
-      "integrity": "sha1-yULPJeiRzwgbagMzK0rh70MHJvA=",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-1.1.1.tgz",
+      "integrity": "sha512-/32538ilZ9qSiu1gui7zfBn+IFy+zoTaQTZ1qiLfQXzZtaeAD23kJMrnqaoe2w8JzJoXuqHUl2ruuStG8rwFYQ==",
       "dev": true,
       "requires": {
         "dom-event-types": "^1.0.0",
-        "lodash": "^4.17.4"
+        "lodash": "^4.17.15",
+        "pretty": "^2.0.0"
       }
     },
     "@vue/web-component-wrapper": {
@@ -2897,177 +2305,176 @@
       "dev": true
     },
     "@webassemblyjs/ast": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.8.5.tgz",
-      "integrity": "sha1-UbHF/mV2o0lTv0slPfnw1JDZ41k=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+      "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
       "requires": {
-        "@webassemblyjs/helper-module-context": "1.8.5",
-        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
-        "@webassemblyjs/wast-parser": "1.8.5"
+        "@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.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.8.5.tgz",
-      "integrity": "sha1-G6kmopI2E+3OSW/VsC6M6KX0lyE="
+      "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=="
     },
     "@webassemblyjs/helper-api-error": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.8.5.tgz",
-      "integrity": "sha1-xJ2tIvZFInxe22EL25aX8aq3Ifc="
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
+      "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw=="
     },
     "@webassemblyjs/helper-buffer": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.8.5.tgz",
-      "integrity": "sha1-/qk+Qphj3V5DOFVfQikjhaZT8gQ="
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
+      "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA=="
     },
     "@webassemblyjs/helper-code-frame": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.8.5.tgz",
-      "integrity": "sha1-mnQP9I4/qjAisd/1RCPfmqKTwl4=",
+      "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==",
       "requires": {
-        "@webassemblyjs/wast-printer": "1.8.5"
+        "@webassemblyjs/wast-printer": "1.9.0"
       }
     },
     "@webassemblyjs/helper-fsm": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.8.5.tgz",
-      "integrity": "sha1-ugt9Oz9+RzPaYFnJMyJ12GBwJFI="
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
+      "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw=="
     },
     "@webassemblyjs/helper-module-context": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.8.5.tgz",
-      "integrity": "sha1-3vS5knsBAdyMu9jR7bW3ucguskU=",
+      "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==",
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "mamacro": "^0.0.3"
+        "@webassemblyjs/ast": "1.9.0"
       }
     },
     "@webassemblyjs/helper-wasm-bytecode": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.8.5.tgz",
-      "integrity": "sha1-U3p1Dt31weky83RCBlUckcG5PmE="
+      "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=="
     },
     "@webassemblyjs/helper-wasm-section": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.8.5.tgz",
-      "integrity": "sha1-dMpqa8vhnlCjtrRihH5pUD5r/L8=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
+      "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/helper-buffer": "1.8.5",
-        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
-        "@webassemblyjs/wasm-gen": "1.8.5"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0"
       }
     },
     "@webassemblyjs/ieee754": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.8.5.tgz",
-      "integrity": "sha1-cSMp2+8kDza/V70ve4+5v0FUQh4=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
+      "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
       "requires": {
         "@xtuc/ieee754": "^1.2.0"
       }
     },
     "@webassemblyjs/leb128": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.8.5.tgz",
-      "integrity": "sha1-BE7es06mefPgTNT9mCTV41dnrhA=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
+      "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
       "requires": {
         "@xtuc/long": "4.2.2"
       }
     },
     "@webassemblyjs/utf8": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.8.5.tgz",
-      "integrity": "sha1-qL87XY/+mGx8Hjc8y9wqCRXwztw="
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
+      "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w=="
     },
     "@webassemblyjs/wasm-edit": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.8.5.tgz",
-      "integrity": "sha1-li2hKqWswcExyBxCMpkcgs5W4Bo=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
+      "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/helper-buffer": "1.8.5",
-        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
-        "@webassemblyjs/helper-wasm-section": "1.8.5",
-        "@webassemblyjs/wasm-gen": "1.8.5",
-        "@webassemblyjs/wasm-opt": "1.8.5",
-        "@webassemblyjs/wasm-parser": "1.8.5",
-        "@webassemblyjs/wast-printer": "1.8.5"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/helper-wasm-section": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0",
+        "@webassemblyjs/wasm-opt": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0",
+        "@webassemblyjs/wast-printer": "1.9.0"
       }
     },
     "@webassemblyjs/wasm-gen": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.8.5.tgz",
-      "integrity": "sha1-VIQHZsLBAC62TtGr5yCt7XFPmLw=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
+      "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
-        "@webassemblyjs/ieee754": "1.8.5",
-        "@webassemblyjs/leb128": "1.8.5",
-        "@webassemblyjs/utf8": "1.8.5"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/ieee754": "1.9.0",
+        "@webassemblyjs/leb128": "1.9.0",
+        "@webassemblyjs/utf8": "1.9.0"
       }
     },
     "@webassemblyjs/wasm-opt": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.8.5.tgz",
-      "integrity": "sha1-sk2fa6UDlK8TSfUQr6j/y4pj0mQ=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
+      "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/helper-buffer": "1.8.5",
-        "@webassemblyjs/wasm-gen": "1.8.5",
-        "@webassemblyjs/wasm-parser": "1.8.5"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0"
       }
     },
     "@webassemblyjs/wasm-parser": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.8.5.tgz",
-      "integrity": "sha1-IVdvDsiLkUJzV7hTY4NmjvfGa40=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
+      "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/helper-api-error": "1.8.5",
-        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
-        "@webassemblyjs/ieee754": "1.8.5",
-        "@webassemblyjs/leb128": "1.8.5",
-        "@webassemblyjs/utf8": "1.8.5"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-api-error": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/ieee754": "1.9.0",
+        "@webassemblyjs/leb128": "1.9.0",
+        "@webassemblyjs/utf8": "1.9.0"
       }
     },
     "@webassemblyjs/wast-parser": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.8.5.tgz",
-      "integrity": "sha1-4Q7s1ULQ5705T2gnxJ899tTu+4w=",
-      "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/floating-point-hex-parser": "1.8.5",
-        "@webassemblyjs/helper-api-error": "1.8.5",
-        "@webassemblyjs/helper-code-frame": "1.8.5",
-        "@webassemblyjs/helper-fsm": "1.8.5",
+      "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==",
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/floating-point-hex-parser": "1.9.0",
+        "@webassemblyjs/helper-api-error": "1.9.0",
+        "@webassemblyjs/helper-code-frame": "1.9.0",
+        "@webassemblyjs/helper-fsm": "1.9.0",
         "@xtuc/long": "4.2.2"
       }
     },
     "@webassemblyjs/wast-printer": {
-      "version": "1.8.5",
-      "resolved": "http://registry.npm.taobao.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.8.5.tgz",
-      "integrity": "sha1-EUu8SB/RDKDiOzVg+oEnSLC65bw=",
+      "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==",
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/wast-parser": "1.8.5",
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/wast-parser": "1.9.0",
         "@xtuc/long": "4.2.2"
       }
     },
     "@xtuc/ieee754": {
       "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz",
-      "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A="
+      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
     },
     "@xtuc/long": {
       "version": "4.2.2",
-      "resolved": "http://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.2.tgz",
-      "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0="
+      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
     },
     "abab": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
-      "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==",
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
+      "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
       "dev": true
     },
     "abbrev": {
@@ -3078,7 +2485,7 @@
     },
     "abs-svg-path": {
       "version": "0.1.1",
-      "resolved": "http://registry.npm.taobao.org/abs-svg-path/download/abs-svg-path-0.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz",
       "integrity": "sha1-32Acjo0roQ1KdtYl4japo5wnI78="
     },
     "accepts": {
@@ -3092,19 +2499,14 @@
       }
     },
     "acorn": {
-      "version": "6.1.1",
-      "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-6.1.1.tgz",
-      "integrity": "sha1-fSWuBbuK0fm2mRCOEJTs14hK3B8="
-    },
-    "acorn-dynamic-import": {
-      "version": "4.0.0",
-      "resolved": "http://registry.npm.taobao.org/acorn-dynamic-import/download/acorn-dynamic-import-4.0.0.tgz",
-      "integrity": "sha1-SCIQFAWCo2uDw+NC4c/ryqkkCUg="
+      "version": "6.4.2",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
+      "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ=="
     },
     "acorn-globals": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz",
-      "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==",
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
+      "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
       "dev": true,
       "requires": {
         "acorn": "^6.0.1",
@@ -3131,9 +2533,9 @@
       }
     },
     "acorn-walk": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz",
-      "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==",
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
+      "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
       "dev": true
     },
     "add-dom-event-listener": {
@@ -3145,17 +2547,17 @@
       }
     },
     "address": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/address/-/address-1.1.0.tgz",
-      "integrity": "sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz",
+      "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==",
       "dev": true
     },
     "ajv": {
-      "version": "6.10.0",
-      "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-6.10.0.tgz",
-      "integrity": "sha1-kNDVRDnaWHzX6EO/twRfUL0ivfE=",
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "requires": {
-        "fast-deep-equal": "^2.0.1",
+        "fast-deep-equal": "^3.1.1",
         "fast-json-stable-stringify": "^2.0.0",
         "json-schema-traverse": "^0.4.1",
         "uri-js": "^4.2.2"
@@ -3163,17 +2565,17 @@
     },
     "ajv-errors": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz",
-      "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0="
+      "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+      "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
     },
     "ajv-keywords": {
-      "version": "3.4.0",
-      "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.4.0.tgz",
-      "integrity": "sha1-S4Mee1MUFafMUYzUBOc/YZPGNJ0="
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+      "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
     },
     "align-text": {
       "version": "0.1.4",
-      "resolved": "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz",
+      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
       "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
       "requires": {
         "kind-of": "^3.0.2",
@@ -3189,7 +2591,7 @@
     },
     "amdefine": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
       "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
     },
     "ansi-colors": {
@@ -3200,8 +2602,8 @@
     },
     "ansi-escapes": {
       "version": "3.2.0",
-      "resolved": "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.2.0.tgz",
-      "integrity": "sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s=",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+      "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
       "dev": true
     },
     "ansi-html": {
@@ -3212,32 +2614,24 @@
     },
     "ansi-regex": {
       "version": "2.1.1",
-      "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
       "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
     },
     "ansi-styles": {
       "version": "2.2.1",
-      "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
       "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
     },
-    "ant-design-palettes": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/ant-design-palettes/-/ant-design-palettes-1.1.3.tgz",
-      "integrity": "sha512-UpkkTp8egEN21KZNvY7sTcabLlkHvLvS71EVPk4CYi77Z9AaGGCaVn7i72tbOgWDrQp2wjIg8WgMbKBdK7GtWA==",
-      "requires": {
-        "tinycolor2": "^1.4.1"
-      }
-    },
     "ant-design-vue": {
-      "version": "1.3.9",
-      "resolved": "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-1.3.9.tgz",
-      "integrity": "sha512-Zw/5+4FyJI9PeOGW2uJ21/aaHAsyhAL+umNR2qHkKeTrmP2OJ6FXm00VNFTKeDdzSqAw8weiPfYT/0wJt1rqWw==",
+      "version": "1.3.17",
+      "resolved": "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-1.3.17.tgz",
+      "integrity": "sha512-Yb19yCXmO/+lcJvZaiQs/J87xXZuweDEZkuKGACiW4UhcR8gP1d3q6wZGOekhys4ryqJvvuVZBQdbuxpH0btAw==",
       "requires": {
-        "@ant-design/icons": "^1.1.15",
-        "@ant-design/icons-vue": "^1.0.1",
+        "@ant-design/icons": "^2.1.1",
+        "@ant-design/icons-vue": "^2.0.0",
         "add-dom-event-listener": "^1.0.2",
         "array-tree-filter": "^2.1.0",
-        "async-validator": "^1.8.2",
+        "async-validator": "^3.0.3",
         "babel-helper-vue-jsx-merge-props": "^2.0.3",
         "babel-runtime": "6.x",
         "classnames": "^2.2.5",
@@ -3253,6 +2647,7 @@
         "lodash": "^4.17.5",
         "moment": "^2.21.0",
         "mutationobserver-shim": "^0.3.2",
+        "node-emoji": "^1.10.0",
         "omit.js": "^1.0.0",
         "raf": "^3.4.0",
         "resize-observer-polyfill": "^1.5.1",
@@ -3269,22 +2664,13 @@
       "dev": true
     },
     "anymatch": {
-      "version": "2.0.0",
-      "resolved": "http://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz",
-      "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+      "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+      "optional": true,
       "requires": {
-        "micromatch": "^3.1.4",
-        "normalize-path": "^2.1.1"
-      },
-      "dependencies": {
-        "normalize-path": {
-          "version": "2.1.1",
-          "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
-          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-          "requires": {
-            "remove-trailing-separator": "^1.0.1"
-          }
-        }
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
       }
     },
     "append-transform": {
@@ -3298,19 +2684,19 @@
     },
     "aproba": {
       "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz",
-      "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo="
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
     },
     "arch": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz",
-      "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+      "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
       "dev": true
     },
     "argparse": {
       "version": "1.0.10",
-      "resolved": "http://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz",
-      "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
       "dev": true,
       "requires": {
         "sprintf-js": "~1.0.2"
@@ -3318,17 +2704,17 @@
     },
     "arr-diff": {
       "version": "4.0.0",
-      "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
       "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
     },
     "arr-flatten": {
       "version": "1.1.0",
-      "resolved": "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz",
-      "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE="
+      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
     },
     "arr-union": {
       "version": "3.1.0",
-      "resolved": "http://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
       "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
     },
     "array-equal": {
@@ -3337,12 +2723,6 @@
       "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
       "dev": true
     },
-    "array-filter": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
-      "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
-      "dev": true
-    },
     "array-flatten": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
@@ -3350,27 +2730,55 @@
       "dev": true
     },
     "array-includes": {
-      "version": "3.0.3",
-      "resolved": "http://registry.npm.taobao.org/array-includes/download/array-includes-3.0.3.tgz",
-      "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz",
+      "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==",
       "dev": true,
       "requires": {
-        "define-properties": "^1.1.2",
-        "es-abstract": "^1.7.0"
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.18.0-next.1",
+        "get-intrinsic": "^1.0.1",
+        "is-string": "^1.0.5"
+      },
+      "dependencies": {
+        "es-abstract": {
+          "version": "1.18.0-next.1",
+          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+          "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+          "dev": true,
+          "requires": {
+            "es-to-primitive": "^1.2.1",
+            "function-bind": "^1.1.1",
+            "has": "^1.0.3",
+            "has-symbols": "^1.0.1",
+            "is-callable": "^1.2.2",
+            "is-negative-zero": "^2.0.0",
+            "is-regex": "^1.1.1",
+            "object-inspect": "^1.8.0",
+            "object-keys": "^1.1.1",
+            "object.assign": "^4.1.1",
+            "string.prototype.trimend": "^1.0.1",
+            "string.prototype.trimstart": "^1.0.1"
+          }
+        },
+        "is-regex": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+          "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+          "dev": true,
+          "requires": {
+            "has-symbols": "^1.0.1"
+          }
+        },
+        "object-inspect": {
+          "version": "1.8.0",
+          "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+          "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
+          "dev": true
+        }
       }
     },
-    "array-map": {
-      "version": "0.0.0",
-      "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
-      "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
-      "dev": true
-    },
-    "array-reduce": {
-      "version": "0.0.0",
-      "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
-      "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
-      "dev": true
-    },
     "array-tree-filter": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz",
@@ -3393,57 +2801,107 @@
     },
     "array-unique": {
       "version": "0.3.2",
-      "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
       "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
     },
+    "array.prototype.flat": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz",
+      "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.18.0-next.1"
+      },
+      "dependencies": {
+        "es-abstract": {
+          "version": "1.18.0-next.1",
+          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+          "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+          "dev": true,
+          "requires": {
+            "es-to-primitive": "^1.2.1",
+            "function-bind": "^1.1.1",
+            "has": "^1.0.3",
+            "has-symbols": "^1.0.1",
+            "is-callable": "^1.2.2",
+            "is-negative-zero": "^2.0.0",
+            "is-regex": "^1.1.1",
+            "object-inspect": "^1.8.0",
+            "object-keys": "^1.1.1",
+            "object.assign": "^4.1.1",
+            "string.prototype.trimend": "^1.0.1",
+            "string.prototype.trimstart": "^1.0.1"
+          }
+        },
+        "is-regex": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+          "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+          "dev": true,
+          "requires": {
+            "has-symbols": "^1.0.1"
+          }
+        },
+        "object-inspect": {
+          "version": "1.8.0",
+          "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+          "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
+          "dev": true
+        }
+      }
+    },
     "arrify": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
       "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
       "dev": true
     },
-    "asap": {
-      "version": "2.0.6",
-      "resolved": "http://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz",
-      "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
-      "dev": true,
-      "optional": true
-    },
     "asn1": {
       "version": "0.2.4",
-      "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz",
-      "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
       "dev": true,
       "requires": {
         "safer-buffer": "~2.1.0"
       }
     },
     "asn1.js": {
-      "version": "4.10.1",
-      "resolved": "http://registry.npm.taobao.org/asn1.js/download/asn1.js-4.10.1.tgz",
-      "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=",
+      "version": "5.4.1",
+      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
+      "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
       "requires": {
         "bn.js": "^4.0.0",
         "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0"
+        "minimalistic-assert": "^1.0.0",
+        "safer-buffer": "^2.1.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+        }
       }
     },
     "assert": {
-      "version": "1.4.1",
-      "resolved": "http://registry.npm.taobao.org/assert/download/assert-1.4.1.tgz",
-      "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+      "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
       "requires": {
+        "object-assign": "^4.1.1",
         "util": "0.10.3"
       },
       "dependencies": {
         "inherits": {
           "version": "2.0.1",
-          "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
           "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
         },
         "util": {
           "version": "0.10.3",
-          "resolved": "http://registry.npm.taobao.org/util/download/util-0.10.3.tgz",
+          "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
           "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
           "requires": {
             "inherits": "2.0.1"
@@ -3453,72 +2911,70 @@
     },
     "assert-plus": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
       "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
       "dev": true
     },
     "assign-symbols": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
       "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
     },
     "astral-regex": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz",
-      "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=",
+      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+      "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
       "dev": true
     },
     "async": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
-      "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+      "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
       "dev": true,
       "requires": {
-        "lodash": "^4.17.11"
+        "lodash": "^4.17.14"
       }
     },
     "async-each": {
       "version": "1.0.3",
-      "resolved": "http://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz",
-      "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8="
+      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+      "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="
     },
     "async-limiter": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
-      "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+      "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
       "dev": true
     },
     "async-validator": {
-      "version": "1.11.2",
-      "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.11.2.tgz",
-      "integrity": "sha512-KVbL4jU6ZRJA82D69oOCoyKqr99emuKNvG0axH3XpGZh0xy1wDHpdH4cGzvwJ9nXAM0j7k/waBId16CQVI8dlw==",
-      "requires": {
-        "babel-runtime": "6.x"
-      }
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-3.5.1.tgz",
+      "integrity": "sha512-DDmKA7sdSAJtTVeNZHrnr2yojfFaoeW8MfQN8CeuXg8DDQHTqKk9Fdv38dSvnesHoO8MUwMI2HphOeSyIF+wmQ=="
     },
     "asynckit": {
       "version": "0.4.0",
-      "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
       "dev": true
     },
     "atob": {
       "version": "2.1.2",
-      "resolved": "http://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz",
-      "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k="
+      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
     },
     "autoprefixer": {
-      "version": "9.5.1",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.1.tgz",
-      "integrity": "sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==",
+      "version": "9.8.6",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz",
+      "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==",
       "dev": true,
       "requires": {
-        "browserslist": "^4.5.4",
-        "caniuse-lite": "^1.0.30000957",
+        "browserslist": "^4.12.0",
+        "caniuse-lite": "^1.0.30001109",
+        "colorette": "^1.2.1",
         "normalize-range": "^0.1.2",
         "num2fraction": "^1.2.2",
-        "postcss": "^7.0.14",
-        "postcss-value-parser": "^3.3.1"
+        "postcss": "^7.0.32",
+        "postcss-value-parser": "^4.1.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -3553,9 +3009,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -3563,6 +3019,12 @@
             "supports-color": "^6.1.0"
           }
         },
+        "postcss-value-parser": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+          "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
+          "dev": true
+        },
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -3582,35 +3044,27 @@
     },
     "aws-sign2": {
       "version": "0.7.0",
-      "resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz",
+      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
       "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
       "dev": true
     },
     "aws4": {
-      "version": "1.8.0",
-      "resolved": "http://registry.npm.taobao.org/aws4/download/aws4-1.8.0.tgz",
-      "integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=",
+      "version": "1.11.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
+      "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
       "dev": true
     },
     "axios": {
-      "version": "0.19.0",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz",
-      "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==",
+      "version": "0.19.2",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
+      "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
       "requires": {
-        "follow-redirects": "1.5.10",
-        "is-buffer": "^2.0.2"
-      },
-      "dependencies": {
-        "is-buffer": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
-          "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw=="
-        }
+        "follow-redirects": "1.5.10"
       }
     },
     "babel-code-frame": {
       "version": "6.26.0",
-      "resolved": "http://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
       "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
       "requires": {
         "chalk": "^1.1.3",
@@ -3620,47 +3074,35 @@
       "dependencies": {
         "js-tokens": {
           "version": "3.0.2",
-          "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz",
+          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
           "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
         }
       }
     },
     "babel-core": {
       "version": "7.0.0-bridge.0",
-      "resolved": "http://registry.npm.taobao.org/babel-core/download/babel-core-7.0.0-bridge.0.tgz",
-      "integrity": "sha1-laSS3dkPm06aSh2hTrM1uHtjTs4=",
+      "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
+      "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
       "dev": true
     },
     "babel-eslint": {
-      "version": "10.0.1",
-      "resolved": "http://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.0.1.tgz",
-      "integrity": "sha1-kZaB3AmWFM19MdRciQhpUJKh+u0=",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
+      "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
-        "@babel/parser": "^7.0.0",
-        "@babel/traverse": "^7.0.0",
-        "@babel/types": "^7.0.0",
-        "eslint-scope": "3.7.1",
-        "eslint-visitor-keys": "^1.0.0"
-      },
-      "dependencies": {
-        "eslint-scope": {
-          "version": "3.7.1",
-          "resolved": "http://registry.npm.taobao.org/eslint-scope/download/eslint-scope-3.7.1.tgz",
-          "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
-          "dev": true,
-          "requires": {
-            "esrecurse": "^4.1.0",
-            "estraverse": "^4.1.1"
-          }
-        }
+        "@babel/parser": "^7.7.0",
+        "@babel/traverse": "^7.7.0",
+        "@babel/types": "^7.7.0",
+        "eslint-visitor-keys": "^1.0.0",
+        "resolve": "^1.12.0"
       }
     },
     "babel-generator": {
       "version": "6.26.1",
-      "resolved": "http://registry.npm.taobao.org/babel-generator/download/babel-generator-6.26.1.tgz",
-      "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=",
+      "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+      "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
       "dev": true,
       "requires": {
         "babel-messages": "^6.23.0",
@@ -3675,13 +3117,13 @@
       "dependencies": {
         "jsesc": {
           "version": "1.3.0",
-          "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-1.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
           "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
           "dev": true
         },
         "source-map": {
           "version": "0.5.7",
-          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
           "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
           "dev": true
         }
@@ -3704,8 +3146,8 @@
     },
     "babel-jest": {
       "version": "23.6.0",
-      "resolved": "http://registry.npm.taobao.org/babel-jest/download/babel-jest-23.6.0.tgz",
-      "integrity": "sha1-pkQjI2ZVeiJAoMCD2msleGGFovE=",
+      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.6.0.tgz",
+      "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==",
       "dev": true,
       "requires": {
         "babel-plugin-istanbul": "^4.1.6",
@@ -3713,19 +3155,19 @@
       }
     },
     "babel-loader": {
-      "version": "8.0.5",
-      "resolved": "http://registry.npm.taobao.org/babel-loader/download/babel-loader-8.0.5.tgz",
-      "integrity": "sha1-IlMi11CcIVdlWEC7pS5GtsLy/jM=",
+      "version": "8.2.2",
+      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz",
+      "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==",
       "requires": {
-        "find-cache-dir": "^2.0.0",
-        "loader-utils": "^1.0.2",
-        "mkdirp": "^0.5.1",
-        "util.promisify": "^1.0.0"
+        "find-cache-dir": "^3.3.1",
+        "loader-utils": "^1.4.0",
+        "make-dir": "^3.1.0",
+        "schema-utils": "^2.6.5"
       }
     },
     "babel-messages": {
       "version": "6.23.0",
-      "resolved": "http://registry.npm.taobao.org/babel-messages/download/babel-messages-6.23.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
       "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
       "dev": true,
       "requires": {
@@ -3733,18 +3175,17 @@
       }
     },
     "babel-plugin-dynamic-import-node": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz",
-      "integrity": "sha512-fP899ELUnTaBcIzmrW7nniyqqdYWrWuJUyPWHxFa/c7r7hS6KC8FscNfLlBNIoPSc55kYMGEEKjPjJGCLbE1qA==",
-      "dev": true,
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
+      "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
       "requires": {
         "object.assign": "^4.1.0"
       }
     },
     "babel-plugin-import": {
-      "version": "1.11.0",
-      "resolved": "http://registry.npm.taobao.org/babel-plugin-import/download/babel-plugin-import-1.11.0.tgz",
-      "integrity": "sha1-eKyQjmsiUga6u3NOGerl941tEDU=",
+      "version": "1.13.3",
+      "resolved": "https://registry.npmjs.org/babel-plugin-import/-/babel-plugin-import-1.13.3.tgz",
+      "integrity": "sha512-1qCWdljJOrDRH/ybaCZuDgySii4yYrtQ8OJQwrcDqdt0y67N30ng3X3nABg6j7gR7qUJgcMa9OMhc4AGViDwWw==",
       "dev": true,
       "requires": {
         "@babel/helper-module-imports": "^7.0.0",
@@ -3753,8 +3194,8 @@
     },
     "babel-plugin-istanbul": {
       "version": "4.1.6",
-      "resolved": "http://registry.npm.taobao.org/babel-plugin-istanbul/download/babel-plugin-istanbul-4.1.6.tgz",
-      "integrity": "sha1-NsWbIZLvzoHFs3gyG3QXWt0cmkU=",
+      "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz",
+      "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==",
       "dev": true,
       "requires": {
         "babel-plugin-syntax-object-rest-spread": "^6.13.0",
@@ -3765,7 +3206,7 @@
       "dependencies": {
         "find-up": {
           "version": "2.1.0",
-          "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
           "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
           "dev": true,
           "requires": {
@@ -3774,7 +3215,7 @@
         },
         "locate-path": {
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
           "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
           "dev": true,
           "requires": {
@@ -3784,8 +3225,8 @@
         },
         "p-limit": {
           "version": "1.3.0",
-          "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz",
-          "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
           "dev": true,
           "requires": {
             "p-try": "^1.0.0"
@@ -3793,7 +3234,7 @@
         },
         "p-locate": {
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
           "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
           "dev": true,
           "requires": {
@@ -3802,15 +3243,21 @@
         },
         "p-try": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
           "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
           "dev": true
+        },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
         }
       }
     },
     "babel-plugin-jest-hoist": {
       "version": "23.2.0",
-      "resolved": "http://registry.npm.taobao.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-23.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz",
       "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=",
       "dev": true
     },
@@ -3829,7 +3276,7 @@
     },
     "babel-plugin-syntax-object-rest-spread": {
       "version": "6.13.0",
-      "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-object-rest-spread/download/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
       "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
       "dev": true
     },
@@ -3847,7 +3294,7 @@
     },
     "babel-plugin-transform-runtime": {
       "version": "6.23.0",
-      "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-runtime/download/babel-plugin-transform-runtime-6.23.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz",
       "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=",
       "requires": {
         "babel-runtime": "^6.22.0"
@@ -3865,7 +3312,7 @@
     },
     "babel-polyfill": {
       "version": "6.23.0",
-      "resolved": "http://registry.npm.taobao.org/babel-polyfill/download/babel-polyfill-6.23.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz",
       "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=",
       "dev": true,
       "requires": {
@@ -3876,7 +3323,7 @@
       "dependencies": {
         "regenerator-runtime": {
           "version": "0.10.5",
-          "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.10.5.tgz",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
           "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
           "dev": true
         }
@@ -3884,7 +3331,7 @@
     },
     "babel-preset-jest": {
       "version": "23.2.0",
-      "resolved": "http://registry.npm.taobao.org/babel-preset-jest/download/babel-preset-jest-23.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz",
       "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=",
       "dev": true,
       "requires": {
@@ -3949,12 +3396,6 @@
           "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
           "dev": true
         },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
-        },
         "slash": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
@@ -3980,7 +3421,7 @@
     },
     "babel-runtime": {
       "version": "6.26.0",
-      "resolved": "http://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
       "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
       "requires": {
         "core-js": "^2.4.0",
@@ -3989,7 +3430,7 @@
     },
     "babel-template": {
       "version": "6.26.0",
-      "resolved": "http://registry.npm.taobao.org/babel-template/download/babel-template-6.26.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
       "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
       "dev": true,
       "requires": {
@@ -4002,7 +3443,7 @@
     },
     "babel-traverse": {
       "version": "6.26.0",
-      "resolved": "http://registry.npm.taobao.org/babel-traverse/download/babel-traverse-6.26.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
       "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
       "dev": true,
       "requires": {
@@ -4019,8 +3460,8 @@
       "dependencies": {
         "debug": {
           "version": "2.6.9",
-          "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
-          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
           "dev": true,
           "requires": {
             "ms": "2.0.0"
@@ -4028,21 +3469,15 @@
         },
         "globals": {
           "version": "9.18.0",
-          "resolved": "http://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz",
-          "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=",
-          "dev": true
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+          "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
           "dev": true
         }
       }
     },
     "babel-types": {
       "version": "6.26.0",
-      "resolved": "http://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
       "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
       "dev": true,
       "requires": {
@@ -4054,7 +3489,7 @@
       "dependencies": {
         "to-fast-properties": {
           "version": "1.0.3",
-          "resolved": "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz",
+          "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
           "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
           "dev": true
         }
@@ -4062,19 +3497,19 @@
     },
     "babylon": {
       "version": "6.18.0",
-      "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz",
-      "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=",
+      "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+      "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
       "dev": true
     },
     "balanced-match": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
       "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
     },
     "base": {
       "version": "0.11.2",
-      "resolved": "http://registry.npm.taobao.org/base/download/base-0.11.2.tgz",
-      "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
+      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
       "requires": {
         "cache-base": "^1.0.1",
         "class-utils": "^0.3.5",
@@ -4087,7 +3522,7 @@
       "dependencies": {
         "define-property": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
           "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
           "requires": {
             "is-descriptor": "^1.0.0"
@@ -4095,24 +3530,24 @@
         },
         "is-accessor-descriptor": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "requires": {
             "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "requires": {
             "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
           "version": "1.0.2",
-          "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
-          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "requires": {
             "is-accessor-descriptor": "^1.0.0",
             "is-data-descriptor": "^1.0.0",
@@ -4120,16 +3555,16 @@
           }
         },
         "kind-of": {
-          "version": "6.0.2",
-          "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz",
-          "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE="
+          "version": "6.0.3",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
         }
       }
     },
     "base64-js": {
-      "version": "1.3.0",
-      "resolved": "http://registry.npm.taobao.org/base64-js/download/base64-js-1.3.0.tgz",
-      "integrity": "sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM="
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
     },
     "batch": {
       "version": "0.6.1",
@@ -4139,7 +3574,7 @@
     },
     "bcrypt-pbkdf": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
       "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
       "dev": true,
       "requires": {
@@ -4147,36 +3582,45 @@
       }
     },
     "bfj": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz",
-      "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz",
+      "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==",
       "dev": true,
       "requires": {
-        "bluebird": "^3.5.1",
-        "check-types": "^7.3.0",
-        "hoopy": "^0.1.2",
-        "tryer": "^1.0.0"
+        "bluebird": "^3.5.5",
+        "check-types": "^8.0.3",
+        "hoopy": "^0.1.4",
+        "tryer": "^1.0.1"
       }
     },
     "big.js": {
       "version": "5.2.2",
-      "resolved": "http://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz",
-      "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg="
+      "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+      "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
     },
     "binary-extensions": {
-      "version": "1.13.1",
-      "resolved": "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz",
-      "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U="
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
+      "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
+      "optional": true
+    },
+    "bindings": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+      "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+      "requires": {
+        "file-uri-to-path": "1.0.0"
+      }
     },
     "bluebird": {
-      "version": "3.5.4",
-      "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.4.tgz",
-      "integrity": "sha1-1sxmFZXeMNWzr1/O3TwLPvbsVxQ="
+      "version": "3.7.2",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+      "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
     },
     "bn.js": {
-      "version": "4.11.8",
-      "resolved": "http://registry.npm.taobao.org/bn.js/download/bn.js-4.11.8.tgz",
-      "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8="
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
+      "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ=="
     },
     "body-parser": {
       "version": "1.19.0",
@@ -4205,12 +3649,6 @@
             "ms": "2.0.0"
           }
         },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
-        },
         "qs": {
           "version": "6.7.0",
           "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
@@ -4249,8 +3687,8 @@
     },
     "brace-expansion": {
       "version": "1.1.11",
-      "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz",
-      "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "requires": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
@@ -4258,8 +3696,8 @@
     },
     "braces": {
       "version": "2.3.2",
-      "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz",
-      "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
       "requires": {
         "arr-flatten": "^1.1.0",
         "array-unique": "^0.3.2",
@@ -4275,7 +3713,7 @@
       "dependencies": {
         "extend-shallow": {
           "version": "2.0.1",
-          "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "requires": {
             "is-extendable": "^0.1.0"
@@ -4285,13 +3723,13 @@
     },
     "brorand": {
       "version": "1.1.0",
-      "resolved": "http://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
       "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
     },
     "browser-process-hrtime": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz",
-      "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==",
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
+      "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
       "dev": true
     },
     "browser-resolve": {
@@ -4313,8 +3751,8 @@
     },
     "browserify-aes": {
       "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz",
-      "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=",
+      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+      "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
       "requires": {
         "buffer-xor": "^1.0.3",
         "cipher-base": "^1.0.0",
@@ -4326,8 +3764,8 @@
     },
     "browserify-cipher": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz",
-      "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=",
+      "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+      "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
       "requires": {
         "browserify-aes": "^1.0.4",
         "browserify-des": "^1.0.0",
@@ -4336,8 +3774,8 @@
     },
     "browserify-des": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz",
-      "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=",
+      "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+      "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
       "requires": {
         "cipher-base": "^1.0.1",
         "des.js": "^1.0.0",
@@ -4346,59 +3784,80 @@
       }
     },
     "browserify-rsa": {
-      "version": "4.0.1",
-      "resolved": "http://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz",
-      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
+      "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
       "requires": {
-        "bn.js": "^4.1.0",
+        "bn.js": "^5.0.0",
         "randombytes": "^2.0.1"
       }
     },
     "browserify-sign": {
-      "version": "4.0.4",
-      "resolved": "http://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.0.4.tgz",
-      "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
-      "requires": {
-        "bn.js": "^4.1.1",
-        "browserify-rsa": "^4.0.0",
-        "create-hash": "^1.1.0",
-        "create-hmac": "^1.1.2",
-        "elliptic": "^6.0.0",
-        "inherits": "^2.0.1",
-        "parse-asn1": "^5.0.0"
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
+      "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
+      "requires": {
+        "bn.js": "^5.1.1",
+        "browserify-rsa": "^4.0.1",
+        "create-hash": "^1.2.0",
+        "create-hmac": "^1.1.7",
+        "elliptic": "^6.5.3",
+        "inherits": "^2.0.4",
+        "parse-asn1": "^5.1.5",
+        "readable-stream": "^3.6.0",
+        "safe-buffer": "^5.2.0"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.6.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+          "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        },
+        "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=="
+        }
       }
     },
     "browserify-zlib": {
       "version": "0.2.0",
-      "resolved": "http://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz",
-      "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
+      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+      "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
       "requires": {
         "pako": "~1.0.5"
       }
     },
     "browserslist": {
-      "version": "4.5.5",
-      "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.5.5.tgz",
-      "integrity": "sha1-/ho1IzDSSQ1XNVdMFJqFvBjvm4I=",
+      "version": "4.14.7",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz",
+      "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==",
       "requires": {
-        "caniuse-lite": "^1.0.30000960",
-        "electron-to-chromium": "^1.3.124",
-        "node-releases": "^1.1.14"
+        "caniuse-lite": "^1.0.30001157",
+        "colorette": "^1.2.1",
+        "electron-to-chromium": "^1.3.591",
+        "escalade": "^3.1.1",
+        "node-releases": "^1.1.66"
       }
     },
     "bser": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz",
-      "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=",
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+      "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
       "dev": true,
       "requires": {
         "node-int64": "^0.4.0"
       }
     },
     "buffer": {
-      "version": "4.9.1",
-      "resolved": "http://registry.npm.taobao.org/buffer/download/buffer-4.9.1.tgz",
-      "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+      "version": "4.9.2",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+      "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
       "requires": {
         "base64-js": "^1.0.2",
         "ieee754": "^1.1.4",
@@ -4407,15 +3866,15 @@
       "dependencies": {
         "isarray": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
           "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
         }
       }
     },
     "buffer-from": {
       "version": "1.1.1",
-      "resolved": "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz",
-      "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8="
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
     },
     "buffer-indexof": {
       "version": "1.1.1",
@@ -4425,12 +3884,12 @@
     },
     "buffer-xor": {
       "version": "1.0.3",
-      "resolved": "http://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz",
+      "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
       "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
     },
     "builtin-status-codes": {
       "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
       "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
     },
     "bytes": {
@@ -4440,21 +3899,22 @@
       "dev": true
     },
     "cacache": {
-      "version": "11.3.2",
-      "resolved": "http://registry.npm.taobao.org/cacache/download/cacache-11.3.2.tgz",
-      "integrity": "sha1-LYHjCOPSWMo4Eltna5iyrJzmm/o=",
+      "version": "12.0.4",
+      "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
+      "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
       "requires": {
-        "bluebird": "^3.5.3",
+        "bluebird": "^3.5.5",
         "chownr": "^1.1.1",
         "figgy-pudding": "^3.5.1",
-        "glob": "^7.1.3",
+        "glob": "^7.1.4",
         "graceful-fs": "^4.1.15",
+        "infer-owner": "^1.0.3",
         "lru-cache": "^5.1.1",
         "mississippi": "^3.0.0",
         "mkdirp": "^0.5.1",
         "move-concurrently": "^1.0.1",
         "promise-inflight": "^1.0.1",
-        "rimraf": "^2.6.2",
+        "rimraf": "^2.6.3",
         "ssri": "^6.0.1",
         "unique-filename": "^1.1.1",
         "y18n": "^4.0.0"
@@ -4462,8 +3922,8 @@
     },
     "cache-base": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz",
-      "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=",
+      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
       "requires": {
         "collection-visit": "^1.0.0",
         "component-emitter": "^1.2.1",
@@ -4487,6 +3947,28 @@
         "neo-async": "^2.6.0",
         "normalize-path": "^3.0.0",
         "schema-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
+      }
+    },
+    "call-bind": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz",
+      "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==",
+      "requires": {
+        "function-bind": "^1.1.1",
+        "get-intrinsic": "^1.0.0"
       }
     },
     "call-me-maybe": {
@@ -4541,7 +4023,7 @@
     },
     "camelcase": {
       "version": "1.2.1",
-      "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
       "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
     },
     "caniuse-api": {
@@ -4557,9 +4039,9 @@
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30000962",
-      "resolved": "http://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30000962.tgz",
-      "integrity": "sha1-bBDDqzBLib6pBeZq35jAkFCI7kQ="
+      "version": "1.0.30001162",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001162.tgz",
+      "integrity": "sha512-E9FktFxaNnp4ky3ucIGzEXLM+Knzlpuq1oN1sFAU0KeayygabGTmOsndpo8QrL4D9pcThlf4D2pUKaDxPCUmVw=="
     },
     "capture-exit": {
       "version": "1.2.0",
@@ -4571,20 +4053,20 @@
       }
     },
     "case-sensitive-paths-webpack-plugin": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz",
-      "integrity": "sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz",
+      "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==",
       "dev": true
     },
     "caseless": {
       "version": "0.12.0",
-      "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz",
+      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
       "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
       "dev": true
     },
     "center-align": {
       "version": "0.1.3",
-      "resolved": "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz",
+      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
       "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
       "requires": {
         "align-text": "^0.1.3",
@@ -4593,7 +4075,7 @@
     },
     "chalk": {
       "version": "1.1.3",
-      "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
       "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
       "requires": {
         "ansi-styles": "^2.2.1",
@@ -4605,49 +4087,81 @@
     },
     "chardet": {
       "version": "0.4.2",
-      "resolved": "http://registry.npm.taobao.org/chardet/download/chardet-0.4.2.tgz",
+      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
       "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
       "dev": true
     },
     "charenc": {
       "version": "0.0.2",
-      "resolved": "http://registry.npm.taobao.org/charenc/download/charenc-0.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
       "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc="
     },
     "check-types": {
-      "version": "7.4.0",
-      "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz",
-      "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==",
+      "version": "8.0.3",
+      "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz",
+      "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==",
       "dev": true
     },
     "chokidar": {
-      "version": "2.1.5",
-      "resolved": "http://registry.npm.taobao.org/chokidar/download/chokidar-2.1.5.tgz",
-      "integrity": "sha1-CuhDTZYigaX1bHKGnnnLbZ2GrU0=",
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz",
+      "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==",
+      "optional": true,
       "requires": {
-        "anymatch": "^2.0.0",
-        "async-each": "^1.0.1",
-        "braces": "^2.3.2",
-        "fsevents": "^1.2.7",
-        "glob-parent": "^3.1.0",
-        "inherits": "^2.0.3",
-        "is-binary-path": "^1.0.0",
-        "is-glob": "^4.0.0",
-        "normalize-path": "^3.0.0",
-        "path-is-absolute": "^1.0.0",
-        "readdirp": "^2.2.1",
-        "upath": "^1.1.1"
+        "anymatch": "~3.1.1",
+        "braces": "~3.0.2",
+        "fsevents": "~2.1.2",
+        "glob-parent": "~5.1.0",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.5.0"
+      },
+      "dependencies": {
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+          "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+          "optional": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+          "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+          "optional": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+          "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+          "optional": true
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+          "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+          "optional": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        }
       }
     },
     "chownr": {
-      "version": "1.1.1",
-      "resolved": "http://registry.npm.taobao.org/chownr/download/chownr-1.1.1.tgz",
-      "integrity": "sha1-VHJri4//TfBTxCGH6AH7RBLfFJQ="
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+      "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
     },
     "chrome-trace-event": {
-      "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/chrome-trace-event/download/chrome-trace-event-1.0.0.tgz",
-      "integrity": "sha1-Rakb0sIMlBHwljtarrmhuV4JzEg=",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+      "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
       "requires": {
         "tslib": "^1.9.0"
       }
@@ -4660,8 +4174,8 @@
     },
     "cipher-base": {
       "version": "1.0.4",
-      "resolved": "http://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz",
-      "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
+      "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+      "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
       "requires": {
         "inherits": "^2.0.1",
         "safe-buffer": "^5.0.1"
@@ -4676,8 +4190,8 @@
     },
     "class-utils": {
       "version": "0.3.6",
-      "resolved": "http://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz",
-      "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=",
+      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
       "requires": {
         "arr-union": "^3.1.0",
         "define-property": "^0.2.5",
@@ -4687,7 +4201,7 @@
       "dependencies": {
         "define-property": {
           "version": "0.2.5",
-          "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "requires": {
             "is-descriptor": "^0.1.0"
@@ -4701,9 +4215,9 @@
       "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
     },
     "clean-css": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
-      "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==",
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
+      "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
       "dev": true,
       "requires": {
         "source-map": "~0.6.0"
@@ -4719,7 +4233,7 @@
     },
     "cli-cursor": {
       "version": "2.1.0",
-      "resolved": "http://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
       "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
       "dev": true,
       "requires": {
@@ -4727,31 +4241,32 @@
       }
     },
     "cli-highlight": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.1.tgz",
-      "integrity": "sha512-0y0VlNmdD99GXZHYnvrQcmHxP8Bi6T00qucGgBgGv4kJ0RyDthNnnFPupHV7PYv/OXSVk+azFbOeaW6+vGmx9A==",
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.8.tgz",
+      "integrity": "sha512-mFuTW5UOV3/S0wZE9/1b0EcAM0XOJIhoAWPhWm5voiJ6ugVBkvYBIEL7sbHo9sEtWdEmwDIWab32qpaRI3cfqQ==",
       "dev": true,
       "requires": {
-        "chalk": "^2.3.0",
-        "highlight.js": "^9.6.0",
+        "chalk": "^4.0.0",
+        "highlight.js": "^10.0.0",
         "mz": "^2.4.0",
-        "parse5": "^4.0.0",
-        "yargs": "^13.0.0"
+        "parse5": "^5.1.1",
+        "parse5-htmlparser2-tree-adapter": "^6.0.0",
+        "yargs": "^15.0.0"
       },
       "dependencies": {
         "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
           "dev": true
         },
         "ansi-styles": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
           "dev": true,
           "requires": {
-            "color-convert": "^1.9.0"
+            "color-convert": "^2.0.1"
           }
         },
         "camelcase": {
@@ -4761,75 +4276,64 @@
           "dev": true
         },
         "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+          "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
           "dev": true,
           "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
           }
         },
         "cliui": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
-          "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+          "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
           "dev": true,
           "requires": {
-            "string-width": "^3.1.0",
-            "strip-ansi": "^5.2.0",
-            "wrap-ansi": "^5.1.0"
+            "string-width": "^4.2.0",
+            "strip-ansi": "^6.0.0",
+            "wrap-ansi": "^6.2.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
           }
         },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true
+        },
         "get-caller-file": {
           "version": "2.0.5",
           "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
           "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
           "dev": true
         },
-        "invert-kv": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
-          "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
-        "lcid": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
-          "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
-          "dev": true,
-          "requires": {
-            "invert-kv": "^2.0.0"
-          }
-        },
-        "mem": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
-          "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
-          "dev": true,
-          "requires": {
-            "map-age-cleaner": "^0.1.1",
-            "mimic-fn": "^2.0.0",
-            "p-is-promise": "^2.0.0"
-          }
-        },
-        "mimic-fn": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
           "dev": true
         },
-        "os-locale": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
-          "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
-          "dev": true,
-          "requires": {
-            "execa": "^1.0.0",
-            "lcid": "^2.0.0",
-            "mem": "^4.0.0"
-          }
+        "parse5": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
+          "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
+          "dev": true
         },
         "require-main-filename": {
           "version": "2.0.0",
@@ -4838,68 +4342,68 @@
           "dev": true
         },
         "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+          "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
           "dev": true,
           "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.0"
           }
         },
         "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
           "dev": true,
           "requires": {
-            "ansi-regex": "^4.1.0"
+            "ansi-regex": "^5.0.0"
           }
         },
         "supports-color": {
-          "version": "5.5.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-          "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "has-flag": "^4.0.0"
           }
         },
         "wrap-ansi": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
-          "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+          "version": "6.2.0",
+          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+          "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
           "dev": true,
           "requires": {
-            "ansi-styles": "^3.2.0",
-            "string-width": "^3.0.0",
-            "strip-ansi": "^5.0.0"
+            "ansi-styles": "^4.0.0",
+            "string-width": "^4.1.0",
+            "strip-ansi": "^6.0.0"
           }
         },
         "yargs": {
-          "version": "13.2.4",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz",
-          "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
+          "version": "15.4.1",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+          "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
           "dev": true,
           "requires": {
-            "cliui": "^5.0.0",
-            "find-up": "^3.0.0",
+            "cliui": "^6.0.0",
+            "decamelize": "^1.2.0",
+            "find-up": "^4.1.0",
             "get-caller-file": "^2.0.1",
-            "os-locale": "^3.1.0",
             "require-directory": "^2.1.1",
             "require-main-filename": "^2.0.0",
             "set-blocking": "^2.0.0",
-            "string-width": "^3.0.0",
+            "string-width": "^4.2.0",
             "which-module": "^2.0.0",
             "y18n": "^4.0.0",
-            "yargs-parser": "^13.1.0"
+            "yargs-parser": "^18.1.2"
           }
         },
         "yargs-parser": {
-          "version": "13.1.0",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz",
-          "integrity": "sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==",
+          "version": "18.1.3",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+          "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
           "dev": true,
           "requires": {
             "camelcase": "^5.0.0",
@@ -4909,21 +4413,21 @@
       }
     },
     "cli-spinners": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.1.0.tgz",
-      "integrity": "sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA==",
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz",
+      "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==",
       "dev": true
     },
     "cli-width": {
-      "version": "2.2.0",
-      "resolved": "http://registry.npm.taobao.org/cli-width/download/cli-width-2.2.0.tgz",
-      "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
+      "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
       "dev": true
     },
     "clipboard": {
-      "version": "2.0.4",
-      "resolved": "http://registry.npm.taobao.org/clipboard/download/clipboard-2.0.4.tgz",
-      "integrity": "sha1-g22v1mzw/qXXHOXVsL9ulYAJES0=",
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz",
+      "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==",
       "requires": {
         "good-listener": "^1.2.2",
         "select": "^1.1.2",
@@ -4931,18 +4435,30 @@
       }
     },
     "clipboardy": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.0.0.tgz",
-      "integrity": "sha512-XbVjHMsss0giNUkp/tV/3eEAZe8i1fZTLzmPKqjE1RGIAWOTiF5D014f6R+g53ZAq0IK3cPrJXFvqE8eQjhFYQ==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz",
+      "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==",
       "dev": true,
       "requires": {
         "arch": "^2.1.1",
-        "execa": "^1.0.0"
+        "execa": "^1.0.0",
+        "is-wsl": "^2.1.1"
+      },
+      "dependencies": {
+        "is-wsl": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+          "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+          "dev": true,
+          "requires": {
+            "is-docker": "^2.0.0"
+          }
+        }
       }
     },
     "cliui": {
       "version": "2.1.0",
-      "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
       "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
       "requires": {
         "center-align": "^0.1.1",
@@ -4951,10 +4467,9 @@
       }
     },
     "clone": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
-      "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
-      "dev": true
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+      "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
     },
     "co": {
       "version": "4.6.0",
@@ -5012,7 +4527,7 @@
     },
     "collection-visit": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
       "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
       "requires": {
         "map-visit": "^1.0.0",
@@ -5020,55 +4535,60 @@
       }
     },
     "color": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/color/-/color-3.1.1.tgz",
-      "integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==",
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz",
+      "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==",
       "dev": true,
       "requires": {
         "color-convert": "^1.9.1",
-        "color-string": "^1.5.2"
+        "color-string": "^1.5.4"
       }
     },
     "color-convert": {
       "version": "1.9.3",
-      "resolved": "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz",
-      "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
       "requires": {
         "color-name": "1.1.3"
       }
     },
     "color-name": {
       "version": "1.1.3",
-      "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
       "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
     },
     "color-string": {
-      "version": "1.5.3",
-      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
-      "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
+      "version": "1.5.4",
+      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz",
+      "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==",
       "dev": true,
       "requires": {
         "color-name": "^1.0.0",
         "simple-swizzle": "^0.2.2"
       }
     },
+    "colorette": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
+      "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw=="
+    },
     "combined-stream": {
-      "version": "1.0.7",
-      "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.7.tgz",
-      "integrity": "sha1-LR0kMXr7ir6V1tLAsHtXgTU52Cg=",
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
       "dev": true,
       "requires": {
         "delayed-stream": "~1.0.0"
       }
     },
     "commander": {
-      "version": "2.20.0",
-      "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.20.0.tgz",
-      "integrity": "sha1-1YuytcHuj4ew00ACfp6U4iLFpCI="
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
     },
     "commondir": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
       "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
     },
     "component-classes": {
@@ -5081,8 +4601,8 @@
     },
     "component-emitter": {
       "version": "1.3.0",
-      "resolved": "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz",
-      "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A="
+      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
     },
     "component-indexof": {
       "version": "0.0.3",
@@ -5090,12 +4610,12 @@
       "integrity": "sha1-EdCRMSI5648yyPJa6csAL/6NPCQ="
     },
     "compressible": {
-      "version": "2.0.17",
-      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz",
-      "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==",
+      "version": "2.0.18",
+      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+      "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
       "dev": true,
       "requires": {
-        "mime-db": ">= 1.40.0 < 2"
+        "mime-db": ">= 1.43.0 < 2"
       }
     },
     "compression": {
@@ -5127,24 +4647,18 @@
           "requires": {
             "ms": "2.0.0"
           }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
         }
       }
     },
     "concat-map": {
       "version": "0.0.1",
-      "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
       "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
     },
     "concat-stream": {
       "version": "1.6.2",
-      "resolved": "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz",
-      "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
       "requires": {
         "buffer-from": "^1.0.0",
         "inherits": "^2.0.3",
@@ -5191,12 +4705,9 @@
       "dev": true
     },
     "console-browserify": {
-      "version": "1.1.0",
-      "resolved": "http://registry.npm.taobao.org/console-browserify/download/console-browserify-1.1.0.tgz",
-      "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
-      "requires": {
-        "date-now": "^0.1.4"
-      }
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+      "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="
     },
     "consolidate": {
       "version": "0.15.1",
@@ -5209,12 +4720,12 @@
     },
     "constants-browserify": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
       "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
     },
     "contains-path": {
       "version": "0.1.0",
-      "resolved": "http://registry.npm.taobao.org/contains-path/download/contains-path-0.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
       "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
       "dev": true
     },
@@ -5235,13 +4746,13 @@
     },
     "contour_plot": {
       "version": "0.0.1",
-      "resolved": "http://registry.npm.taobao.org/contour_plot/download/contour_plot-0.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/contour_plot/-/contour_plot-0.0.1.tgz",
       "integrity": "sha1-R1hw8DK44zhBKqX8UHiA8L9JXHc="
     },
     "convert-source-map": {
-      "version": "1.6.0",
-      "resolved": "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.6.0.tgz",
-      "integrity": "sha1-UbU3qMQ+DwTewZk7/83VBOdYrCA=",
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+      "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
       "requires": {
         "safe-buffer": "~5.1.1"
       }
@@ -5260,8 +4771,8 @@
     },
     "copy-concurrently": {
       "version": "1.0.5",
-      "resolved": "http://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz",
-      "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=",
+      "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+      "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
       "requires": {
         "aproba": "^1.1.1",
         "fs-write-stream-atomic": "^1.0.8",
@@ -5273,7 +4784,7 @@
     },
     "copy-descriptor": {
       "version": "0.1.1",
-      "resolved": "http://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
       "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
     },
     "copy-webpack-plugin": {
@@ -5418,6 +4929,12 @@
           "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
           "dev": true
         },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
+        },
         "pify": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
@@ -5443,6 +4960,12 @@
             "once": "^1.3.1"
           }
         },
+        "serialize-javascript": {
+          "version": "1.9.1",
+          "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
+          "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==",
+          "dev": true
+        },
         "slash": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
@@ -5467,41 +4990,29 @@
       }
     },
     "core-js": {
-      "version": "2.6.5",
-      "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-2.6.5.tgz",
-      "integrity": "sha1-RLyNJJ5/sv9dAOA0Gn/7lPv2eJU="
+      "version": "2.6.12",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
+      "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
     },
     "core-js-compat": {
-      "version": "3.0.1",
-      "resolved": "http://registry.npm.taobao.org/core-js-compat/download/core-js-compat-3.0.1.tgz",
-      "integrity": "sha1-v/c7oxyoaHQxuciPeNM2Jkb7dvA=",
+      "version": "3.8.0",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.0.tgz",
+      "integrity": "sha512-o9QKelQSxQMYWHXc/Gc4L8bx/4F7TTraE5rhuN8I7mKBt5dBIUpXpIR3omv70ebr8ST5R3PqbDQr+ZI3+Tt1FQ==",
       "requires": {
-        "browserslist": "^4.5.4",
-        "core-js": "3.0.1",
-        "core-js-pure": "3.0.1",
-        "semver": "^6.0.0"
+        "browserslist": "^4.14.7",
+        "semver": "7.0.0"
       },
       "dependencies": {
-        "core-js": {
-          "version": "3.0.1",
-          "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-3.0.1.tgz",
-          "integrity": "sha1-E0MYJjQpj384Yi+V5z9U5I3fRzg="
-        },
         "semver": {
-          "version": "6.0.0",
-          "resolved": "http://registry.npm.taobao.org/semver/download/semver-6.0.0.tgz",
-          "integrity": "sha1-BeNZ7lceWtftZBpu7B5Ue6Ut6mU="
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+          "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A=="
         }
       }
     },
-    "core-js-pure": {
-      "version": "3.0.1",
-      "resolved": "http://registry.npm.taobao.org/core-js-pure/download/core-js-pure-3.0.1.tgz",
-      "integrity": "sha1-NzWPsNAk5rhtRD15T0436UkJjL4="
-    },
     "core-util-is": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
     },
     "cosmiconfig": {
@@ -5529,18 +5040,25 @@
       }
     },
     "create-ecdh": {
-      "version": "4.0.3",
-      "resolved": "http://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.3.tgz",
-      "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=",
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
+      "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
       "requires": {
         "bn.js": "^4.1.0",
-        "elliptic": "^6.0.0"
+        "elliptic": "^6.5.3"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+        }
       }
     },
     "create-hash": {
       "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz",
-      "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=",
+      "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+      "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
       "requires": {
         "cipher-base": "^1.0.1",
         "inherits": "^2.0.1",
@@ -5551,8 +5069,8 @@
     },
     "create-hmac": {
       "version": "1.1.7",
-      "resolved": "http://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz",
-      "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=",
+      "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+      "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
       "requires": {
         "cipher-base": "^1.0.3",
         "create-hash": "^1.1.0",
@@ -5564,8 +5082,8 @@
     },
     "cross-spawn": {
       "version": "6.0.5",
-      "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz",
-      "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
       "dev": true,
       "requires": {
         "nice-try": "^1.0.4",
@@ -5577,13 +5095,13 @@
     },
     "crypt": {
       "version": "0.0.2",
-      "resolved": "http://registry.npm.taobao.org/crypt/download/crypt-0.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
       "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs="
     },
     "crypto-browserify": {
       "version": "3.12.0",
-      "resolved": "http://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz",
-      "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
+      "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+      "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
       "requires": {
         "browserify-cipher": "^1.0.0",
         "browserify-sign": "^4.0.0",
@@ -5666,9 +5184,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -5695,8 +5213,8 @@
     },
     "css-loader": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/css-loader/download/css-loader-1.0.1.tgz",
-      "integrity": "sha1-aIW7UjOzXsR7AGBX2gHMZAtref4=",
+      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz",
+      "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==",
       "requires": {
         "babel-code-frame": "^6.26.0",
         "css-selector-tokenizer": "^0.7.0",
@@ -5713,13 +5231,13 @@
       }
     },
     "css-select": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz",
-      "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
+      "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==",
       "dev": true,
       "requires": {
         "boolbase": "^1.0.0",
-        "css-what": "^2.1.2",
+        "css-what": "^3.2.1",
         "domutils": "^1.7.0",
         "nth-check": "^1.0.2"
       }
@@ -5731,85 +5249,42 @@
       "dev": true
     },
     "css-selector-tokenizer": {
-      "version": "0.7.1",
-      "resolved": "http://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.1.tgz",
-      "integrity": "sha1-oXcnGovKUBkXL0+JH8bu2cv2jV0=",
+      "version": "0.7.3",
+      "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz",
+      "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==",
       "requires": {
-        "cssesc": "^0.1.0",
-        "fastparse": "^1.1.1",
-        "regexpu-core": "^1.0.0"
-      },
-      "dependencies": {
-        "jsesc": {
-          "version": "0.5.0",
-          "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz",
-          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
-        },
-        "regexpu-core": {
-          "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-1.0.0.tgz",
-          "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
-          "requires": {
-            "regenerate": "^1.2.1",
-            "regjsgen": "^0.2.0",
-            "regjsparser": "^0.1.4"
-          }
-        },
-        "regjsgen": {
-          "version": "0.2.0",
-          "resolved": "http://registry.npm.taobao.org/regjsgen/download/regjsgen-0.2.0.tgz",
-          "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc="
-        },
-        "regjsparser": {
-          "version": "0.1.5",
-          "resolved": "http://registry.npm.taobao.org/regjsparser/download/regjsparser-0.1.5.tgz",
-          "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
-          "requires": {
-            "jsesc": "~0.5.0"
-          }
-        }
+        "cssesc": "^3.0.0",
+        "fastparse": "^1.1.2"
       }
     },
     "css-tree": {
-      "version": "1.0.0-alpha.28",
-      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz",
-      "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==",
+      "version": "1.0.0-alpha.37",
+      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
+      "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
       "dev": true,
       "requires": {
-        "mdn-data": "~1.1.0",
-        "source-map": "^0.5.3"
+        "mdn-data": "2.0.4",
+        "source-map": "^0.6.1"
       },
       "dependencies": {
         "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
           "dev": true
         }
       }
     },
-    "css-unit-converter": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz",
-      "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=",
-      "dev": true
-    },
-    "css-url-regex": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz",
-      "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=",
-      "dev": true
-    },
     "css-what": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
-      "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
+      "version": "3.4.2",
+      "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz",
+      "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==",
       "dev": true
     },
     "cssesc": {
-      "version": "0.1.0",
-      "resolved": "http://registry.npm.taobao.org/cssesc/download/cssesc-0.1.0.tgz",
-      "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q="
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
     },
     "cssnano": {
       "version": "4.1.10",
@@ -5855,9 +5330,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -5952,9 +5427,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -6032,9 +5507,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -6066,42 +5541,48 @@
       "dev": true
     },
     "csso": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz",
-      "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
+      "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
       "dev": true,
       "requires": {
-        "css-tree": "1.0.0-alpha.29"
+        "css-tree": "^1.1.2"
       },
       "dependencies": {
         "css-tree": {
-          "version": "1.0.0-alpha.29",
-          "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz",
-          "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==",
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz",
+          "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==",
           "dev": true,
           "requires": {
-            "mdn-data": "~1.1.0",
-            "source-map": "^0.5.3"
+            "mdn-data": "2.0.14",
+            "source-map": "^0.6.1"
           }
         },
+        "mdn-data": {
+          "version": "2.0.14",
+          "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+          "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
+          "dev": true
+        },
         "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
           "dev": true
         }
       }
     },
     "cssom": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz",
-      "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==",
+      "version": "0.3.8",
+      "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
+      "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
       "dev": true
     },
     "cssstyle": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz",
-      "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz",
+      "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==",
       "dev": true,
       "requires": {
         "cssom": "0.3.x"
@@ -6114,38 +5595,38 @@
       "dev": true
     },
     "cyclist": {
-      "version": "0.2.2",
-      "resolved": "http://registry.npm.taobao.org/cyclist/download/cyclist-0.2.2.tgz",
-      "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA="
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
+      "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk="
     },
     "d3-array": {
       "version": "1.2.4",
-      "resolved": "http://registry.npm.taobao.org/d3-array/download/d3-array-1.2.4.tgz",
-      "integrity": "sha1-Y1zk1e6nWfb2BYY9vPww7cc39x8="
+      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
+      "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw=="
     },
     "d3-collection": {
       "version": "1.0.7",
-      "resolved": "http://registry.npm.taobao.org/d3-collection/download/d3-collection-1.0.7.tgz",
-      "integrity": "sha1-NJvSqpl32wcQkcExRNXk8WtbMQ4="
+      "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz",
+      "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A=="
     },
     "d3-color": {
-      "version": "1.2.3",
-      "resolved": "http://registry.npm.taobao.org/d3-color/download/d3-color-1.2.3.tgz",
-      "integrity": "sha1-bGe7KvbfPMjXnvzE06PoPijIBI8="
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz",
+      "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q=="
     },
     "d3-composite-projections": {
-      "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/d3-composite-projections/download/d3-composite-projections-1.2.0.tgz",
-      "integrity": "sha1-+g5vFELxfQRkOEOjqIPH2U4MJ8A=",
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/d3-composite-projections/-/d3-composite-projections-1.2.3.tgz",
+      "integrity": "sha512-RxNBoRGf3epTnQBUKeEpaXpD8BA/Ud0xRuLwWxyI7dWfuuYgJZMKw6ZsZOwfDNC0ZbMWaU0eBFlL05A2jlcsWg==",
       "requires": {
-        "d3-geo": "1.2.4",
-        "d3-path": "^1.0.1"
+        "d3-geo": "^1.11.6",
+        "d3-path": "^1.0.7"
       },
       "dependencies": {
         "d3-geo": {
-          "version": "1.2.4",
-          "resolved": "http://registry.npm.taobao.org/d3-geo/download/d3-geo-1.2.4.tgz",
-          "integrity": "sha1-0XnzuqduYj7x4Ng2k9twW3xZkAY=",
+          "version": "1.12.1",
+          "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz",
+          "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==",
           "requires": {
             "d3-array": "1"
           }
@@ -6153,14 +5634,14 @@
       }
     },
     "d3-dispatch": {
-      "version": "1.0.5",
-      "resolved": "http://registry.npm.taobao.org/d3-dispatch/download/d3-dispatch-1.0.5.tgz",
-      "integrity": "sha1-4lwQoYZRfNbILdGeoBjwfgHjkBU="
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz",
+      "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA=="
     },
     "d3-dsv": {
       "version": "1.0.10",
-      "resolved": "http://registry.npm.taobao.org/d3-dsv/download/d3-dsv-1.0.10.tgz",
-      "integrity": "sha1-Q3HEiaKmVKKXrKFvyvYFpvMab1E=",
+      "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.10.tgz",
+      "integrity": "sha512-vqklfpxmtO2ZER3fq/B33R/BIz3A1PV0FaZRuFM8w6jLo7sUX1BZDh73fPlr0s327rzq4H6EN1q9U+eCBCSN8g==",
       "requires": {
         "commander": "2",
         "iconv-lite": "0.4",
@@ -6168,18 +5649,18 @@
       }
     },
     "d3-ease": {
-      "version": "1.0.5",
-      "resolved": "http://registry.npm.taobao.org/d3-ease/download/d3-ease-1.0.5.tgz",
-      "integrity": "sha1-jOWSdtgSQbG3IELWry1A522Tb/s="
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz",
+      "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ=="
     },
     "d3-format": {
-      "version": "1.3.2",
-      "resolved": "http://registry.npm.taobao.org/d3-format/download/d3-format-1.3.2.tgz",
-      "integrity": "sha1-apa14xvLmBIqMIY/fZI2XABgNWI="
+      "version": "1.4.5",
+      "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz",
+      "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ=="
     },
     "d3-geo": {
       "version": "1.6.4",
-      "resolved": "http://registry.npm.taobao.org/d3-geo/download/d3-geo-1.6.4.tgz",
+      "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.6.4.tgz",
       "integrity": "sha1-8g4eRhyxhF9ai+Vatvh2VCp+MZk=",
       "requires": {
         "d3-array": "1"
@@ -6187,7 +5668,7 @@
     },
     "d3-geo-projection": {
       "version": "2.1.2",
-      "resolved": "http://registry.npm.taobao.org/d3-geo-projection/download/d3-geo-projection-2.1.2.tgz",
+      "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-2.1.2.tgz",
       "integrity": "sha1-ffjh6dBG1jHGUJ9+UxNX1K3CSqM=",
       "requires": {
         "commander": "2",
@@ -6197,33 +5678,33 @@
     },
     "d3-hexjson": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/d3-hexjson/download/d3-hexjson-1.0.1.tgz",
-      "integrity": "sha1-aiMRHoNZ8eIU9dCvo3nAKytn3ws=",
+      "resolved": "https://registry.npmjs.org/d3-hexjson/-/d3-hexjson-1.0.1.tgz",
+      "integrity": "sha512-TeH4T0PSbDazMm3gHgc4ulO0PfrZpz0Uk3y5tCGz+NgC7HnX7KBdem7uAN+j9x3ZshTh7raN3V/bFhaLB2C8DA==",
       "requires": {
         "d3-array": "1"
       }
     },
     "d3-hierarchy": {
-      "version": "1.1.8",
-      "resolved": "http://registry.npm.taobao.org/d3-hierarchy/download/d3-hierarchy-1.1.8.tgz",
-      "integrity": "sha1-emMXvT7STjJGQbbx526XiDawCMw="
+      "version": "1.1.9",
+      "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz",
+      "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ=="
     },
     "d3-interpolate": {
       "version": "1.1.6",
-      "resolved": "http://registry.npm.taobao.org/d3-interpolate/download/d3-interpolate-1.1.6.tgz",
-      "integrity": "sha1-LPOVriOBgE3wiqG/dmt/l7X2j7Y=",
+      "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz",
+      "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==",
       "requires": {
         "d3-color": "1"
       }
     },
     "d3-path": {
-      "version": "1.0.7",
-      "resolved": "http://registry.npm.taobao.org/d3-path/download/d3-path-1.0.7.tgz",
-      "integrity": "sha1-jefNaTp1rAtUgNOrrM2UeT5Yqug="
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+      "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
     },
     "d3-sankey": {
       "version": "0.7.1",
-      "resolved": "http://registry.npm.taobao.org/d3-sankey/download/d3-sankey-0.7.1.tgz",
+      "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.7.1.tgz",
       "integrity": "sha1-0imDImj8aaf+yEgD6WwiVqYUxSE=",
       "requires": {
         "d3-array": "1",
@@ -6232,27 +5713,27 @@
       }
     },
     "d3-selection": {
-      "version": "1.4.0",
-      "resolved": "http://registry.npm.taobao.org/d3-selection/download/d3-selection-1.4.0.tgz",
-      "integrity": "sha1-q5rB5mTPln6/G0ecwH4ozpkIxHQ="
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz",
+      "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg=="
     },
     "d3-shape": {
-      "version": "1.3.5",
-      "resolved": "http://registry.npm.taobao.org/d3-shape/download/d3-shape-1.3.5.tgz",
-      "integrity": "sha1-6BrqWUD1nwp5z8ysASIyqJh8YDM=",
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+      "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
       "requires": {
         "d3-path": "1"
       }
     },
     "d3-timer": {
-      "version": "1.0.9",
-      "resolved": "http://registry.npm.taobao.org/d3-timer/download/d3-timer-1.0.9.tgz",
-      "integrity": "sha1-97uMDVl9eS/3Ex4cJKNt1HGkcbo="
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz",
+      "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw=="
     },
     "d3-transition": {
-      "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/d3-transition/download/d3-transition-1.2.0.tgz",
-      "integrity": "sha1-9TjA4hsqofBfPpZfhWfoEoSzsrg=",
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz",
+      "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==",
       "requires": {
         "d3-color": "1",
         "d3-dispatch": "1",
@@ -6264,21 +5745,21 @@
     },
     "d3-voronoi": {
       "version": "1.1.4",
-      "resolved": "http://registry.npm.taobao.org/d3-voronoi/download/d3-voronoi-1.1.4.tgz",
-      "integrity": "sha1-3Tx412U9K7NZKErkeGRdlZRMgpc="
+      "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz",
+      "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg=="
     },
     "dagre": {
-      "version": "0.8.4",
-      "resolved": "http://registry.npm.taobao.org/dagre/download/dagre-0.8.4.tgz",
-      "integrity": "sha1-Jrn7j3vcYMYRCgRYw3UmGDZ4YGE=",
+      "version": "0.8.5",
+      "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz",
+      "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==",
       "requires": {
-        "graphlib": "^2.1.7",
-        "lodash": "^4.17.4"
+        "graphlib": "^2.1.8",
+        "lodash": "^4.17.15"
       }
     },
     "dashdash": {
       "version": "1.14.1",
-      "resolved": "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz",
+      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
       "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
       "dev": true,
       "requires": {
@@ -6297,9 +5778,9 @@
       },
       "dependencies": {
         "whatwg-url": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz",
-          "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==",
+          "version": "7.1.0",
+          "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
+          "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
           "dev": true,
           "requires": {
             "lodash.sortby": "^4.7.0",
@@ -6309,49 +5790,55 @@
         }
       }
     },
-    "date-now": {
-      "version": "0.1.4",
-      "resolved": "http://registry.npm.taobao.org/date-now/download/date-now-0.1.4.tgz",
-      "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs="
-    },
     "de-indent": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
       "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0="
     },
+    "deasync": {
+      "version": "0.1.21",
+      "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.21.tgz",
+      "integrity": "sha512-kUmM8Y+PZpMpQ+B4AuOW9k2Pfx/mSupJtxOsLzmnHY2WqZUYRFccFn2RhzPAqt3Xb+sorK/badW2D4zNzqZz5w==",
+      "dev": true,
+      "requires": {
+        "bindings": "^1.5.0",
+        "node-addon-api": "^1.7.1"
+      }
+    },
     "debug": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
       "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
       "requires": {
         "ms": "2.0.0"
-      },
-      "dependencies": {
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
-        }
       }
     },
     "decamelize": {
       "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
       "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
     },
     "decode-uri-component": {
       "version": "0.2.0",
-      "resolved": "http://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
       "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
     },
     "deep-equal": {
-      "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz",
-      "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
+      "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
+      "requires": {
+        "is-arguments": "^1.0.4",
+        "is-date-object": "^1.0.1",
+        "is-regex": "^1.0.4",
+        "object-is": "^1.0.1",
+        "object-keys": "^1.1.1",
+        "regexp.prototype.flags": "^1.2.0"
+      }
     },
     "deep-is": {
       "version": "0.1.3",
-      "resolved": "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz",
+      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
       "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
       "dev": true
     },
@@ -6362,15 +5849,126 @@
       "dev": true
     },
     "default-gateway": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
-      "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
+      "version": "5.0.5",
+      "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-5.0.5.tgz",
+      "integrity": "sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==",
       "dev": true,
       "requires": {
-        "execa": "^1.0.0",
-        "ip-regex": "^2.1.0"
-      }
-    },
+        "execa": "^3.3.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
+          }
+        },
+        "execa": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz",
+          "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^7.0.0",
+            "get-stream": "^5.0.0",
+            "human-signals": "^1.1.1",
+            "is-stream": "^2.0.0",
+            "merge-stream": "^2.0.0",
+            "npm-run-path": "^4.0.0",
+            "onetime": "^5.1.0",
+            "p-finally": "^2.0.0",
+            "signal-exit": "^3.0.2",
+            "strip-final-newline": "^2.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+          "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+          "dev": true,
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
+        "is-stream": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+          "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+          "dev": true
+        },
+        "merge-stream": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+          "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+          "dev": true
+        },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+          "dev": true
+        },
+        "npm-run-path": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+          "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.0.0"
+          }
+        },
+        "onetime": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+          "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        },
+        "p-finally": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
+          "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==",
+          "dev": true
+        },
+        "path-key": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+          "dev": true
+        },
+        "shebang-command": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+          "dev": true,
+          "requires": {
+            "shebang-regex": "^3.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+          "dev": true
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
+      }
+    },
     "default-require-extensions": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz",
@@ -6387,20 +5985,28 @@
       "dev": true,
       "requires": {
         "clone": "^1.0.2"
+      },
+      "dependencies": {
+        "clone": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+          "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+          "dev": true
+        }
       }
     },
     "define-properties": {
       "version": "1.1.3",
-      "resolved": "http://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz",
-      "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=",
+      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+      "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
       "requires": {
         "object-keys": "^1.0.12"
       }
     },
     "define-property": {
       "version": "2.0.2",
-      "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz",
-      "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=",
+      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
       "requires": {
         "is-descriptor": "^1.0.2",
         "isobject": "^3.0.1"
@@ -6408,24 +6014,24 @@
       "dependencies": {
         "is-accessor-descriptor": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "requires": {
             "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "requires": {
             "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
           "version": "1.0.2",
-          "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
-          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "requires": {
             "is-accessor-descriptor": "^1.0.0",
             "is-data-descriptor": "^1.0.0",
@@ -6433,15 +6039,15 @@
           }
         },
         "kind-of": {
-          "version": "6.0.2",
-          "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz",
-          "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE="
+          "version": "6.0.3",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
         }
       }
     },
     "defined": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/defined/download/defined-1.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
       "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
     },
     "del": {
@@ -6484,14 +6090,14 @@
     },
     "delayed-stream": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
       "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
       "dev": true
     },
     "delegate": {
       "version": "3.2.0",
-      "resolved": "http://registry.npm.taobao.org/delegate/download/delegate-3.2.0.tgz",
-      "integrity": "sha1-tmtxwxWFIuirV0T3INjKDCr1kWY="
+      "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
+      "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
     },
     "depd": {
       "version": "1.1.2",
@@ -6500,9 +6106,9 @@
       "dev": true
     },
     "des.js": {
-      "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/des.js/download/des.js-1.0.0.tgz",
-      "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
+      "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
       "requires": {
         "inherits": "^2.0.1",
         "minimalistic-assert": "^1.0.0"
@@ -6514,9 +6120,14 @@
       "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
       "dev": true
     },
+    "detect-browser": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.2.0.tgz",
+      "integrity": "sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA=="
+    },
     "detect-indent": {
       "version": "4.0.0",
-      "resolved": "http://registry.npm.taobao.org/detect-indent/download/detect-indent-4.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
       "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
       "dev": true,
       "requires": {
@@ -6543,12 +6154,19 @@
     },
     "diffie-hellman": {
       "version": "5.0.3",
-      "resolved": "http://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz",
-      "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=",
+      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+      "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
       "requires": {
         "bn.js": "^4.1.0",
         "miller-rabin": "^4.0.0",
         "randombytes": "^2.0.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+        }
       }
     },
     "dir-glob": {
@@ -6596,9 +6214,9 @@
       }
     },
     "dom-align": {
-      "version": "1.8.3",
-      "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.8.3.tgz",
-      "integrity": "sha512-thE1qB8mvtRZgwN4+IGFz1rv7zVsr08c2/IEYtOJIeTzW4YDadIOd5nQ4BpiiAvUWg55xTeGq7zLTDxDYWDrnw=="
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.0.tgz",
+      "integrity": "sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA=="
     },
     "dom-closest": {
       "version": "0.2.0",
@@ -6619,8 +6237,8 @@
     },
     "dom-event-types": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/dom-event-types/download/dom-event-types-1.0.0.tgz",
-      "integrity": "sha1-WDCgop4b+Df+UKcM2ApZcjKBPK4=",
+      "resolved": "https://registry.npmjs.org/dom-event-types/-/dom-event-types-1.0.0.tgz",
+      "integrity": "sha512-2G2Vwi2zXTHBGqXHsJ4+ak/iP0N8Ar+G8a7LiD2oup5o4sQWytwqqrZu/O6hIMV0KMID2PL69OhpshLO0n7UJQ==",
       "dev": true
     },
     "dom-matches": {
@@ -6634,24 +6252,32 @@
       "integrity": "sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4="
     },
     "dom-serializer": {
-      "version": "0.1.1",
-      "resolved": "http://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.1.1.tgz",
-      "integrity": "sha1-HsQFnihLq+027sKUHUqXChic58A=",
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+      "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
       "dev": true,
       "requires": {
-        "domelementtype": "^1.3.0",
-        "entities": "^1.1.1"
+        "domelementtype": "^2.0.1",
+        "entities": "^2.0.0"
+      },
+      "dependencies": {
+        "domelementtype": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz",
+          "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==",
+          "dev": true
+        }
       }
     },
     "domain-browser": {
       "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz",
-      "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto="
+      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+      "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
     },
     "domelementtype": {
       "version": "1.3.1",
-      "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz",
-      "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+      "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
       "dev": true
     },
     "domexception": {
@@ -6665,8 +6291,8 @@
     },
     "domhandler": {
       "version": "2.4.2",
-      "resolved": "http://registry.npm.taobao.org/domhandler/download/domhandler-2.4.2.tgz",
-      "integrity": "sha1-iAUJfpM9ZehVRvcm1g9euItE+AM=",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
       "dev": true,
       "requires": {
         "domelementtype": "1"
@@ -6674,8 +6300,8 @@
     },
     "domutils": {
       "version": "1.7.0",
-      "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.7.0.tgz",
-      "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+      "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
       "dev": true,
       "requires": {
         "dom-serializer": "0",
@@ -6683,12 +6309,12 @@
       }
     },
     "dot-prop": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
-      "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
+      "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
       "dev": true,
       "requires": {
-        "is-obj": "^1.0.0"
+        "is-obj": "^2.0.0"
       }
     },
     "dotenv": {
@@ -6703,16 +6329,24 @@
       "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
       "dev": true
     },
+    "dotignore": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz",
+      "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==",
+      "requires": {
+        "minimatch": "^3.0.4"
+      }
+    },
     "duplexer": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
-      "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
+      "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
       "dev": true
     },
     "duplexify": {
       "version": "3.7.1",
-      "resolved": "http://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz",
-      "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=",
+      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
       "requires": {
         "end-of-stream": "^1.0.0",
         "inherits": "^2.0.1",
@@ -6721,14 +6355,14 @@
       }
     },
     "easy-stack": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.0.tgz",
-      "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz",
+      "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==",
       "dev": true
     },
     "ecc-jsbn": {
       "version": "0.1.2",
-      "resolved": "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz",
+      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
       "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
       "dev": true,
       "requires": {
@@ -6773,20 +6407,20 @@
       "dev": true
     },
     "ejs": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz",
-      "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==",
+      "version": "2.7.4",
+      "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz",
+      "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==",
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.3.124",
-      "resolved": "http://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.124.tgz",
-      "integrity": "sha1-hh/AFIdIoRs+XM69+LeV/1E/oR8="
+      "version": "1.3.610",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.610.tgz",
+      "integrity": "sha512-eFDC+yVQpEhtlapk4CYDPfV9ajF9cEof5TBcO49L1ETO+aYogrKWDmYpZyxBScMNe8Bo/gJamH4amQ4yyvXg4g=="
     },
     "elliptic": {
-      "version": "6.4.1",
-      "resolved": "http://registry.npm.taobao.org/elliptic/download/elliptic-6.4.1.tgz",
-      "integrity": "sha1-wtC3d2kRuGcixjLDwGxg8vgZk5o=",
+      "version": "6.5.3",
+      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
+      "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
       "requires": {
         "bn.js": "^4.4.0",
         "brorand": "^1.0.1",
@@ -6795,18 +6429,25 @@
         "inherits": "^2.0.1",
         "minimalistic-assert": "^1.0.0",
         "minimalistic-crypto-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+        }
       }
     },
     "emoji-regex": {
-      "version": "7.0.3",
-      "resolved": "http://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz",
-      "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
       "dev": true
     },
     "emojis-list": {
-      "version": "2.1.0",
-      "resolved": "http://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz",
-      "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+      "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
     },
     "encodeurl": {
       "version": "1.0.2",
@@ -6815,92 +6456,139 @@
       "dev": true
     },
     "encoding": {
-      "version": "0.1.12",
-      "resolved": "http://registry.npm.taobao.org/encoding/download/encoding-0.1.12.tgz",
-      "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+      "version": "0.1.13",
+      "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+      "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
       "dev": true,
       "requires": {
-        "iconv-lite": "~0.4.13"
+        "iconv-lite": "^0.6.2"
+      },
+      "dependencies": {
+        "iconv-lite": {
+          "version": "0.6.2",
+          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz",
+          "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==",
+          "dev": true,
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3.0.0"
+          }
+        }
       }
     },
     "end-of-stream": {
-      "version": "1.4.1",
-      "resolved": "http://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.1.tgz",
-      "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=",
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
       "requires": {
         "once": "^1.4.0"
       }
     },
     "enhanced-resolve": {
-      "version": "4.1.0",
-      "resolved": "http://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.1.0.tgz",
-      "integrity": "sha1-Qcfgv9/nSsH/4eV61qXGyfN0Kn8=",
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz",
+      "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==",
       "requires": {
         "graceful-fs": "^4.1.2",
-        "memory-fs": "^0.4.0",
+        "memory-fs": "^0.5.0",
         "tapable": "^1.0.0"
+      },
+      "dependencies": {
+        "memory-fs": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
+          "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
+          "requires": {
+            "errno": "^0.1.3",
+            "readable-stream": "^2.0.1"
+          }
+        }
       }
     },
     "enquire.js": {
       "version": "2.1.6",
-      "resolved": "http://registry.npm.taobao.org/enquire.js/download/enquire.js-2.1.6.tgz",
+      "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz",
       "integrity": "sha1-PoeAybi4NQhMP2DhZtvDwqPImBQ="
     },
     "entities": {
-      "version": "1.1.2",
-      "resolved": "http://registry.npm.taobao.org/entities/download/entities-1.1.2.tgz",
-      "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
+      "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
       "dev": true
     },
     "errno": {
       "version": "0.1.7",
-      "resolved": "http://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz",
-      "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=",
+      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+      "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
       "requires": {
         "prr": "~1.0.1"
       }
     },
     "error-ex": {
       "version": "1.3.2",
-      "resolved": "http://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz",
-      "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=",
+      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
       "dev": true,
       "requires": {
         "is-arrayish": "^0.2.1"
       }
     },
     "error-stack-parser": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz",
-      "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==",
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz",
+      "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==",
       "dev": true,
       "requires": {
-        "stackframe": "^1.0.4"
+        "stackframe": "^1.1.1"
       }
     },
     "es-abstract": {
-      "version": "1.13.0",
-      "resolved": "http://registry.npm.taobao.org/es-abstract/download/es-abstract-1.13.0.tgz",
-      "integrity": "sha1-rIYUX91QmdjdSVWMy6Lq+biOJOk=",
+      "version": "1.17.7",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
+      "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
       "requires": {
-        "es-to-primitive": "^1.2.0",
+        "es-to-primitive": "^1.2.1",
         "function-bind": "^1.1.1",
         "has": "^1.0.3",
-        "is-callable": "^1.1.4",
-        "is-regex": "^1.0.4",
-        "object-keys": "^1.0.12"
+        "has-symbols": "^1.0.1",
+        "is-callable": "^1.2.2",
+        "is-regex": "^1.1.1",
+        "object-inspect": "^1.8.0",
+        "object-keys": "^1.1.1",
+        "object.assign": "^4.1.1",
+        "string.prototype.trimend": "^1.0.1",
+        "string.prototype.trimstart": "^1.0.1"
+      },
+      "dependencies": {
+        "is-regex": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+          "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+          "requires": {
+            "has-symbols": "^1.0.1"
+          }
+        },
+        "object-inspect": {
+          "version": "1.8.0",
+          "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+          "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA=="
+        }
       }
     },
     "es-to-primitive": {
-      "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.0.tgz",
-      "integrity": "sha1-7fckeAM0VujdqO8J4ArZZQcH83c=",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
       "requires": {
         "is-callable": "^1.1.4",
         "is-date-object": "^1.0.1",
         "is-symbol": "^1.0.2"
       }
     },
+    "escalade": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+    },
     "escape-html": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -6909,28 +6597,22 @@
     },
     "escape-string-regexp": {
       "version": "1.0.5",
-      "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
       "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
     },
     "escodegen": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz",
-      "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==",
+      "version": "1.14.3",
+      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
+      "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
       "dev": true,
       "requires": {
-        "esprima": "^3.1.3",
+        "esprima": "^4.0.1",
         "estraverse": "^4.2.0",
         "esutils": "^2.0.2",
         "optionator": "^0.8.1",
         "source-map": "~0.6.1"
       },
       "dependencies": {
-        "esprima": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
-          "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
-          "dev": true
-        },
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -6942,8 +6624,8 @@
     },
     "eslint": {
       "version": "5.16.0",
-      "resolved": "http://registry.npm.taobao.org/eslint/download/eslint-5.16.0.tgz",
-      "integrity": "sha1-oeOsGq5KP72Clvz496tzFMu2q+o=",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
+      "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
@@ -6985,21 +6667,21 @@
       },
       "dependencies": {
         "acorn-jsx": {
-          "version": "5.0.1",
-          "resolved": "http://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.0.1.tgz",
-          "integrity": "sha1-MqBk/ZJUKSFqCbFBECv90YX65A4=",
+          "version": "5.3.1",
+          "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
+          "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
           "dev": true
         },
         "ansi-regex": {
           "version": "4.1.0",
-          "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz",
-          "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         },
         "ansi-styles": {
           "version": "3.2.1",
-          "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz",
-          "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
           "dev": true,
           "requires": {
             "color-convert": "^1.9.0"
@@ -7007,8 +6689,8 @@
         },
         "chalk": {
           "version": "2.4.2",
-          "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz",
-          "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
           "dev": true,
           "requires": {
             "ansi-styles": "^3.2.1",
@@ -7018,32 +6700,38 @@
         },
         "chardet": {
           "version": "0.7.0",
-          "resolved": "http://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz",
-          "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=",
+          "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+          "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
           "dev": true
         },
         "debug": {
-          "version": "4.1.1",
-          "resolved": "http://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
-          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+          "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
           "dev": true,
           "requires": {
-            "ms": "^2.1.1"
+            "ms": "2.1.2"
           }
         },
         "doctrine": {
           "version": "3.0.0",
-          "resolved": "http://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz",
-          "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=",
+          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+          "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
           "dev": true,
           "requires": {
             "esutils": "^2.0.2"
           }
         },
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+          "dev": true
+        },
         "espree": {
           "version": "5.0.1",
-          "resolved": "http://registry.npm.taobao.org/espree/download/espree-5.0.1.tgz",
-          "integrity": "sha1-XWUm+k/H8HiKXPdbFfMDI+L4H3o=",
+          "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
+          "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
           "dev": true,
           "requires": {
             "acorn": "^6.0.7",
@@ -7052,9 +6740,9 @@
           }
         },
         "external-editor": {
-          "version": "3.0.3",
-          "resolved": "http://registry.npm.taobao.org/external-editor/download/external-editor-3.0.3.tgz",
-          "integrity": "sha1-WGbbKal4Jtvkvzr9JAcOrZ6kOic=",
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+          "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
           "dev": true,
           "requires": {
             "chardet": "^0.7.0",
@@ -7064,8 +6752,8 @@
         },
         "file-entry-cache": {
           "version": "5.0.1",
-          "resolved": "http://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz",
-          "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=",
+          "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+          "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
           "dev": true,
           "requires": {
             "flat-cache": "^2.0.1"
@@ -7073,8 +6761,8 @@
         },
         "flat-cache": {
           "version": "2.0.1",
-          "resolved": "http://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz",
-          "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=",
+          "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+          "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
           "dev": true,
           "requires": {
             "flatted": "^2.0.0",
@@ -7084,14 +6772,14 @@
         },
         "ignore": {
           "version": "4.0.6",
-          "resolved": "http://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz",
-          "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
+          "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+          "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
           "dev": true
         },
         "import-fresh": {
-          "version": "3.0.0",
-          "resolved": "http://registry.npm.taobao.org/import-fresh/download/import-fresh-3.0.0.tgz",
-          "integrity": "sha1-o9iX9CDKsOZxI2iX91vBS0iFw5A=",
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz",
+          "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==",
           "dev": true,
           "requires": {
             "parent-module": "^1.0.0",
@@ -7099,9 +6787,9 @@
           }
         },
         "inquirer": {
-          "version": "6.3.1",
-          "resolved": "http://registry.npm.taobao.org/inquirer/download/inquirer-6.3.1.tgz",
-          "integrity": "sha1-ekE7XnlQgRATo9tJHGHR87d26Oc=",
+          "version": "6.5.2",
+          "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
+          "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
           "dev": true,
           "requires": {
             "ansi-escapes": "^3.2.0",
@@ -7110,7 +6798,7 @@
             "cli-width": "^2.0.0",
             "external-editor": "^3.0.3",
             "figures": "^2.0.0",
-            "lodash": "^4.17.11",
+            "lodash": "^4.17.12",
             "mute-stream": "0.0.7",
             "run-async": "^2.2.0",
             "rxjs": "^6.4.0",
@@ -7121,8 +6809,8 @@
           "dependencies": {
             "strip-ansi": {
               "version": "5.2.0",
-              "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz",
-              "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+              "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
               "dev": true,
               "requires": {
                 "ansi-regex": "^4.1.0"
@@ -7130,22 +6818,37 @@
             }
           }
         },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
+        },
         "regexpp": {
           "version": "2.0.1",
-          "resolved": "http://registry.npm.taobao.org/regexpp/download/regexpp-2.0.1.tgz",
-          "integrity": "sha1-jRnTHPYySCtYkEn4KB+T28uk0H8=",
+          "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+          "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
           "dev": true
         },
         "resolve-from": {
           "version": "4.0.0",
-          "resolved": "http://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz",
-          "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+          "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
           "dev": true
         },
+        "rimraf": {
+          "version": "2.6.3",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+          "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        },
         "slice-ansi": {
           "version": "2.1.0",
-          "resolved": "http://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz",
-          "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=",
+          "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+          "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
           "dev": true,
           "requires": {
             "ansi-styles": "^3.2.0",
@@ -7155,7 +6858,7 @@
         },
         "strip-ansi": {
           "version": "4.0.0",
-          "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
           "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
           "dev": true,
           "requires": {
@@ -7164,7 +6867,7 @@
           "dependencies": {
             "ansi-regex": {
               "version": "3.0.0",
-              "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz",
+              "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
               "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
               "dev": true
             }
@@ -7172,29 +6875,29 @@
         },
         "supports-color": {
           "version": "5.5.0",
-          "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz",
-          "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+          "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
           "dev": true,
           "requires": {
             "has-flag": "^3.0.0"
           }
         },
         "table": {
-          "version": "5.2.3",
-          "resolved": "http://registry.npm.taobao.org/table/download/table-5.2.3.tgz",
-          "integrity": "sha1-zeDMbrBnUcAJ76sn6Mggyltnt/I=",
+          "version": "5.4.6",
+          "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+          "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
           "dev": true,
           "requires": {
-            "ajv": "^6.9.1",
-            "lodash": "^4.17.11",
+            "ajv": "^6.10.2",
+            "lodash": "^4.17.14",
             "slice-ansi": "^2.1.0",
             "string-width": "^3.0.0"
           },
           "dependencies": {
             "string-width": {
               "version": "3.1.0",
-              "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz",
-              "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+              "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+              "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
               "dev": true,
               "requires": {
                 "emoji-regex": "^7.0.1",
@@ -7204,8 +6907,8 @@
             },
             "strip-ansi": {
               "version": "5.2.0",
-              "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz",
-              "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+              "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
               "dev": true,
               "requires": {
                 "ansi-regex": "^4.1.0"
@@ -7215,8 +6918,8 @@
         },
         "write": {
           "version": "1.0.3",
-          "resolved": "http://registry.npm.taobao.org/write/download/write-1.0.3.tgz",
-          "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=",
+          "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+          "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
           "dev": true,
           "requires": {
             "mkdirp": "^0.5.1"
@@ -7226,41 +6929,35 @@
     },
     "eslint-config-standard": {
       "version": "12.0.0",
-      "resolved": "http://registry.npm.taobao.org/eslint-config-standard/download/eslint-config-standard-12.0.0.tgz",
-      "integrity": "sha1-Y4tMZdsL1aQTGflruh8V3a0hB9k=",
+      "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz",
+      "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==",
       "dev": true
     },
     "eslint-import-resolver-node": {
-      "version": "0.3.2",
-      "resolved": "http://registry.npm.taobao.org/eslint-import-resolver-node/download/eslint-import-resolver-node-0.3.2.tgz",
-      "integrity": "sha1-WPFfuDm40FdsqYBBNHaqskcttmo=",
+      "version": "0.3.4",
+      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz",
+      "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==",
       "dev": true,
       "requires": {
         "debug": "^2.6.9",
-        "resolve": "^1.5.0"
+        "resolve": "^1.13.1"
       },
       "dependencies": {
         "debug": {
           "version": "2.6.9",
-          "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
-          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
           "dev": true,
           "requires": {
             "ms": "2.0.0"
           }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
         }
       }
     },
     "eslint-loader": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.2.tgz",
-      "integrity": "sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg==",
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz",
+      "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==",
       "dev": true,
       "requires": {
         "loader-fs-cache": "^1.0.0",
@@ -7271,19 +6968,19 @@
       }
     },
     "eslint-module-utils": {
-      "version": "2.4.0",
-      "resolved": "http://registry.npm.taobao.org/eslint-module-utils/download/eslint-module-utils-2.4.0.tgz",
-      "integrity": "sha1-i5NJnpsA6rgMy2YU5p8DZ46E4Jo=",
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz",
+      "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==",
       "dev": true,
       "requires": {
-        "debug": "^2.6.8",
+        "debug": "^2.6.9",
         "pkg-dir": "^2.0.0"
       },
       "dependencies": {
         "debug": {
           "version": "2.6.9",
-          "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
-          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
           "dev": true,
           "requires": {
             "ms": "2.0.0"
@@ -7291,7 +6988,7 @@
         },
         "find-up": {
           "version": "2.1.0",
-          "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
           "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
           "dev": true,
           "requires": {
@@ -7300,7 +6997,7 @@
         },
         "locate-path": {
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
           "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
           "dev": true,
           "requires": {
@@ -7308,16 +7005,10 @@
             "path-exists": "^3.0.0"
           }
         },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
-        },
         "p-limit": {
           "version": "1.3.0",
-          "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz",
-          "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
           "dev": true,
           "requires": {
             "p-try": "^1.0.0"
@@ -7325,7 +7016,7 @@
         },
         "p-locate": {
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
           "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
           "dev": true,
           "requires": {
@@ -7334,13 +7025,19 @@
         },
         "p-try": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
           "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
           "dev": true
         },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
+        },
         "pkg-dir": {
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
           "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
           "dev": true,
           "requires": {
@@ -7350,55 +7047,57 @@
       }
     },
     "eslint-plugin-es": {
-      "version": "1.4.0",
-      "resolved": "http://registry.npm.taobao.org/eslint-plugin-es/download/eslint-plugin-es-1.4.0.tgz",
-      "integrity": "sha1-R19luyDJk/wQ6Mj+d9HWAGgHLaY=",
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz",
+      "integrity": "sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==",
       "dev": true,
       "requires": {
-        "eslint-utils": "^1.3.0",
+        "eslint-utils": "^1.4.2",
         "regexpp": "^2.0.1"
       },
       "dependencies": {
         "regexpp": {
           "version": "2.0.1",
-          "resolved": "http://registry.npm.taobao.org/regexpp/download/regexpp-2.0.1.tgz",
-          "integrity": "sha1-jRnTHPYySCtYkEn4KB+T28uk0H8=",
+          "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+          "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
           "dev": true
         }
       }
     },
     "eslint-plugin-html": {
-      "version": "5.0.3",
-      "resolved": "http://registry.npm.taobao.org/eslint-plugin-html/download/eslint-plugin-html-5.0.3.tgz",
-      "integrity": "sha1-PbEzmV5JpzWW9qRzwWobg2NN7/0=",
+      "version": "5.0.5",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-5.0.5.tgz",
+      "integrity": "sha512-v/33i3OD0fuXcRXexVyXXBOe4mLBLBQoF1UO1Uy9D+XLq4MC8K45GcQKfqjC/FnHAHp3pYUjpHHktYNCtShGmg==",
       "dev": true,
       "requires": {
         "htmlparser2": "^3.10.0"
       }
     },
     "eslint-plugin-import": {
-      "version": "2.17.2",
-      "resolved": "http://registry.npm.taobao.org/eslint-plugin-import/download/eslint-plugin-import-2.17.2.tgz",
-      "integrity": "sha1-0ifVxtxn7KcetZDSu2L7ONhun8s=",
+      "version": "2.22.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz",
+      "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==",
       "dev": true,
       "requires": {
-        "array-includes": "^3.0.3",
+        "array-includes": "^3.1.1",
+        "array.prototype.flat": "^1.2.3",
         "contains-path": "^0.1.0",
         "debug": "^2.6.9",
         "doctrine": "1.5.0",
-        "eslint-import-resolver-node": "^0.3.2",
-        "eslint-module-utils": "^2.4.0",
+        "eslint-import-resolver-node": "^0.3.4",
+        "eslint-module-utils": "^2.6.0",
         "has": "^1.0.3",
-        "lodash": "^4.17.11",
         "minimatch": "^3.0.4",
+        "object.values": "^1.1.1",
         "read-pkg-up": "^2.0.0",
-        "resolve": "^1.10.0"
+        "resolve": "^1.17.0",
+        "tsconfig-paths": "^3.9.0"
       },
       "dependencies": {
         "debug": {
           "version": "2.6.9",
-          "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
-          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
           "dev": true,
           "requires": {
             "ms": "2.0.0"
@@ -7406,7 +7105,7 @@
         },
         "doctrine": {
           "version": "1.5.0",
-          "resolved": "http://registry.npm.taobao.org/doctrine/download/doctrine-1.5.0.tgz",
+          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
           "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
           "dev": true,
           "requires": {
@@ -7416,7 +7115,7 @@
         },
         "find-up": {
           "version": "2.1.0",
-          "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
           "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
           "dev": true,
           "requires": {
@@ -7425,13 +7124,13 @@
         },
         "isarray": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
           "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
           "dev": true
         },
         "load-json-file": {
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/load-json-file/download/load-json-file-2.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
           "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
           "dev": true,
           "requires": {
@@ -7443,7 +7142,7 @@
         },
         "locate-path": {
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
           "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
           "dev": true,
           "requires": {
@@ -7451,16 +7150,10 @@
             "path-exists": "^3.0.0"
           }
         },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
-        },
         "p-limit": {
           "version": "1.3.0",
-          "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz",
-          "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
           "dev": true,
           "requires": {
             "p-try": "^1.0.0"
@@ -7468,7 +7161,7 @@
         },
         "p-locate": {
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
           "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
           "dev": true,
           "requires": {
@@ -7477,13 +7170,19 @@
         },
         "p-try": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
           "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
           "dev": true
         },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
+        },
         "path-type": {
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/path-type/download/path-type-2.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
           "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
           "dev": true,
           "requires": {
@@ -7492,13 +7191,13 @@
         },
         "pify": {
           "version": "2.3.0",
-          "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
           "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
           "dev": true
         },
         "read-pkg": {
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/read-pkg/download/read-pkg-2.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
           "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
           "dev": true,
           "requires": {
@@ -7509,7 +7208,7 @@
         },
         "read-pkg-up": {
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
           "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
           "dev": true,
           "requires": {
@@ -7519,7 +7218,7 @@
         },
         "strip-bom": {
           "version": "3.0.0",
-          "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
           "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
           "dev": true
         }
@@ -7527,8 +7226,8 @@
     },
     "eslint-plugin-node": {
       "version": "8.0.1",
-      "resolved": "http://registry.npm.taobao.org/eslint-plugin-node/download/eslint-plugin-node-8.0.1.tgz",
-      "integrity": "sha1-Va41YAIoY9FB+noReZUyNApoWWQ=",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz",
+      "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==",
       "dev": true,
       "requires": {
         "eslint-plugin-es": "^1.3.1",
@@ -7540,53 +7239,53 @@
       },
       "dependencies": {
         "ignore": {
-          "version": "5.1.1",
-          "resolved": "http://registry.npm.taobao.org/ignore/download/ignore-5.1.1.tgz",
-          "integrity": "sha1-L8a49Riv9I/vZafzSO2FYyRI5KU=",
+          "version": "5.1.8",
+          "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
+          "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
           "dev": true
         }
       }
     },
     "eslint-plugin-promise": {
-      "version": "4.1.1",
-      "resolved": "http://registry.npm.taobao.org/eslint-plugin-promise/download/eslint-plugin-promise-4.1.1.tgz",
-      "integrity": "sha1-HgjLaLWyzYg5+NWGTHlvVtgnRts=",
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz",
+      "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==",
       "dev": true
     },
     "eslint-plugin-standard": {
-      "version": "4.0.0",
-      "resolved": "http://registry.npm.taobao.org/eslint-plugin-standard/download/eslint-plugin-standard-4.0.0.tgz",
-      "integrity": "sha1-+EW0UQnJnNkOd3lpQKNEVGyPa1w=",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz",
+      "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==",
       "dev": true
     },
     "eslint-plugin-vue": {
-      "version": "5.2.2",
-      "resolved": "http://registry.npm.taobao.org/eslint-plugin-vue/download/eslint-plugin-vue-5.2.2.tgz",
-      "integrity": "sha1-hmAYI7dyG3C8ktVPFyjPwDs2KDw=",
+      "version": "5.2.3",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz",
+      "integrity": "sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw==",
       "dev": true,
       "requires": {
         "vue-eslint-parser": "^5.0.0"
       },
       "dependencies": {
         "acorn-jsx": {
-          "version": "5.0.1",
-          "resolved": "http://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.0.1.tgz",
-          "integrity": "sha1-MqBk/ZJUKSFqCbFBECv90YX65A4=",
+          "version": "5.3.1",
+          "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
+          "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
           "dev": true
         },
         "debug": {
-          "version": "4.1.1",
-          "resolved": "http://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
-          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+          "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
           "dev": true,
           "requires": {
-            "ms": "^2.1.1"
+            "ms": "2.1.2"
           }
         },
         "espree": {
           "version": "4.1.0",
-          "resolved": "http://registry.npm.taobao.org/espree/download/espree-4.1.0.tgz",
-          "integrity": "sha1-co1UUeD9FWwEOEp62J7VH/VOsl8=",
+          "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz",
+          "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==",
           "dev": true,
           "requires": {
             "acorn": "^6.0.2",
@@ -7594,10 +7293,16 @@
             "eslint-visitor-keys": "^1.0.0"
           }
         },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
+        },
         "vue-eslint-parser": {
           "version": "5.0.0",
-          "resolved": "http://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-5.0.0.tgz",
-          "integrity": "sha1-APTk2pTsl0uCGib/DtD3p4QCuKE=",
+          "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz",
+          "integrity": "sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==",
           "dev": true,
           "requires": {
             "debug": "^4.1.0",
@@ -7612,23 +7317,26 @@
     },
     "eslint-scope": {
       "version": "4.0.3",
-      "resolved": "http://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz",
-      "integrity": "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg=",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+      "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
       "requires": {
         "esrecurse": "^4.1.0",
         "estraverse": "^4.1.1"
       }
     },
     "eslint-utils": {
-      "version": "1.3.1",
-      "resolved": "http://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.3.1.tgz",
-      "integrity": "sha1-moUbqJ7nxGA0b5fPiTnHKYgn5RI=",
-      "dev": true
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
+      "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+      "dev": true,
+      "requires": {
+        "eslint-visitor-keys": "^1.1.0"
+      }
     },
     "eslint-visitor-keys": {
-      "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.0.0.tgz",
-      "integrity": "sha1-PzGA+y4pEBdxastMnW1bXDSmqB0=",
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+      "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
       "dev": true
     },
     "espree": {
@@ -7643,9 +7351,9 @@
       },
       "dependencies": {
         "acorn": {
-          "version": "5.7.3",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
-          "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+          "version": "5.7.4",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
+          "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
           "dev": true,
           "optional": true
         }
@@ -7653,36 +7361,51 @@
     },
     "esprima": {
       "version": "4.0.1",
-      "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz",
-      "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
       "dev": true
     },
     "esquery": {
-      "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/esquery/download/esquery-1.0.1.tgz",
-      "integrity": "sha1-QGxRZYsfWZGl+bYrHcJbAOPlxwg=",
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
+      "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
       "dev": true,
       "requires": {
-        "estraverse": "^4.0.0"
+        "estraverse": "^5.1.0"
+      },
+      "dependencies": {
+        "estraverse": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+          "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+          "dev": true
+        }
       }
     },
     "esrecurse": {
-      "version": "4.2.1",
-      "resolved": "http://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz",
-      "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=",
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
       "requires": {
-        "estraverse": "^4.1.0"
+        "estraverse": "^5.2.0"
+      },
+      "dependencies": {
+        "estraverse": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+          "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="
+        }
       }
     },
     "estraverse": {
-      "version": "4.2.0",
-      "resolved": "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz",
-      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
     },
     "esutils": {
-      "version": "2.0.2",
-      "resolved": "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz",
-      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
     },
     "etag": {
       "version": "1.8.1",
@@ -7697,15 +7420,14 @@
       "dev": true
     },
     "eventemitter3": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz",
-      "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==",
-      "dev": true
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz",
+      "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo="
     },
     "events": {
-      "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/events/download/events-3.0.0.tgz",
-      "integrity": "sha1-mgoN+vYok9krh1uPJpjKQRSXPog="
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
+      "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg=="
     },
     "eventsource": {
       "version": "1.0.7",
@@ -7718,8 +7440,8 @@
     },
     "evp_bytestokey": {
       "version": "1.0.3",
-      "resolved": "http://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz",
-      "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
+      "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+      "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
       "requires": {
         "md5.js": "^1.3.4",
         "safe-buffer": "^5.1.1"
@@ -7757,7 +7479,7 @@
     },
     "expand-brackets": {
       "version": "2.1.4",
-      "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz",
+      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
       "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
       "requires": {
         "debug": "^2.3.3",
@@ -7771,15 +7493,15 @@
       "dependencies": {
         "debug": {
           "version": "2.6.9",
-          "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
-          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
           "requires": {
             "ms": "2.0.0"
           }
         },
         "define-property": {
           "version": "0.2.5",
-          "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "requires": {
             "is-descriptor": "^0.1.0"
@@ -7787,22 +7509,17 @@
         },
         "extend-shallow": {
           "version": "2.0.1",
-          "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "requires": {
             "is-extendable": "^0.1.0"
           }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
         }
       }
     },
     "expand-range": {
       "version": "1.8.2",
-      "resolved": "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz",
+      "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
       "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
       "dev": true,
       "requires": {
@@ -7811,8 +7528,8 @@
       "dependencies": {
         "fill-range": {
           "version": "2.2.4",
-          "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.4.tgz",
-          "integrity": "sha1-6x53OrsFbc2N8r/favWbizqTZWU=",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+          "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
           "dev": true,
           "requires": {
             "is-number": "^2.1.0",
@@ -7824,7 +7541,7 @@
         },
         "is-number": {
           "version": "2.1.0",
-          "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
           "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
           "dev": true,
           "requires": {
@@ -7833,13 +7550,13 @@
         },
         "isarray": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
           "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
           "dev": true
         },
         "isobject": {
           "version": "2.1.0",
-          "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
           "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
           "dev": true,
           "requires": {
@@ -7920,12 +7637,6 @@
             "ms": "2.0.0"
           }
         },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
-        },
         "qs": {
           "version": "6.7.0",
           "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
@@ -7936,12 +7647,12 @@
     },
     "extend": {
       "version": "3.0.2",
-      "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz",
-      "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo="
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
     },
     "extend-shallow": {
       "version": "3.0.2",
-      "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
       "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
       "requires": {
         "assign-symbols": "^1.0.0",
@@ -7950,8 +7661,8 @@
       "dependencies": {
         "is-extendable": {
           "version": "1.0.1",
-          "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz",
-          "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
           "requires": {
             "is-plain-object": "^2.0.4"
           }
@@ -7960,8 +7671,8 @@
     },
     "external-editor": {
       "version": "2.2.0",
-      "resolved": "http://registry.npm.taobao.org/external-editor/download/external-editor-2.2.0.tgz",
-      "integrity": "sha1-BFURz9jRM/OEZnPRBHwVTiFK09U=",
+      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+      "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
       "dev": true,
       "requires": {
         "chardet": "^0.4.0",
@@ -7971,8 +7682,8 @@
     },
     "extglob": {
       "version": "2.0.4",
-      "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz",
-      "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=",
+      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+      "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
       "requires": {
         "array-unique": "^0.3.2",
         "define-property": "^1.0.0",
@@ -7986,7 +7697,7 @@
       "dependencies": {
         "define-property": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
           "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
           "requires": {
             "is-descriptor": "^1.0.0"
@@ -7994,7 +7705,7 @@
         },
         "extend-shallow": {
           "version": "2.0.1",
-          "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "requires": {
             "is-extendable": "^0.1.0"
@@ -8002,24 +7713,24 @@
         },
         "is-accessor-descriptor": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "requires": {
             "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "requires": {
             "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
           "version": "1.0.2",
-          "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
-          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "requires": {
             "is-accessor-descriptor": "^1.0.0",
             "is-data-descriptor": "^1.0.0",
@@ -8027,9 +7738,9 @@
           }
         },
         "kind-of": {
-          "version": "6.0.2",
-          "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz",
-          "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE="
+          "version": "6.0.3",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
         }
       }
     },
@@ -8044,14 +7755,14 @@
     },
     "extsprintf": {
       "version": "1.3.0",
-      "resolved": "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz",
+      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
       "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
       "dev": true
     },
     "fast-deep-equal": {
-      "version": "2.0.1",
-      "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz",
-      "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
     },
     "fast-diff": {
       "version": "1.1.2",
@@ -8070,23 +7781,46 @@
         "is-glob": "^4.0.0",
         "merge2": "^1.2.3",
         "micromatch": "^3.1.10"
+      },
+      "dependencies": {
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "dev": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        }
       }
     },
     "fast-json-stable-stringify": {
-      "version": "2.0.0",
-      "resolved": "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz",
-      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
     },
     "fast-levenshtein": {
       "version": "2.0.6",
-      "resolved": "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz",
+      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
       "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
       "dev": true
     },
     "fastparse": {
       "version": "1.1.2",
-      "resolved": "http://registry.npm.taobao.org/fastparse/download/fastparse-1.1.2.tgz",
-      "integrity": "sha1-kXKMWllC7O2FMSg8eUQe5BIsNak="
+      "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
+      "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ=="
     },
     "faye-websocket": {
       "version": "0.10.0",
@@ -8098,27 +7832,27 @@
       }
     },
     "fb-watchman": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz",
-      "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
+      "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
       "dev": true,
       "requires": {
-        "bser": "^2.0.0"
+        "bser": "2.1.1"
       }
     },
     "fecha": {
       "version": "2.3.3",
-      "resolved": "http://registry.npm.taobao.org/fecha/download/fecha-2.3.3.tgz",
-      "integrity": "sha1-lI50FX3xoy/RsSw6PDzctuydls0="
+      "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz",
+      "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg=="
     },
     "figgy-pudding": {
-      "version": "3.5.1",
-      "resolved": "http://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.1.tgz",
-      "integrity": "sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A="
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
+      "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw=="
     },
     "figures": {
       "version": "2.0.0",
-      "resolved": "http://registry.npm.taobao.org/figures/download/figures-2.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
       "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
       "dev": true,
       "requires": {
@@ -8144,11 +7878,29 @@
       "requires": {
         "loader-utils": "^1.0.2",
         "schema-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
       }
     },
+    "file-uri-to-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
+    },
     "filename-regex": {
       "version": "2.0.1",
-      "resolved": "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
       "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
       "dev": true
     },
@@ -8170,7 +7922,7 @@
     },
     "fill-range": {
       "version": "4.0.0",
-      "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
       "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
       "requires": {
         "extend-shallow": "^2.0.1",
@@ -8181,7 +7933,7 @@
       "dependencies": {
         "extend-shallow": {
           "version": "2.0.1",
-          "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "requires": {
             "is-extendable": "^0.1.0"
@@ -8212,12 +7964,6 @@
           "requires": {
             "ms": "2.0.0"
           }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
         }
       }
     },
@@ -8236,25 +7982,32 @@
           "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
           "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
           "dev": true
+        },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
         }
       }
     },
     "find-cache-dir": {
-      "version": "2.1.0",
-      "resolved": "http://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz",
-      "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=",
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
+      "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
       "requires": {
         "commondir": "^1.0.1",
-        "make-dir": "^2.0.0",
-        "pkg-dir": "^3.0.0"
+        "make-dir": "^3.0.2",
+        "pkg-dir": "^4.1.0"
       }
     },
     "find-up": {
-      "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz",
-      "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
       "requires": {
-        "locate-path": "^3.0.0"
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
       }
     },
     "flat-cache": {
@@ -8268,18 +8021,30 @@
         "graceful-fs": "^4.1.2",
         "rimraf": "~2.6.2",
         "write": "^0.2.1"
+      },
+      "dependencies": {
+        "rimraf": {
+          "version": "2.6.3",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+          "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        }
       }
     },
     "flatted": {
-      "version": "2.0.0",
-      "resolved": "http://registry.npm.taobao.org/flatted/download/flatted-2.0.0.tgz",
-      "integrity": "sha1-VRIrZTbqSWtLRIk+4mCBQdENmRY=",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
+      "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
       "dev": true
     },
     "flush-write-stream": {
       "version": "1.1.1",
-      "resolved": "http://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz",
-      "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=",
+      "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+      "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
       "requires": {
         "inherits": "^2.0.3",
         "readable-stream": "^2.3.6"
@@ -8287,7 +8052,7 @@
     },
     "fmin": {
       "version": "0.0.2",
-      "resolved": "http://registry.npm.taobao.org/fmin/download/fmin-0.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/fmin/-/fmin-0.0.2.tgz",
       "integrity": "sha1-Wbu0DUP/3ByUzQClaMQflfGXMBc=",
       "requires": {
         "contour_plot": "^0.0.1",
@@ -8307,20 +8072,20 @@
     },
     "for-each": {
       "version": "0.3.3",
-      "resolved": "http://registry.npm.taobao.org/for-each/download/for-each-0.3.3.tgz",
-      "integrity": "sha1-abRH6IoKXTLD5whPPxcQA0shN24=",
+      "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+      "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
       "requires": {
         "is-callable": "^1.1.3"
       }
     },
     "for-in": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
       "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
     },
     "for-own": {
       "version": "0.1.5",
-      "resolved": "http://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz",
+      "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
       "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
       "dev": true,
       "requires": {
@@ -8329,14 +8094,14 @@
     },
     "forever-agent": {
       "version": "0.6.1",
-      "resolved": "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz",
+      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
       "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
       "dev": true
     },
     "form-data": {
       "version": "2.3.3",
-      "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz",
-      "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+      "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
       "dev": true,
       "requires": {
         "asynckit": "^0.4.0",
@@ -8352,7 +8117,7 @@
     },
     "fragment-cache": {
       "version": "0.2.1",
-      "resolved": "http://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz",
+      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
       "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
       "requires": {
         "map-cache": "^0.2.2"
@@ -8366,538 +8131,78 @@
     },
     "from2": {
       "version": "2.3.0",
-      "resolved": "http://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz",
+      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
       "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
-      "requires": {
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.0.0"
-      }
-    },
-    "fs-extra": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
-      "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "jsonfile": "^4.0.0",
-        "universalify": "^0.1.0"
-      }
-    },
-    "fs-write-stream-atomic": {
-      "version": "1.0.10",
-      "resolved": "http://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz",
-      "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "iferr": "^0.1.5",
-        "imurmurhash": "^0.1.4",
-        "readable-stream": "1 || 2"
-      }
-    },
-    "fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
-    },
-    "fsevents": {
-      "version": "1.2.8",
-      "resolved": "http://registry.npm.taobao.org/fsevents/download/fsevents-1.2.8.tgz",
-      "integrity": "sha1-V+pTIPdizUaW5ejocSDszIsRys8=",
-      "optional": true,
-      "requires": {
-        "nan": "^2.12.1",
-        "node-pre-gyp": "^0.12.0"
-      },
-      "dependencies": {
-        "abbrev": {
-          "version": "1.1.1",
-          "bundled": true,
-          "optional": true
-        },
-        "ansi-regex": {
-          "version": "2.1.1",
-          "bundled": true,
-          "optional": true
-        },
-        "aproba": {
-          "version": "1.2.0",
-          "bundled": true,
-          "optional": true
-        },
-        "are-we-there-yet": {
-          "version": "1.1.5",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "delegates": "^1.0.0",
-            "readable-stream": "^2.0.6"
-          }
-        },
-        "balanced-match": {
-          "version": "1.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "brace-expansion": {
-          "version": "1.1.11",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "balanced-match": "^1.0.0",
-            "concat-map": "0.0.1"
-          }
-        },
-        "chownr": {
-          "version": "1.1.1",
-          "bundled": true,
-          "optional": true
-        },
-        "code-point-at": {
-          "version": "1.1.0",
-          "bundled": true,
-          "optional": true
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "bundled": true,
-          "optional": true
-        },
-        "console-control-strings": {
-          "version": "1.1.0",
-          "bundled": true,
-          "optional": true
-        },
-        "core-util-is": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "debug": {
-          "version": "4.1.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "deep-extend": {
-          "version": "0.6.0",
-          "bundled": true,
-          "optional": true
-        },
-        "delegates": {
-          "version": "1.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "detect-libc": {
-          "version": "1.0.3",
-          "bundled": true,
-          "optional": true
-        },
-        "fs-minipass": {
-          "version": "1.2.5",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "minipass": "^2.2.1"
-          }
-        },
-        "fs.realpath": {
-          "version": "1.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "gauge": {
-          "version": "2.7.4",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "aproba": "^1.0.3",
-            "console-control-strings": "^1.0.0",
-            "has-unicode": "^2.0.0",
-            "object-assign": "^4.1.0",
-            "signal-exit": "^3.0.0",
-            "string-width": "^1.0.1",
-            "strip-ansi": "^3.0.1",
-            "wide-align": "^1.1.0"
-          }
-        },
-        "glob": {
-          "version": "7.1.3",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "has-unicode": {
-          "version": "2.0.1",
-          "bundled": true,
-          "optional": true
-        },
-        "iconv-lite": {
-          "version": "0.4.24",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "safer-buffer": ">= 2.1.2 < 3"
-          }
-        },
-        "ignore-walk": {
-          "version": "3.0.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "minimatch": "^3.0.4"
-          }
-        },
-        "inflight": {
-          "version": "1.0.6",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "once": "^1.3.0",
-            "wrappy": "1"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "bundled": true,
-          "optional": true
-        },
-        "ini": {
-          "version": "1.3.5",
-          "bundled": true,
-          "optional": true
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "number-is-nan": "^1.0.0"
-          }
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
-        "minimist": {
-          "version": "0.0.8",
-          "bundled": true,
-          "optional": true
-        },
-        "minipass": {
-          "version": "2.3.5",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "safe-buffer": "^5.1.2",
-            "yallist": "^3.0.0"
-          }
-        },
-        "minizlib": {
-          "version": "1.2.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "minipass": "^2.2.1"
-          }
-        },
-        "mkdirp": {
-          "version": "0.5.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "minimist": "0.0.8"
-          }
-        },
-        "ms": {
-          "version": "2.1.1",
-          "bundled": true,
-          "optional": true
-        },
-        "needle": {
-          "version": "2.3.0",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "debug": "^4.1.0",
-            "iconv-lite": "^0.4.4",
-            "sax": "^1.2.4"
-          }
-        },
-        "node-pre-gyp": {
-          "version": "0.12.0",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "detect-libc": "^1.0.2",
-            "mkdirp": "^0.5.1",
-            "needle": "^2.2.1",
-            "nopt": "^4.0.1",
-            "npm-packlist": "^1.1.6",
-            "npmlog": "^4.0.2",
-            "rc": "^1.2.7",
-            "rimraf": "^2.6.1",
-            "semver": "^5.3.0",
-            "tar": "^4"
-          }
-        },
-        "nopt": {
-          "version": "4.0.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "abbrev": "1",
-            "osenv": "^0.1.4"
-          }
-        },
-        "npm-bundled": {
-          "version": "1.0.6",
-          "bundled": true,
-          "optional": true
-        },
-        "npm-packlist": {
-          "version": "1.4.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "ignore-walk": "^3.0.1",
-            "npm-bundled": "^1.0.1"
-          }
-        },
-        "npmlog": {
-          "version": "4.1.2",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "are-we-there-yet": "~1.1.2",
-            "console-control-strings": "~1.1.0",
-            "gauge": "~2.7.3",
-            "set-blocking": "~2.0.0"
-          }
-        },
-        "number-is-nan": {
-          "version": "1.0.1",
-          "bundled": true,
-          "optional": true
-        },
-        "object-assign": {
-          "version": "4.1.1",
-          "bundled": true,
-          "optional": true
-        },
-        "once": {
-          "version": "1.4.0",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "wrappy": "1"
-          }
-        },
-        "os-homedir": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "os-tmpdir": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "osenv": {
-          "version": "0.1.5",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "os-homedir": "^1.0.0",
-            "os-tmpdir": "^1.0.0"
-          }
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "bundled": true,
-          "optional": true
-        },
-        "process-nextick-args": {
-          "version": "2.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "rc": {
-          "version": "1.2.8",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "deep-extend": "^0.6.0",
-            "ini": "~1.3.0",
-            "minimist": "^1.2.0",
-            "strip-json-comments": "~2.0.1"
-          },
-          "dependencies": {
-            "minimist": {
-              "version": "1.2.0",
-              "bundled": true,
-              "optional": true
-            }
-          }
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "bundled": true,
-          "optional": 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"
-          }
-        },
-        "rimraf": {
-          "version": "2.6.3",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "bundled": true,
-          "optional": true
-        },
-        "safer-buffer": {
-          "version": "2.1.2",
-          "bundled": true,
-          "optional": true
-        },
-        "sax": {
-          "version": "1.2.4",
-          "bundled": true,
-          "optional": true
-        },
-        "semver": {
-          "version": "5.7.0",
-          "bundled": true,
-          "optional": true
-        },
-        "set-blocking": {
-          "version": "2.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "signal-exit": {
-          "version": "3.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "string-width": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "code-point-at": "^1.0.0",
-            "is-fullwidth-code-point": "^1.0.0",
-            "strip-ansi": "^3.0.0"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "strip-json-comments": {
-          "version": "2.0.1",
-          "bundled": true,
-          "optional": true
-        },
-        "tar": {
-          "version": "4.4.8",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "chownr": "^1.1.1",
-            "fs-minipass": "^1.2.5",
-            "minipass": "^2.3.4",
-            "minizlib": "^1.1.1",
-            "mkdirp": "^0.5.0",
-            "safe-buffer": "^5.1.2",
-            "yallist": "^3.0.2"
-          }
-        },
-        "util-deprecate": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "wide-align": {
-          "version": "1.1.3",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "string-width": "^1.0.2 || 2"
-          }
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "yallist": {
-          "version": "3.0.3",
-          "bundled": true,
-          "optional": true
-        }
+      "requires": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "fs-extra": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+      "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "jsonfile": "^4.0.0",
+        "universalify": "^0.1.0"
+      }
+    },
+    "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": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "iferr": "^0.1.5",
+        "imurmurhash": "^0.1.4",
+        "readable-stream": "1 || 2"
       }
     },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+    },
+    "fsevents": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
+      "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+      "optional": true
+    },
     "function-bind": {
       "version": "1.1.1",
-      "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
-      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
     },
     "functional-red-black-tree": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
       "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
       "dev": true
     },
+    "gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
+    },
     "get-caller-file": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
       "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
       "dev": true
     },
+    "get-intrinsic": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz",
+      "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==",
+      "requires": {
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3",
+        "has-symbols": "^1.0.1"
+      }
+    },
     "get-stream": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
@@ -8909,12 +8214,12 @@
     },
     "get-value": {
       "version": "2.0.6",
-      "resolved": "http://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz",
+      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
       "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
     },
     "getpass": {
       "version": "0.1.7",
-      "resolved": "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz",
+      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
       "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
       "dev": true,
       "requires": {
@@ -8922,9 +8227,9 @@
       }
     },
     "glob": {
-      "version": "7.1.3",
-      "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.3.tgz",
-      "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=",
+      "version": "7.1.6",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+      "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
       "requires": {
         "fs.realpath": "^1.0.0",
         "inflight": "^1.0.4",
@@ -8936,7 +8241,7 @@
     },
     "glob-base": {
       "version": "0.3.0",
-      "resolved": "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz",
+      "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
       "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
       "dev": true,
       "requires": {
@@ -8946,7 +8251,7 @@
       "dependencies": {
         "glob-parent": {
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
           "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
           "dev": true,
           "requires": {
@@ -8955,13 +8260,13 @@
         },
         "is-extglob": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
           "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
           "dev": true
         },
         "is-glob": {
           "version": "2.0.1",
-          "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
           "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
           "dev": true,
           "requires": {
@@ -8971,22 +8276,12 @@
       }
     },
     "glob-parent": {
-      "version": "3.1.0",
-      "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz",
-      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+      "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+      "optional": true,
       "requires": {
-        "is-glob": "^3.1.0",
-        "path-dirname": "^1.0.0"
-      },
-      "dependencies": {
-        "is-glob": {
-          "version": "3.1.0",
-          "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
-          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-          "requires": {
-            "is-extglob": "^2.1.0"
-          }
-        }
+        "is-glob": "^4.0.1"
       }
     },
     "glob-to-regexp": {
@@ -8996,9 +8291,9 @@
       "dev": true
     },
     "globals": {
-      "version": "11.11.0",
-      "resolved": "http://registry.npm.taobao.org/globals/download/globals-11.11.0.tgz",
-      "integrity": "sha1-3Pk3V/ot5Uhvvu1xGFOK33ienC4="
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
     },
     "globby": {
       "version": "9.2.0",
@@ -9026,23 +8321,23 @@
     },
     "good-listener": {
       "version": "1.2.2",
-      "resolved": "http://registry.npm.taobao.org/good-listener/download/good-listener-1.2.2.tgz",
+      "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
       "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
       "requires": {
         "delegate": "^3.1.2"
       }
     },
     "graceful-fs": {
-      "version": "4.1.15",
-      "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.15.tgz",
-      "integrity": "sha1-/7cD4QZuig7qpMi4C6klPu77+wA="
+      "version": "4.2.4",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+      "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
     },
     "graphlib": {
-      "version": "2.1.7",
-      "resolved": "http://registry.npm.taobao.org/graphlib/download/graphlib-2.1.7.tgz",
-      "integrity": "sha1-tqafn0S9neOWPOaASi/J5z2Grsw=",
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz",
+      "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==",
       "requires": {
-        "lodash": "^4.17.5"
+        "lodash": "^4.17.15"
       }
     },
     "growly": {
@@ -9062,21 +8357,22 @@
       }
     },
     "handle-thing": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
-      "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
+      "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
       "dev": true
     },
     "handlebars": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz",
-      "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==",
+      "version": "4.7.6",
+      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz",
+      "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==",
       "dev": true,
       "requires": {
+        "minimist": "^1.2.5",
         "neo-async": "^2.6.0",
-        "optimist": "^0.6.1",
         "source-map": "^0.6.1",
-        "uglify-js": "^3.1.4"
+        "uglify-js": "^3.1.4",
+        "wordwrap": "^1.0.0"
       },
       "dependencies": {
         "source-map": {
@@ -9086,45 +8382,47 @@
           "dev": true
         },
         "uglify-js": {
-          "version": "3.6.0",
-          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz",
-          "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==",
+          "version": "3.12.0",
+          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.0.tgz",
+          "integrity": "sha512-8lBMSkFZuAK7gGF8LswsXmir8eX8d2AAMOnxSDWjKBx/fBR6MypQjs78m6ML9zQVp1/hD4TBdfeMZMC7nW1TAA==",
           "dev": true,
-          "optional": true,
-          "requires": {
-            "commander": "~2.20.0",
-            "source-map": "~0.6.1"
-          }
+          "optional": true
+        },
+        "wordwrap": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+          "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+          "dev": true
         }
       }
     },
     "har-schema": {
       "version": "2.0.0",
-      "resolved": "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
       "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
       "dev": true
     },
     "har-validator": {
-      "version": "5.1.3",
-      "resolved": "http://registry.npm.taobao.org/har-validator/download/har-validator-5.1.3.tgz",
-      "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=",
+      "version": "5.1.5",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+      "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
       "dev": true,
       "requires": {
-        "ajv": "^6.5.5",
+        "ajv": "^6.12.3",
         "har-schema": "^2.0.0"
       }
     },
     "has": {
       "version": "1.0.3",
-      "resolved": "http://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
-      "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
+      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
       "requires": {
         "function-bind": "^1.1.1"
       }
     },
     "has-ansi": {
       "version": "2.0.0",
-      "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
       "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
       "requires": {
         "ansi-regex": "^2.0.0"
@@ -9132,17 +8430,17 @@
     },
     "has-flag": {
       "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
       "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
     },
     "has-symbols": {
-      "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.0.tgz",
-      "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+      "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
     },
     "has-value": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
       "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
       "requires": {
         "get-value": "^2.0.6",
@@ -9152,7 +8450,7 @@
     },
     "has-values": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
       "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
       "requires": {
         "is-number": "^3.0.0",
@@ -9161,7 +8459,7 @@
       "dependencies": {
         "kind-of": {
           "version": "4.0.0",
-          "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
           "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
           "requires": {
             "is-buffer": "^1.1.5"
@@ -9170,12 +8468,30 @@
       }
     },
     "hash-base": {
-      "version": "3.0.4",
-      "resolved": "http://registry.npm.taobao.org/hash-base/download/hash-base-3.0.4.tgz",
-      "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+      "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
       "requires": {
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.6.0",
+        "safe-buffer": "^5.2.0"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.6.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+          "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        },
+        "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=="
+        }
       }
     },
     "hash-sum": {
@@ -9186,8 +8502,8 @@
     },
     "hash.js": {
       "version": "1.1.7",
-      "resolved": "http://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz",
-      "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=",
+      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
       "requires": {
         "inherits": "^2.0.3",
         "minimalistic-assert": "^1.0.1"
@@ -9195,8 +8511,8 @@
     },
     "he": {
       "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/he/download/he-1.2.0.tgz",
-      "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8="
+      "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
     },
     "hex-color-regex": {
       "version": "1.1.0",
@@ -9205,14 +8521,14 @@
       "dev": true
     },
     "highlight.js": {
-      "version": "9.15.8",
-      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.8.tgz",
-      "integrity": "sha512-RrapkKQWwE+wKdF73VsOa2RQdIoO3mxwJ4P8mhbI6KYJUraUHRKM5w5zQQKXNk0xNL4UVRdulV9SBJcmzJNzVA==",
+      "version": "10.4.0",
+      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.4.0.tgz",
+      "integrity": "sha512-EfrUGcQ63oLJbj0J0RI9ebX6TAITbsDBLbsjr881L/X5fMO9+oadKzEF21C7R3ULKG6Gv3uoab2HiqVJa/4+oA==",
       "dev": true
     },
     "hmac-drbg": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
       "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
       "requires": {
         "hash.js": "^1.0.3",
@@ -9237,9 +8553,9 @@
       "dev": true
     },
     "hosted-git-info": {
-      "version": "2.7.1",
-      "resolved": "http://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.7.1.tgz",
-      "integrity": "sha1-l/I2l3vW4SVAiTD/bePuxigewEc=",
+      "version": "2.8.8",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
+      "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
       "dev": true
     },
     "hpack.js": {
@@ -9282,9 +8598,9 @@
       }
     },
     "html-entities": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
-      "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz",
+      "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==",
       "dev": true
     },
     "html-minifier": {
@@ -9361,6 +8677,12 @@
           "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
           "dev": true
         },
+        "emojis-list": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+          "dev": true
+        },
         "json5": {
           "version": "0.5.1",
           "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
@@ -9378,13 +8700,23 @@
             "json5": "^0.5.0",
             "object-assign": "^4.0.1"
           }
+        },
+        "util.promisify": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+          "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+          "dev": true,
+          "requires": {
+            "define-properties": "^1.1.2",
+            "object.getownpropertydescriptors": "^2.0.3"
+          }
         }
       }
     },
     "htmlparser2": {
       "version": "3.10.1",
-      "resolved": "http://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.10.1.tgz",
-      "integrity": "sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+      "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
       "dev": true,
       "requires": {
         "domelementtype": "^1.3.1",
@@ -9395,10 +8727,16 @@
         "readable-stream": "^3.1.1"
       },
       "dependencies": {
+        "entities": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+          "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+          "dev": true
+        },
         "readable-stream": {
-          "version": "3.3.0",
-          "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-3.3.0.tgz",
-          "integrity": "sha1-y4ARqtAC63F78EApH+uoVpyYb7k=",
+          "version": "3.6.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+          "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
           "dev": true,
           "requires": {
             "inherits": "^2.0.3",
@@ -9425,23 +8763,33 @@
         "setprototypeof": "1.1.1",
         "statuses": ">= 1.5.0 < 2",
         "toidentifier": "1.0.0"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+          "dev": true
+        }
       }
     },
-    "http-parser-js": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz",
-      "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==",
-      "dev": true
-    },
     "http-proxy": {
-      "version": "1.17.0",
-      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
-      "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==",
+      "version": "1.18.1",
+      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+      "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
       "dev": true,
       "requires": {
-        "eventemitter3": "^3.0.0",
+        "eventemitter3": "^4.0.0",
         "follow-redirects": "^1.0.0",
         "requires-port": "^1.0.0"
+      },
+      "dependencies": {
+        "eventemitter3": {
+          "version": "4.0.7",
+          "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+          "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+          "dev": true
+        }
       }
     },
     "http-proxy-middleware": {
@@ -9458,7 +8806,7 @@
     },
     "http-signature": {
       "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
       "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
       "dev": true,
       "requires": {
@@ -9469,38 +8817,44 @@
     },
     "https-browserify": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
       "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
     },
+    "human-signals": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+      "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+      "dev": true
+    },
     "iconv-lite": {
       "version": "0.4.24",
-      "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz",
-      "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
       "requires": {
         "safer-buffer": ">= 2.1.2 < 3"
       }
     },
     "icss-replace-symbols": {
       "version": "1.1.0",
-      "resolved": "http://registry.npm.taobao.org/icss-replace-symbols/download/icss-replace-symbols-1.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
       "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0="
     },
     "icss-utils": {
       "version": "2.1.0",
-      "resolved": "http://registry.npm.taobao.org/icss-utils/download/icss-utils-2.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz",
       "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
       "requires": {
         "postcss": "^6.0.1"
       }
     },
     "ieee754": {
-      "version": "1.1.13",
-      "resolved": "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz",
-      "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q="
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
     },
     "iferr": {
       "version": "0.1.5",
-      "resolved": "http://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz",
+      "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
       "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
     },
     "ignore": {
@@ -9511,7 +8865,7 @@
     },
     "image-size": {
       "version": "0.5.5",
-      "resolved": "http://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz",
+      "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
       "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
       "dev": true,
       "optional": true
@@ -9622,6 +8976,12 @@
           "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
           "dev": true
         },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
+        },
         "pkg-dir": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
@@ -9635,7 +8995,7 @@
     },
     "imurmurhash": {
       "version": "0.1.4",
-      "resolved": "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
       "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
     },
     "indexes-of": {
@@ -9644,14 +9004,14 @@
       "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
       "dev": true
     },
-    "indexof": {
-      "version": "0.0.1",
-      "resolved": "http://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz",
-      "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+    "infer-owner": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+      "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="
     },
     "inflight": {
       "version": "1.0.6",
-      "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
       "requires": {
         "once": "^1.3.0",
@@ -9659,9 +9019,9 @@
       }
     },
     "inherits": {
-      "version": "2.0.3",
-      "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
-      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
     },
     "ini": {
       "version": "1.3.5",
@@ -9751,6 +9111,18 @@
       "requires": {
         "default-gateway": "^4.2.0",
         "ipaddr.js": "^1.9.0"
+      },
+      "dependencies": {
+        "default-gateway": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
+          "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
+          "dev": true,
+          "requires": {
+            "execa": "^1.0.0",
+            "ip-regex": "^2.1.0"
+          }
+        }
       }
     },
     "intersperse": {
@@ -9760,16 +9132,17 @@
     },
     "invariant": {
       "version": "2.2.4",
-      "resolved": "http://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz",
-      "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=",
+      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+      "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+      "dev": true,
       "requires": {
         "loose-envify": "^1.0.0"
       }
     },
     "invert-kv": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
-      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+      "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
       "dev": true
     },
     "ip": {
@@ -9785,9 +9158,9 @@
       "dev": true
     },
     "ipaddr.js": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
-      "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==",
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
       "dev": true
     },
     "is-absolute-url": {
@@ -9798,35 +9171,41 @@
     },
     "is-accessor-descriptor": {
       "version": "0.1.6",
-      "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
       "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
       "requires": {
         "kind-of": "^3.0.2"
       }
     },
+    "is-arguments": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
+      "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA=="
+    },
     "is-arrayish": {
       "version": "0.2.1",
-      "resolved": "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
       "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
       "dev": true
     },
     "is-binary-path": {
-      "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz",
-      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "optional": true,
       "requires": {
-        "binary-extensions": "^1.0.0"
+        "binary-extensions": "^2.0.0"
       }
     },
     "is-buffer": {
       "version": "1.1.6",
-      "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-      "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4="
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
     },
     "is-callable": {
-      "version": "1.1.4",
-      "resolved": "http://registry.npm.taobao.org/is-callable/download/is-callable-1.1.4.tgz",
-      "integrity": "sha1-HhrfIZ4e62hNaR+dagX/DTCiTXU="
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
+      "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA=="
     },
     "is-ci": {
       "version": "1.2.1",
@@ -9853,21 +9232,21 @@
     },
     "is-data-descriptor": {
       "version": "0.1.4",
-      "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
       "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
       "requires": {
         "kind-of": "^3.0.2"
       }
     },
     "is-date-object": {
-      "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.1.tgz",
-      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
+      "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
     },
     "is-descriptor": {
       "version": "0.1.6",
-      "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
-      "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
       "requires": {
         "is-accessor-descriptor": "^0.1.6",
         "is-data-descriptor": "^0.1.4",
@@ -9876,8 +9255,8 @@
       "dependencies": {
         "kind-of": {
           "version": "5.1.0",
-          "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
-          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0="
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
         }
       }
     },
@@ -9887,15 +9266,21 @@
       "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
       "dev": true
     },
+    "is-docker": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
+      "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
+      "dev": true
+    },
     "is-dotfile": {
       "version": "1.0.3",
-      "resolved": "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz",
+      "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
       "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
       "dev": true
     },
     "is-equal-shallow": {
       "version": "0.1.3",
-      "resolved": "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz",
+      "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
       "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
       "dev": true,
       "requires": {
@@ -9904,26 +9289,23 @@
     },
     "is-extendable": {
       "version": "0.1.1",
-      "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
       "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
     },
     "is-extglob": {
       "version": "2.1.1",
-      "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
       "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
     },
     "is-finite": {
-      "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/is-finite/download/is-finite-1.0.2.tgz",
-      "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
-      "dev": true,
-      "requires": {
-        "number-is-nan": "^1.0.0"
-      }
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+      "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
+      "dev": true
     },
     "is-fullwidth-code-point": {
       "version": "2.0.0",
-      "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
       "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
       "dev": true
     },
@@ -9935,8 +9317,8 @@
     },
     "is-glob": {
       "version": "4.0.1",
-      "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz",
-      "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+      "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
       "requires": {
         "is-extglob": "^2.1.1"
       }
@@ -9948,22 +9330,22 @@
     },
     "is-number": {
       "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
       "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
       "requires": {
         "kind-of": "^3.0.2"
       }
     },
     "is-obj": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
-      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+      "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
       "dev": true
     },
     "is-path-cwd": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz",
-      "integrity": "sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+      "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
       "dev": true
     },
     "is-path-in-cwd": {
@@ -9992,36 +9374,30 @@
     },
     "is-plain-object": {
       "version": "2.0.4",
-      "resolved": "http://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz",
-      "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
       "requires": {
         "isobject": "^3.0.1"
       }
     },
     "is-posix-bracket": {
       "version": "0.1.1",
-      "resolved": "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
       "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
       "dev": true
     },
     "is-primitive": {
       "version": "2.0.0",
-      "resolved": "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
       "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
       "dev": true
     },
-    "is-promise": {
-      "version": "2.1.0",
-      "resolved": "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz",
-      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
-      "dev": true
-    },
     "is-regex": {
-      "version": "1.0.4",
-      "resolved": "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz",
-      "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+      "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
       "requires": {
-        "has": "^1.0.1"
+        "has": "^1.0.3"
       }
     },
     "is-resolvable": {
@@ -10032,10 +9408,16 @@
     },
     "is-stream": {
       "version": "1.1.0",
-      "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
       "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
       "dev": true
     },
+    "is-string": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
+      "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
+      "dev": true
+    },
     "is-svg": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
@@ -10046,22 +9428,22 @@
       }
     },
     "is-symbol": {
-      "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.2.tgz",
-      "integrity": "sha1-oFX2rlcZLK7jKeeoYBGLSXqVDzg=",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
+      "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
       "requires": {
-        "has-symbols": "^1.0.0"
+        "has-symbols": "^1.0.1"
       }
     },
     "is-typedarray": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
       "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
       "dev": true
     },
     "is-utf8": {
       "version": "0.2.1",
-      "resolved": "http://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz",
+      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
       "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
       "dev": true
     },
@@ -10073,23 +9455,22 @@
     },
     "is-windows": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz",
-      "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0="
+      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
     },
     "is-wsl": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
-      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
-      "dev": true
+      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
     },
     "isarray": {
       "version": "0.0.1",
-      "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
       "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
     },
     "isexe": {
       "version": "2.0.0",
-      "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
       "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
       "dev": true
     },
@@ -10100,12 +9481,12 @@
     },
     "isobject": {
       "version": "3.0.1",
-      "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
       "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
     },
     "isstream": {
       "version": "0.1.2",
-      "resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz",
+      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
       "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
       "dev": true
     },
@@ -10130,8 +9511,8 @@
     },
     "istanbul-lib-coverage": {
       "version": "1.2.1",
-      "resolved": "http://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-1.2.1.tgz",
-      "integrity": "sha1-zPftzQoLubj3Kf7rCTBHD5r2ZPA=",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz",
+      "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==",
       "dev": true
     },
     "istanbul-lib-hook": {
@@ -10145,8 +9526,8 @@
     },
     "istanbul-lib-instrument": {
       "version": "1.10.2",
-      "resolved": "http://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-1.10.2.tgz",
-      "integrity": "sha1-H1XtEKw8R/K93dUweTUSZ1TQqco=",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz",
+      "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==",
       "dev": true,
       "requires": {
         "babel-generator": "^6.18.0",
@@ -10446,6 +9827,12 @@
           "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
           "dev": true
         },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
+        },
         "slash": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
@@ -10477,16 +9864,16 @@
           "dev": true
         },
         "yargs": {
-          "version": "11.1.0",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
-          "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==",
+          "version": "11.1.1",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz",
+          "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==",
           "dev": true,
           "requires": {
             "cliui": "^4.0.0",
             "decamelize": "^1.1.1",
             "find-up": "^2.1.0",
             "get-caller-file": "^1.0.1",
-            "os-locale": "^2.0.0",
+            "os-locale": "^3.1.0",
             "require-directory": "^2.1.1",
             "require-main-filename": "^1.0.1",
             "set-blocking": "^2.0.0",
@@ -10671,12 +10058,6 @@
             "regex-cache": "^0.4.2"
           }
         },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
-        },
         "normalize-path": {
           "version": "2.1.1",
           "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
@@ -11269,9 +10650,9 @@
           "dev": true
         },
         "source-map-support": {
-          "version": "0.5.12",
-          "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
-          "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
+          "version": "0.5.19",
+          "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+          "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
           "dev": true,
           "requires": {
             "buffer-from": "^1.0.0",
@@ -11487,12 +10868,6 @@
             "regex-cache": "^0.4.2"
           }
         },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
-        },
         "normalize-path": {
           "version": "2.1.1",
           "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
@@ -11526,6 +10901,12 @@
           "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
           "dev": true
         },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
+        },
         "slash": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
@@ -11569,16 +10950,16 @@
           "dev": true
         },
         "yargs": {
-          "version": "11.1.0",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
-          "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==",
+          "version": "11.1.1",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz",
+          "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==",
           "dev": true,
           "requires": {
             "cliui": "^4.0.0",
             "decamelize": "^1.1.1",
             "find-up": "^2.1.0",
             "get-caller-file": "^1.0.1",
-            "os-locale": "^2.0.0",
+            "os-locale": "^3.1.0",
             "require-directory": "^2.1.1",
             "require-main-filename": "^1.0.1",
             "set-blocking": "^2.0.0",
@@ -11879,53 +11260,67 @@
         "merge-stream": "^1.0.1"
       }
     },
+    "jquery": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz",
+      "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg=="
+    },
     "js-beautify": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.0.tgz",
-      "integrity": "sha512-OMwf/tPDpE/BLlYKqZOhqWsd3/z2N3KOlyn1wsCRGFwViE8LOQTcDtathQvHvZc+q+zWmcNAbwKSC+iJoMaH2Q==",
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.13.0.tgz",
+      "integrity": "sha512-/Tbp1OVzZjbwzwJQFIlYLm9eWQ+3aYbBXLSaqb1mEJzhcQAfrqMMQYtjb6io+U6KpD0ID4F+Id3/xcjH3l/sqA==",
       "dev": true,
       "requires": {
         "config-chain": "^1.1.12",
         "editorconfig": "^0.15.3",
         "glob": "^7.1.3",
-        "mkdirp": "~0.5.1",
-        "nopt": "~4.0.1"
+        "mkdirp": "^1.0.4",
+        "nopt": "^5.0.0"
+      },
+      "dependencies": {
+        "mkdirp": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+          "dev": true
+        }
       }
     },
     "js-cookie": {
-      "version": "2.2.0",
-      "resolved": "http://registry.npm.taobao.org/js-cookie/download/js-cookie-2.2.0.tgz",
-      "integrity": "sha1-Gywnmm7s44ChIWi5JIUmWzWx7/s="
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz",
+      "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ=="
     },
     "js-levenshtein": {
       "version": "1.1.6",
-      "resolved": "http://registry.npm.taobao.org/js-levenshtein/download/js-levenshtein-1.1.6.tgz",
-      "integrity": "sha1-xs7ljrNVA3LfjeuF+tXOZs4B1Z0="
+      "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
+      "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
+      "dev": true
     },
     "js-message": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz",
-      "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz",
+      "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==",
       "dev": true
     },
     "js-queue": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.0.tgz",
-      "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.2.tgz",
+      "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==",
       "dev": true,
       "requires": {
-        "easy-stack": "^1.0.0"
+        "easy-stack": "^1.0.1"
       }
     },
     "js-tokens": {
       "version": "4.0.0",
-      "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz",
-      "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk="
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
     },
     "js-yaml": {
-      "version": "3.13.1",
-      "resolved": "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.13.1.tgz",
-      "integrity": "sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=",
+      "version": "3.14.0",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
+      "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
       "dev": true,
       "requires": {
         "argparse": "^1.0.7",
@@ -11934,7 +11329,7 @@
     },
     "jsbn": {
       "version": "0.1.1",
-      "resolved": "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
       "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
       "dev": true
     },
@@ -11973,49 +11368,55 @@
       },
       "dependencies": {
         "acorn": {
-          "version": "5.7.3",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
-          "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+          "version": "5.7.4",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
+          "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
           "dev": true
         }
       }
     },
     "jsesc": {
       "version": "2.5.2",
-      "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz",
-      "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q="
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
     },
     "json-parse-better-errors": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz",
-      "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk="
+      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
+    },
+    "json-parse-even-better-errors": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+      "dev": true
     },
     "json-schema": {
       "version": "0.2.3",
-      "resolved": "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz",
+      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
       "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
       "dev": true
     },
     "json-schema-traverse": {
       "version": "0.4.1",
-      "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA="
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
     },
     "json-stable-stringify-without-jsonify": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
       "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
       "dev": true
     },
     "json-stringify-safe": {
       "version": "5.0.1",
-      "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
       "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
       "dev": true
     },
     "json2module": {
       "version": "0.0.3",
-      "resolved": "http://registry.npm.taobao.org/json2module/download/json2module-0.0.3.tgz",
+      "resolved": "https://registry.npmjs.org/json2module/-/json2module-0.0.3.tgz",
       "integrity": "sha1-APtfSpt638PwZHwpyxe80Zeb6bI=",
       "requires": {
         "rw": "^1.3.2"
@@ -12036,11 +11437,11 @@
       "dev": true
     },
     "json5": {
-      "version": "2.1.0",
-      "resolved": "http://registry.npm.taobao.org/json5/download/json5-2.1.0.tgz",
-      "integrity": "sha1-56DGLEgoXGKNIKELhcibuAfDKFA=",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+      "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
       "requires": {
-        "minimist": "^1.2.0"
+        "minimist": "^1.2.5"
       }
     },
     "jsonfile": {
@@ -12052,15 +11453,9 @@
         "graceful-fs": "^4.1.6"
       }
     },
-    "jsonify": {
-      "version": "0.0.0",
-      "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
-      "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
-      "dev": true
-    },
     "jsprim": {
       "version": "1.4.1",
-      "resolved": "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz",
+      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
       "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
       "dev": true,
       "requires": {
@@ -12078,7 +11473,7 @@
     },
     "kind-of": {
       "version": "3.2.2",
-      "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
       "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
       "requires": {
         "is-buffer": "^1.1.5"
@@ -12142,16 +11537,16 @@
     },
     "lazy-cache": {
       "version": "1.0.4",
-      "resolved": "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz",
+      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
       "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
     },
     "lcid": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
-      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+      "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
       "dev": true,
       "requires": {
-        "invert-kv": "^1.0.0"
+        "invert-kv": "^2.0.0"
       }
     },
     "left-pad": {
@@ -12161,39 +11556,43 @@
       "dev": true
     },
     "less": {
-      "version": "3.9.0",
-      "resolved": "http://registry.npm.taobao.org/less/download/less-3.9.0.tgz",
-      "integrity": "sha1-t1EcQ/N89X3Iff/ZiD7BISibFHQ=",
+      "version": "3.12.2",
+      "resolved": "https://registry.npmjs.org/less/-/less-3.12.2.tgz",
+      "integrity": "sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q==",
       "dev": true,
       "requires": {
-        "clone": "^2.1.2",
         "errno": "^0.1.1",
         "graceful-fs": "^4.1.2",
         "image-size": "~0.5.0",
+        "make-dir": "^2.1.0",
         "mime": "^1.4.1",
-        "mkdirp": "^0.5.0",
-        "promise": "^7.1.1",
-        "request": "^2.83.0",
-        "source-map": "~0.6.0"
+        "native-request": "^1.0.5",
+        "source-map": "~0.6.0",
+        "tslib": "^1.10.0"
       },
       "dependencies": {
-        "clone": {
-          "version": "2.1.2",
-          "resolved": "http://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz",
-          "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
-          "dev": true
+        "make-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+          "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "pify": "^4.0.1",
+            "semver": "^5.6.0"
+          }
         },
         "mime": {
           "version": "1.6.0",
-          "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz",
-          "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
+          "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+          "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
           "dev": true,
           "optional": true
         },
         "source-map": {
           "version": "0.6.1",
-          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
           "dev": true,
           "optional": true
         }
@@ -12201,8 +11600,8 @@
     },
     "less-loader": {
       "version": "4.1.0",
-      "resolved": "http://registry.npm.taobao.org/less-loader/download/less-loader-4.1.0.tgz",
-      "integrity": "sha1-LBNSxbCaT4QQFJAnT9UWdN5BNj4=",
+      "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz",
+      "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==",
       "dev": true,
       "requires": {
         "clone": "^2.1.1",
@@ -12210,15 +11609,9 @@
         "pify": "^3.0.0"
       },
       "dependencies": {
-        "clone": {
-          "version": "2.1.2",
-          "resolved": "http://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz",
-          "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
-          "dev": true
-        },
         "pify": {
           "version": "3.0.0",
-          "resolved": "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
           "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
           "dev": true
         }
@@ -12232,7 +11625,7 @@
     },
     "levn": {
       "version": "0.3.0",
-      "resolved": "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
       "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
       "dev": true,
       "requires": {
@@ -12240,9 +11633,15 @@
         "type-check": "~0.3.2"
       }
     },
+    "lines-and-columns": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
+      "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+      "dev": true
+    },
     "load-json-file": {
       "version": "1.1.0",
-      "resolved": "http://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
       "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
       "dev": true,
       "requires": {
@@ -12255,20 +11654,20 @@
       "dependencies": {
         "pify": {
           "version": "2.3.0",
-          "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
           "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
           "dev": true
         }
       }
     },
     "loader-fs-cache": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz",
-      "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz",
+      "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==",
       "dev": true,
       "requires": {
         "find-cache-dir": "^0.1.1",
-        "mkdirp": "0.5.1"
+        "mkdirp": "^0.5.1"
       },
       "dependencies": {
         "find-cache-dir": {
@@ -12314,23 +11713,23 @@
     },
     "loader-runner": {
       "version": "2.4.0",
-      "resolved": "http://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz",
-      "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c="
+      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+      "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw=="
     },
     "loader-utils": {
-      "version": "1.2.3",
-      "resolved": "http://registry.npm.taobao.org/loader-utils/download/loader-utils-1.2.3.tgz",
-      "integrity": "sha1-H/XcaRHJ8KBiUxpMBLYJQGEIwsc=",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+      "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
       "requires": {
         "big.js": "^5.2.2",
-        "emojis-list": "^2.0.0",
+        "emojis-list": "^3.0.0",
         "json5": "^1.0.1"
       },
       "dependencies": {
         "json5": {
           "version": "1.0.1",
-          "resolved": "http://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz",
-          "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
           "requires": {
             "minimist": "^1.2.0"
           }
@@ -12338,18 +11737,17 @@
       }
     },
     "locate-path": {
-      "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz",
-      "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
       "requires": {
-        "p-locate": "^3.0.0",
-        "path-exists": "^3.0.0"
+        "p-locate": "^4.1.0"
       }
     },
     "lodash": {
-      "version": "4.17.14",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz",
-      "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw=="
+      "version": "4.17.20",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
+      "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
     },
     "lodash.defaultsdeep": {
       "version": "4.6.1",
@@ -12359,7 +11757,7 @@
     },
     "lodash.get": {
       "version": "4.4.2",
-      "resolved": "http://registry.npm.taobao.org/lodash.get/download/lodash.get-4.4.2.tgz",
+      "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
       "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
     },
     "lodash.kebabcase": {
@@ -12382,7 +11780,7 @@
     },
     "lodash.pick": {
       "version": "4.4.0",
-      "resolved": "http://registry.npm.taobao.org/lodash.pick/download/lodash.pick-4.4.0.tgz",
+      "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
       "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM="
     },
     "lodash.sortby": {
@@ -12391,6 +11789,11 @@
       "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
       "dev": true
     },
+    "lodash.toarray": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
+      "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE="
+    },
     "lodash.transform": {
       "version": "4.6.0",
       "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz",
@@ -12444,20 +11847,20 @@
       }
     },
     "loglevel": {
-      "version": "1.6.2",
-      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.2.tgz",
-      "integrity": "sha512-Jt2MHrCNdtIe1W6co3tF5KXGRkzF+TYffiQstfXa04mrss9IKXzAAXYWak8LbZseAQY03sH2GzMCMU0ZOUc9bg==",
+      "version": "1.7.1",
+      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz",
+      "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==",
       "dev": true
     },
     "longest": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
       "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
     },
     "loose-envify": {
       "version": "1.4.0",
-      "resolved": "http://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz",
-      "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
       "requires": {
         "js-tokens": "^3.0.0 || ^4.0.0"
       }
@@ -12470,19 +11873,25 @@
     },
     "lru-cache": {
       "version": "5.1.1",
-      "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz",
-      "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
       "requires": {
         "yallist": "^3.0.2"
       }
     },
     "make-dir": {
-      "version": "2.1.0",
-      "resolved": "http://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz",
-      "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
       "requires": {
-        "pify": "^4.0.1",
-        "semver": "^5.6.0"
+        "semver": "^6.0.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+        }
       }
     },
     "makeerror": {
@@ -12494,11 +11903,6 @@
         "tmpl": "1.0.x"
       }
     },
-    "mamacro": {
-      "version": "0.0.3",
-      "resolved": "http://registry.npm.taobao.org/mamacro/download/mamacro-0.0.3.tgz",
-      "integrity": "sha1-rSyVdhl8nxq/MI0Hh4Zb2XWj8+Q="
-    },
     "map-age-cleaner": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
@@ -12510,12 +11914,12 @@
     },
     "map-cache": {
       "version": "0.2.2",
-      "resolved": "http://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz",
+      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
       "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
     },
     "map-visit": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
       "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
       "requires": {
         "object-visit": "^1.0.0"
@@ -12523,24 +11927,24 @@
     },
     "math-random": {
       "version": "1.0.4",
-      "resolved": "http://registry.npm.taobao.org/math-random/download/math-random-1.0.4.tgz",
-      "integrity": "sha1-XdaUPJOFSCZwFtTjTwV1gwgMUUw=",
+      "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
+      "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
       "dev": true
     },
     "md5": {
-      "version": "2.2.1",
-      "resolved": "http://registry.npm.taobao.org/md5/download/md5-2.2.1.tgz",
-      "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
+      "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
       "requires": {
-        "charenc": "~0.0.1",
-        "crypt": "~0.0.1",
-        "is-buffer": "~1.1.1"
+        "charenc": "0.0.2",
+        "crypt": "0.0.2",
+        "is-buffer": "~1.1.6"
       }
     },
     "md5.js": {
       "version": "1.3.5",
-      "resolved": "http://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz",
-      "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=",
+      "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+      "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
       "requires": {
         "hash-base": "^3.0.0",
         "inherits": "^2.0.1",
@@ -12548,9 +11952,9 @@
       }
     },
     "mdn-data": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz",
-      "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
+      "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
       "dev": true
     },
     "media-typer": {
@@ -12560,17 +11964,27 @@
       "dev": true
     },
     "mem": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
-      "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+      "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
       "dev": true,
       "requires": {
-        "mimic-fn": "^1.0.0"
+        "map-age-cleaner": "^0.1.1",
+        "mimic-fn": "^2.0.0",
+        "p-is-promise": "^2.0.0"
+      },
+      "dependencies": {
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+          "dev": true
+        }
       }
     },
     "memory-fs": {
       "version": "0.4.1",
-      "resolved": "http://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz",
+      "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
       "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
       "requires": {
         "errno": "^0.1.3",
@@ -12616,9 +12030,9 @@
       }
     },
     "merge2": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz",
-      "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==",
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
       "dev": true
     },
     "methods": {
@@ -12629,8 +12043,8 @@
     },
     "micromatch": {
       "version": "3.1.10",
-      "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz",
-      "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+      "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
       "requires": {
         "arr-diff": "^4.0.0",
         "array-unique": "^0.3.2",
@@ -12648,100 +12062,119 @@
       },
       "dependencies": {
         "kind-of": {
-          "version": "6.0.2",
-          "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz",
-          "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE="
+          "version": "6.0.3",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
         }
       }
     },
     "miller-rabin": {
       "version": "4.0.1",
-      "resolved": "http://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz",
-      "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
+      "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+      "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
       "requires": {
         "bn.js": "^4.0.0",
         "brorand": "^1.0.1"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+        }
       }
     },
     "mime": {
-      "version": "2.4.3",
-      "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz",
-      "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==",
+      "version": "2.4.6",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
+      "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==",
       "dev": true
     },
     "mime-db": {
-      "version": "1.40.0",
-      "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.40.0.tgz",
-      "integrity": "sha1-plBX6ZjbCQ9zKmj2wnbTh9QSbDI=",
+      "version": "1.44.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+      "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
       "dev": true
     },
     "mime-types": {
-      "version": "2.1.24",
-      "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.24.tgz",
-      "integrity": "sha1-tvjQs+lR77d97eyhlM/20W9nb4E=",
+      "version": "2.1.27",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+      "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
       "dev": true,
       "requires": {
-        "mime-db": "1.40.0"
+        "mime-db": "1.44.0"
       }
     },
     "mimic-fn": {
       "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz",
-      "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+      "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
       "dev": true
     },
     "mini-css-extract-plugin": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.6.0.tgz",
-      "integrity": "sha512-79q5P7YGI6rdnVyIAV4NXpBQJFWdkzJxCim3Kog4078fM0piAaFlwocqbejdWtLW1cEzCexPrh6EdyFsPgVdAw==",
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz",
+      "integrity": "sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw==",
       "dev": true,
       "requires": {
         "loader-utils": "^1.1.0",
-        "normalize-url": "^2.0.1",
+        "normalize-url": "1.9.1",
         "schema-utils": "^1.0.0",
         "webpack-sources": "^1.1.0"
       },
       "dependencies": {
         "normalize-url": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz",
-          "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==",
+          "version": "1.9.1",
+          "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+          "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+          "dev": true,
+          "requires": {
+            "object-assign": "^4.0.1",
+            "prepend-http": "^1.0.0",
+            "query-string": "^4.1.0",
+            "sort-keys": "^1.0.0"
+          }
+        },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
           "dev": true,
           "requires": {
-            "prepend-http": "^2.0.0",
-            "query-string": "^5.0.1",
-            "sort-keys": "^2.0.0"
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
           }
         }
       }
     },
     "minimalistic-assert": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz",
-      "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc="
+      "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
     },
     "minimalistic-crypto-utils": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
       "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
     },
     "minimatch": {
       "version": "3.0.4",
-      "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz",
-      "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
       "requires": {
         "brace-expansion": "^1.1.7"
       }
     },
     "minimist": {
-      "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz",
-      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
     },
     "mississippi": {
       "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz",
-      "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=",
+      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+      "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
       "requires": {
         "concat-stream": "^1.5.0",
         "duplexify": "^3.4.2",
@@ -12756,9 +12189,9 @@
       }
     },
     "mixin-deep": {
-      "version": "1.3.1",
-      "resolved": "http://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.1.tgz",
-      "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=",
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+      "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
       "requires": {
         "for-in": "^1.0.2",
         "is-extendable": "^1.0.1"
@@ -12766,8 +12199,8 @@
       "dependencies": {
         "is-extendable": {
           "version": "1.0.1",
-          "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz",
-          "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
           "requires": {
             "is-plain-object": "^2.0.4"
           }
@@ -12775,36 +12208,29 @@
       }
     },
     "mkdirp": {
-      "version": "0.5.1",
-      "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz",
-      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
       "requires": {
-        "minimist": "0.0.8"
-      },
-      "dependencies": {
-        "minimist": {
-          "version": "0.0.8",
-          "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz",
-          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
-        }
+        "minimist": "^1.2.5"
       }
     },
     "mockjs2": {
-      "version": "1.0.5",
-      "resolved": "http://registry.npm.taobao.org/mockjs2/download/mockjs2-1.0.5.tgz",
-      "integrity": "sha1-voD2cOBGgJKxVFQWlZHpNsO9Kfk=",
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/mockjs2/-/mockjs2-1.0.8.tgz",
+      "integrity": "sha512-IXY9wzq3Pr2tybkJnT+dzrTz0GBRTtgXc7Cke/UUQyyWtbjDrck8uZ3NmMF4LaWgAD8vm8EMGcBk4Itc6nzpRg==",
       "requires": {
         "commander": "*"
       }
     },
     "moment": {
-      "version": "2.24.0",
-      "resolved": "http://registry.npm.taobao.org/moment/download/moment-2.24.0.tgz",
-      "integrity": "sha1-DQVdU/UFKqZTyfbraLtdEr9cK1s="
+      "version": "2.29.1",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
+      "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
     },
     "move-concurrently": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
       "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
       "requires": {
         "aproba": "^1.1.1",
@@ -12816,9 +12242,9 @@
       }
     },
     "ms": {
-      "version": "2.1.1",
-      "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz",
-      "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo="
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
     },
     "multicast-dns": {
       "version": "6.2.3",
@@ -12837,13 +12263,13 @@
       "dev": true
     },
     "mutationobserver-shim": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz",
-      "integrity": "sha512-gciOLNN8Vsf7YzcqRjKzlAJ6y7e+B86u7i3KXes0xfxx/nfLmozlW1Vn+Sc9x3tPIePFgc1AeIFhtRgkqTjzDQ=="
+      "version": "0.3.7",
+      "resolved": "https://registry.npmjs.org/mutationobserver-shim/-/mutationobserver-shim-0.3.7.tgz",
+      "integrity": "sha512-oRIDTyZQU96nAiz2AQyngwx1e89iApl2hN5AOYwyxLUB47UYsU3Wv9lJWqH5y/QdiYkc5HQLi23ZNB3fELdHcQ=="
     },
     "mute-stream": {
       "version": "0.0.7",
-      "resolved": "http://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
       "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
       "dev": true
     },
@@ -12858,16 +12284,10 @@
         "thenify-all": "^1.0.0"
       }
     },
-    "nan": {
-      "version": "2.13.2",
-      "resolved": "http://registry.npm.taobao.org/nan/download/nan-2.13.2.tgz",
-      "integrity": "sha1-9R3Hrma6fV1V4ebU2AkugCya7+c=",
-      "optional": true
-    },
     "nanomatch": {
       "version": "1.2.13",
-      "resolved": "http://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz",
-      "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=",
+      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+      "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
       "requires": {
         "arr-diff": "^4.0.0",
         "array-unique": "^0.3.2",
@@ -12883,15 +12303,22 @@
       },
       "dependencies": {
         "kind-of": {
-          "version": "6.0.2",
-          "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz",
-          "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE="
+          "version": "6.0.3",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
         }
       }
     },
+    "native-request": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz",
+      "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==",
+      "dev": true,
+      "optional": true
+    },
     "natural-compare": {
       "version": "1.4.0",
-      "resolved": "http://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz",
+      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
       "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
       "dev": true
     },
@@ -12902,14 +12329,14 @@
       "dev": true
     },
     "neo-async": {
-      "version": "2.6.0",
-      "resolved": "http://registry.npm.taobao.org/neo-async/download/neo-async-2.6.0.tgz",
-      "integrity": "sha1-udFeTXHGdikIZUtRg+04t1M0CDU="
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
     },
     "nice-try": {
       "version": "1.0.5",
-      "resolved": "http://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz",
-      "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=",
+      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
       "dev": true
     },
     "no-case": {
@@ -12921,27 +12348,33 @@
         "lower-case": "^1.1.1"
       }
     },
+    "node-addon-api": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz",
+      "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==",
+      "dev": true
+    },
     "node-cache": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.0.tgz",
-      "integrity": "sha512-obRu6/f7S024ysheAjoYFEEBqqDWv4LOMNJEuO8vMeEw2AT4z+NCzO4hlc2lhI4vATzbCQv6kke9FVdx0RbCOw==",
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.1.tgz",
+      "integrity": "sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A==",
       "dev": true,
       "requires": {
         "clone": "2.x",
-        "lodash": "4.x"
-      },
-      "dependencies": {
-        "clone": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
-          "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
-          "dev": true
-        }
+        "lodash": "^4.17.15"
+      }
+    },
+    "node-emoji": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz",
+      "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==",
+      "requires": {
+        "lodash.toarray": "^4.4.0"
       }
     },
     "node-fetch": {
       "version": "1.6.3",
-      "resolved": "http://registry.npm.taobao.org/node-fetch/download/node-fetch-1.6.3.tgz",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz",
       "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=",
       "dev": true,
       "requires": {
@@ -12950,9 +12383,9 @@
       }
     },
     "node-forge": {
-      "version": "0.7.5",
-      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz",
-      "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==",
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+      "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
       "dev": true
     },
     "node-int64": {
@@ -12962,20 +12395,20 @@
       "dev": true
     },
     "node-ipc": {
-      "version": "9.1.1",
-      "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.1.tgz",
-      "integrity": "sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w==",
+      "version": "9.1.3",
+      "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.3.tgz",
+      "integrity": "sha512-8RS4RZyS/KMKKYG8mrje+cLxwATe9dBCuOiqKFSWND4oOuKytfuKCiR9yinvhoXF/nGdX/WnbywaUee+9U87zA==",
       "dev": true,
       "requires": {
         "event-pubsub": "4.3.0",
-        "js-message": "1.0.5",
-        "js-queue": "2.0.0"
+        "js-message": "1.0.7",
+        "js-queue": "2.0.2"
       }
     },
     "node-libs-browser": {
-      "version": "2.2.0",
-      "resolved": "http://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.0.tgz",
-      "integrity": "sha1-xy9g2dRt4IqUDe27JfP/ovm7qnc=",
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
+      "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
       "requires": {
         "assert": "^1.1.1",
         "browserify-zlib": "^0.2.0",
@@ -12987,7 +12420,7 @@
         "events": "^3.0.0",
         "https-browserify": "^1.0.0",
         "os-browserify": "^0.3.0",
-        "path-browserify": "0.0.0",
+        "path-browserify": "0.0.1",
         "process": "^0.11.10",
         "punycode": "^1.2.4",
         "querystring-es3": "^0.2.0",
@@ -12999,20 +12432,20 @@
         "tty-browserify": "0.0.0",
         "url": "^0.11.0",
         "util": "^0.11.0",
-        "vm-browserify": "0.0.4"
+        "vm-browserify": "^1.0.1"
       },
       "dependencies": {
         "punycode": {
           "version": "1.4.1",
-          "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
           "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
         }
       }
     },
     "node-notifier": {
-      "version": "5.4.0",
-      "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz",
-      "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==",
+      "version": "5.4.3",
+      "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz",
+      "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==",
       "dev": true,
       "requires": {
         "growly": "^1.3.0",
@@ -13023,27 +12456,23 @@
       }
     },
     "node-releases": {
-      "version": "1.1.15",
-      "resolved": "http://registry.npm.taobao.org/node-releases/download/node-releases-1.1.15.tgz",
-      "integrity": "sha1-nnanOw7KO/eAGt2qDmzpDHlfK5o=",
-      "requires": {
-        "semver": "^5.3.0"
-      }
+      "version": "1.1.67",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz",
+      "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg=="
     },
     "nopt": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
-      "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+      "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
       "dev": true,
       "requires": {
-        "abbrev": "1",
-        "osenv": "^0.1.4"
+        "abbrev": "1"
       }
     },
     "normalize-package-data": {
       "version": "2.5.0",
-      "resolved": "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz",
-      "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
       "dev": true,
       "requires": {
         "hosted-git-info": "^2.1.4",
@@ -13054,8 +12483,8 @@
     },
     "normalize-path": {
       "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz",
-      "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU="
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
     },
     "normalize-range": {
       "version": "0.1.2",
@@ -13080,7 +12509,7 @@
     },
     "nprogress": {
       "version": "0.2.0",
-      "resolved": "http://registry.npm.taobao.org/nprogress/download/nprogress-0.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz",
       "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E="
     },
     "nth-check": {
@@ -13100,30 +12529,30 @@
     },
     "number-is-nan": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
       "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
       "dev": true
     },
     "nwsapi": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz",
-      "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
+      "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
       "dev": true
     },
     "oauth-sign": {
       "version": "0.9.0",
-      "resolved": "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz",
-      "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=",
+      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
       "dev": true
     },
     "object-assign": {
       "version": "4.1.1",
-      "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
       "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
     },
     "object-copy": {
       "version": "0.1.0",
-      "resolved": "http://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
       "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
       "requires": {
         "copy-descriptor": "^0.1.0",
@@ -13133,7 +12562,7 @@
       "dependencies": {
         "define-property": {
           "version": "0.2.5",
-          "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "requires": {
             "is-descriptor": "^0.1.0"
@@ -13148,47 +12577,94 @@
       "dev": true
     },
     "object-inspect": {
-      "version": "1.6.0",
-      "resolved": "http://registry.npm.taobao.org/object-inspect/download/object-inspect-1.6.0.tgz",
-      "integrity": "sha1-xwtsv3LydKq0w0wMgvUWe/gs8Vs="
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+      "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="
+    },
+    "object-is": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz",
+      "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==",
+      "requires": {
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3"
+      }
     },
     "object-keys": {
       "version": "1.1.1",
-      "resolved": "http://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz",
-      "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4="
+      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
     },
     "object-visit": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
       "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
       "requires": {
         "isobject": "^3.0.0"
       }
     },
     "object.assign": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
-      "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
-      "dev": true,
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+      "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
       "requires": {
-        "define-properties": "^1.1.2",
-        "function-bind": "^1.1.1",
-        "has-symbols": "^1.0.0",
-        "object-keys": "^1.0.11"
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3",
+        "has-symbols": "^1.0.1",
+        "object-keys": "^1.1.1"
       }
     },
     "object.getownpropertydescriptors": {
-      "version": "2.0.3",
-      "resolved": "http://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.0.3.tgz",
-      "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz",
+      "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==",
+      "dev": true,
       "requires": {
-        "define-properties": "^1.1.2",
-        "es-abstract": "^1.5.1"
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.18.0-next.1"
+      },
+      "dependencies": {
+        "es-abstract": {
+          "version": "1.18.0-next.1",
+          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+          "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+          "dev": true,
+          "requires": {
+            "es-to-primitive": "^1.2.1",
+            "function-bind": "^1.1.1",
+            "has": "^1.0.3",
+            "has-symbols": "^1.0.1",
+            "is-callable": "^1.2.2",
+            "is-negative-zero": "^2.0.0",
+            "is-regex": "^1.1.1",
+            "object-inspect": "^1.8.0",
+            "object-keys": "^1.1.1",
+            "object.assign": "^4.1.1",
+            "string.prototype.trimend": "^1.0.1",
+            "string.prototype.trimstart": "^1.0.1"
+          }
+        },
+        "is-regex": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+          "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+          "dev": true,
+          "requires": {
+            "has-symbols": "^1.0.1"
+          }
+        },
+        "object-inspect": {
+          "version": "1.8.0",
+          "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+          "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
+          "dev": true
+        }
       }
     },
     "object.omit": {
       "version": "2.0.1",
-      "resolved": "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
       "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
       "dev": true,
       "requires": {
@@ -13198,22 +12674,59 @@
     },
     "object.pick": {
       "version": "1.3.0",
-      "resolved": "http://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz",
+      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
       "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
       "requires": {
         "isobject": "^3.0.1"
       }
     },
     "object.values": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
-      "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz",
+      "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==",
       "dev": true,
       "requires": {
+        "call-bind": "^1.0.0",
         "define-properties": "^1.1.3",
-        "es-abstract": "^1.12.0",
-        "function-bind": "^1.1.1",
+        "es-abstract": "^1.18.0-next.1",
         "has": "^1.0.3"
+      },
+      "dependencies": {
+        "es-abstract": {
+          "version": "1.18.0-next.1",
+          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+          "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+          "dev": true,
+          "requires": {
+            "es-to-primitive": "^1.2.1",
+            "function-bind": "^1.1.1",
+            "has": "^1.0.3",
+            "has-symbols": "^1.0.1",
+            "is-callable": "^1.2.2",
+            "is-negative-zero": "^2.0.0",
+            "is-regex": "^1.1.1",
+            "object-inspect": "^1.8.0",
+            "object-keys": "^1.1.1",
+            "object.assign": "^4.1.1",
+            "string.prototype.trimend": "^1.0.1",
+            "string.prototype.trimstart": "^1.0.1"
+          }
+        },
+        "is-regex": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+          "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+          "dev": true,
+          "requires": {
+            "has-symbols": "^1.0.1"
+          }
+        },
+        "object-inspect": {
+          "version": "1.8.0",
+          "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+          "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
+          "dev": true
+        }
       }
     },
     "obuf": {
@@ -13247,7 +12760,7 @@
     },
     "once": {
       "version": "1.4.0",
-      "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
       "requires": {
         "wrappy": "1"
@@ -13255,7 +12768,7 @@
     },
     "onetime": {
       "version": "2.0.1",
-      "resolved": "http://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
       "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
       "dev": true,
       "requires": {
@@ -13263,9 +12776,9 @@
       }
     },
     "open": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/open/-/open-6.3.0.tgz",
-      "integrity": "sha512-6AHdrJxPvAXIowO/aIaeHZ8CeMdDf7qCyRNq8NwJpinmCdXhz+NZR7ie1Too94lpciCDsG+qHGO9Mt0svA4OqA==",
+      "version": "6.4.0",
+      "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz",
+      "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==",
       "dev": true,
       "requires": {
         "is-wsl": "^1.1.0"
@@ -13273,7 +12786,7 @@
     },
     "opencollective": {
       "version": "1.0.3",
-      "resolved": "http://registry.npm.taobao.org/opencollective/download/opencollective-1.0.3.tgz",
+      "resolved": "https://registry.npmjs.org/opencollective/-/opencollective-1.0.3.tgz",
       "integrity": "sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=",
       "dev": true,
       "requires": {
@@ -13287,13 +12800,13 @@
       "dependencies": {
         "ansi-escapes": {
           "version": "1.4.0",
-          "resolved": "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-1.4.0.tgz",
+          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
           "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
           "dev": true
         },
         "inquirer": {
           "version": "3.0.6",
-          "resolved": "http://registry.npm.taobao.org/inquirer/download/inquirer-3.0.6.tgz",
+          "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz",
           "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=",
           "dev": true,
           "requires": {
@@ -13312,9 +12825,15 @@
             "through": "^2.3.6"
           }
         },
+        "minimist": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+          "dev": true
+        },
         "opn": {
           "version": "4.0.2",
-          "resolved": "http://registry.npm.taobao.org/opn/download/opn-4.0.2.tgz",
+          "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
           "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
           "dev": true,
           "requires": {
@@ -13325,15 +12844,15 @@
       }
     },
     "opencollective-postinstall": {
-      "version": "2.0.2",
-      "resolved": "http://registry.npm.taobao.org/opencollective-postinstall/download/opencollective-postinstall-2.0.2.tgz",
-      "integrity": "sha1-Vlfxvt5ptuM6RZObBh61PTxsOok=",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
+      "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==",
       "dev": true
     },
     "opener": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz",
-      "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==",
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
+      "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
       "dev": true
     },
     "opn": {
@@ -13345,44 +12864,18 @@
         "is-wsl": "^1.1.0"
       }
     },
-    "optimist": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
-      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
-      "dev": true,
-      "requires": {
-        "minimist": "~0.0.1",
-        "wordwrap": "~0.0.2"
-      },
-      "dependencies": {
-        "minimist": {
-          "version": "0.0.10",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
-          "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
-          "dev": true
-        }
-      }
-    },
     "optionator": {
-      "version": "0.8.2",
-      "resolved": "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz",
-      "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+      "version": "0.8.3",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+      "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
       "dev": true,
       "requires": {
         "deep-is": "~0.1.3",
-        "fast-levenshtein": "~2.0.4",
+        "fast-levenshtein": "~2.0.6",
         "levn": "~0.3.0",
         "prelude-ls": "~1.1.2",
         "type-check": "~0.3.2",
-        "wordwrap": "~1.0.0"
-      },
-      "dependencies": {
-        "wordwrap": {
-          "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz",
-          "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
-          "dev": true
-        }
+        "word-wrap": "~1.2.3"
       }
     },
     "ora": {
@@ -13456,7 +12949,7 @@
     },
     "os-browserify": {
       "version": "0.3.0",
-      "resolved": "http://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz",
+      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
       "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
     },
     "os-homedir": {
@@ -13466,82 +12959,22 @@
       "dev": true
     },
     "os-locale": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
-      "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+      "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
       "dev": true,
       "requires": {
-        "execa": "^0.7.0",
-        "lcid": "^1.0.0",
-        "mem": "^1.1.0"
-      },
-      "dependencies": {
-        "cross-spawn": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
-          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^4.0.1",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
-          }
-        },
-        "execa": {
-          "version": "0.7.0",
-          "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
-          "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^5.0.1",
-            "get-stream": "^3.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
-        },
-        "get-stream": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
-          "dev": true
-        },
-        "lru-cache": {
-          "version": "4.1.5",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
-          "dev": true,
-          "requires": {
-            "pseudomap": "^1.0.2",
-            "yallist": "^2.1.2"
-          }
-        },
-        "yallist": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
-          "dev": true
-        }
+        "execa": "^1.0.0",
+        "lcid": "^2.0.0",
+        "mem": "^4.0.0"
       }
     },
     "os-tmpdir": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
       "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
       "dev": true
     },
-    "osenv": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
-      "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
-      "dev": true,
-      "requires": {
-        "os-homedir": "^1.0.0",
-        "os-tmpdir": "^1.0.0"
-      }
-    },
     "p-defer": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
@@ -13561,19 +12994,19 @@
       "dev": true
     },
     "p-limit": {
-      "version": "2.2.0",
-      "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-2.2.0.tgz",
-      "integrity": "sha1-QXyZQeYCepq8ulCS3SkE4lW1+8I=",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
       "requires": {
         "p-try": "^2.0.0"
       }
     },
     "p-locate": {
-      "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz",
-      "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
       "requires": {
-        "p-limit": "^2.0.0"
+        "p-limit": "^2.2.0"
       }
     },
     "p-map": {
@@ -13582,22 +13015,31 @@
       "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
       "dev": true
     },
+    "p-retry": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
+      "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
+      "dev": true,
+      "requires": {
+        "retry": "^0.12.0"
+      }
+    },
     "p-try": {
       "version": "2.2.0",
-      "resolved": "http://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz",
-      "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY="
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
     },
     "pako": {
-      "version": "1.0.10",
-      "resolved": "http://registry.npm.taobao.org/pako/download/pako-1.0.10.tgz",
-      "integrity": "sha1-Qyi621CGpCaqkPVBl31JVdpclzI="
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
     },
     "parallel-transform": {
-      "version": "1.1.0",
-      "resolved": "http://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.1.0.tgz",
-      "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
+      "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
       "requires": {
-        "cyclist": "~0.2.2",
+        "cyclist": "^1.0.1",
         "inherits": "^2.0.3",
         "readable-stream": "^2.1.5"
       }
@@ -13618,8 +13060,8 @@
     },
     "parent-module": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz",
-      "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=",
+      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
       "dev": true,
       "requires": {
         "callsites": "^3.0.0"
@@ -13627,20 +13069,19 @@
       "dependencies": {
         "callsites": {
           "version": "3.1.0",
-          "resolved": "http://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz",
-          "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=",
+          "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+          "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
           "dev": true
         }
       }
     },
     "parse-asn1": {
-      "version": "5.1.4",
-      "resolved": "http://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.4.tgz",
-      "integrity": "sha1-N/Zij4I/vesic7TVQENKIvPvH8w=",
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
+      "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
       "requires": {
-        "asn1.js": "^4.0.0",
+        "asn1.js": "^5.2.0",
         "browserify-aes": "^1.0.0",
-        "create-hash": "^1.1.0",
         "evp_bytestokey": "^1.0.0",
         "pbkdf2": "^3.0.3",
         "safe-buffer": "^5.1.1"
@@ -13648,7 +13089,7 @@
     },
     "parse-glob": {
       "version": "3.0.4",
-      "resolved": "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz",
+      "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
       "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
       "dev": true,
       "requires": {
@@ -13660,13 +13101,13 @@
       "dependencies": {
         "is-extglob": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
           "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
           "dev": true
         },
         "is-glob": {
           "version": "2.0.1",
-          "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
           "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
           "dev": true,
           "requires": {
@@ -13677,7 +13118,7 @@
     },
     "parse-json": {
       "version": "2.2.0",
-      "resolved": "http://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
       "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
       "dev": true,
       "requires": {
@@ -13686,7 +13127,7 @@
     },
     "parse-svg-path": {
       "version": "0.1.2",
-      "resolved": "http://registry.npm.taobao.org/parse-svg-path/download/parse-svg-path-0.1.2.tgz",
+      "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz",
       "integrity": "sha1-en7A0esG+lMlx9PgCbhZoJtdSes="
     },
     "parse5": {
@@ -13695,6 +13136,23 @@
       "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
       "dev": true
     },
+    "parse5-htmlparser2-tree-adapter": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
+      "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
+      "dev": true,
+      "requires": {
+        "parse5": "^6.0.1"
+      },
+      "dependencies": {
+        "parse5": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+          "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+          "dev": true
+        }
+      }
+    },
     "parseurl": {
       "version": "1.3.3",
       "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -13703,45 +13161,45 @@
     },
     "pascalcase": {
       "version": "0.1.1",
-      "resolved": "http://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
       "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
     },
     "path-browserify": {
-      "version": "0.0.0",
-      "resolved": "http://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.0.tgz",
-      "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo="
+      "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=="
     },
     "path-dirname": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
       "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
     },
     "path-exists": {
-      "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz",
-      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
     },
     "path-is-absolute": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
       "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
     },
     "path-is-inside": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
       "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
       "dev": true
     },
     "path-key": {
       "version": "2.0.1",
-      "resolved": "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
       "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
       "dev": true
     },
     "path-parse": {
       "version": "1.0.6",
-      "resolved": "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz",
-      "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw="
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
     },
     "path-to-regexp": {
       "version": "0.1.7",
@@ -13767,9 +13225,9 @@
       }
     },
     "pbkdf2": {
-      "version": "3.0.17",
-      "resolved": "http://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.0.17.tgz",
-      "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
+      "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
       "requires": {
         "create-hash": "^1.1.2",
         "create-hmac": "^1.1.4",
@@ -13780,23 +13238,29 @@
     },
     "performance-now": {
       "version": "2.1.0",
-      "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
       "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
     },
+    "picomatch": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+      "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+      "optional": true
+    },
     "pify": {
       "version": "4.0.1",
-      "resolved": "http://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz",
-      "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE="
+      "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+      "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
     },
     "pinkie": {
       "version": "2.0.4",
-      "resolved": "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz",
+      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
       "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
       "dev": true
     },
     "pinkie-promise": {
       "version": "2.0.1",
-      "resolved": "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
       "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
       "dev": true,
       "requires": {
@@ -13804,11 +13268,11 @@
       }
     },
     "pkg-dir": {
-      "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz",
-      "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+      "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
       "requires": {
-        "find-up": "^3.0.0"
+        "find-up": "^4.0.0"
       }
     },
     "pkg-up": {
@@ -13862,6 +13326,12 @@
           "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
           "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
           "dev": true
+        },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
         }
       }
     },
@@ -13880,7 +13350,7 @@
     },
     "point-at-length": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/point-at-length/download/point-at-length-1.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/point-at-length/-/point-at-length-1.0.2.tgz",
       "integrity": "sha1-kXbY1tfIFi8Stkb3B9ufDqcoEl4=",
       "requires": {
         "abs-svg-path": "~0.1.1",
@@ -13889,48 +13359,42 @@
       }
     },
     "portfinder": {
-      "version": "1.0.20",
-      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz",
-      "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==",
+      "version": "1.0.28",
+      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
+      "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
       "dev": true,
       "requires": {
-        "async": "^1.5.2",
-        "debug": "^2.2.0",
-        "mkdirp": "0.5.x"
+        "async": "^2.6.2",
+        "debug": "^3.1.1",
+        "mkdirp": "^0.5.5"
       },
       "dependencies": {
-        "async": {
-          "version": "1.5.2",
-          "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
-          "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
-          "dev": true
-        },
         "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "version": "3.2.7",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
           "dev": true,
           "requires": {
-            "ms": "2.0.0"
+            "ms": "^2.1.1"
           }
         },
         "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
           "dev": true
         }
       }
     },
     "posix-character-classes": {
       "version": "0.1.1",
-      "resolved": "http://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
       "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
     },
     "postcss": {
       "version": "6.0.23",
-      "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz",
-      "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+      "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
       "requires": {
         "chalk": "^2.4.1",
         "source-map": "^0.6.1",
@@ -13939,16 +13403,16 @@
       "dependencies": {
         "ansi-styles": {
           "version": "3.2.1",
-          "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz",
-          "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
           "requires": {
             "color-convert": "^1.9.0"
           }
         },
         "chalk": {
           "version": "2.4.2",
-          "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz",
-          "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
           "requires": {
             "ansi-styles": "^3.2.1",
             "escape-string-regexp": "^1.0.5",
@@ -13957,13 +13421,13 @@
         },
         "source-map": {
           "version": "0.6.1",
-          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
         },
         "supports-color": {
           "version": "5.5.0",
-          "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz",
-          "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+          "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
           "requires": {
             "has-flag": "^3.0.0"
           }
@@ -13971,15 +13435,14 @@
       }
     },
     "postcss-calc": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz",
-      "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==",
+      "version": "7.0.5",
+      "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz",
+      "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==",
       "dev": true,
       "requires": {
-        "css-unit-converter": "^1.1.1",
-        "postcss": "^7.0.5",
-        "postcss-selector-parser": "^5.0.0-rc.4",
-        "postcss-value-parser": "^3.3.1"
+        "postcss": "^7.0.27",
+        "postcss-selector-parser": "^6.0.2",
+        "postcss-value-parser": "^4.0.2"
       },
       "dependencies": {
         "ansi-styles": {
@@ -14014,9 +13477,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -14024,6 +13487,12 @@
             "supports-color": "^6.1.0"
           }
         },
+        "postcss-value-parser": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+          "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
+          "dev": true
+        },
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -14086,9 +13555,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -14155,9 +13624,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -14223,9 +13692,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -14291,9 +13760,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -14359,9 +13828,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -14427,9 +13896,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -14455,37 +13924,13 @@
       }
     },
     "postcss-load-config": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz",
-      "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==",
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz",
+      "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==",
       "dev": true,
       "requires": {
-        "cosmiconfig": "^4.0.0",
+        "cosmiconfig": "^5.0.0",
         "import-cwd": "^2.0.0"
-      },
-      "dependencies": {
-        "cosmiconfig": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz",
-          "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==",
-          "dev": true,
-          "requires": {
-            "is-directory": "^0.3.1",
-            "js-yaml": "^3.9.0",
-            "parse-json": "^4.0.0",
-            "require-from-string": "^2.0.1"
-          }
-        },
-        "parse-json": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
-          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.3.1",
-            "json-parse-better-errors": "^1.0.1"
-          }
-        }
       }
     },
     "postcss-loader": {
@@ -14532,9 +13977,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -14542,6 +13987,17 @@
             "supports-color": "^6.1.0"
           }
         },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        },
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -14603,9 +14059,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -14676,9 +14132,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -14687,12 +14143,12 @@
           }
         },
         "postcss-selector-parser": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
-          "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+          "version": "3.1.2",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+          "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
           "dev": true,
           "requires": {
-            "dot-prop": "^4.1.1",
+            "dot-prop": "^5.2.0",
             "indexes-of": "^1.0.1",
             "uniq": "^1.0.1"
           }
@@ -14756,9 +14212,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -14827,9 +14283,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -14900,9 +14356,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -14971,9 +14427,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -14982,12 +14438,12 @@
           }
         },
         "postcss-selector-parser": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
-          "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+          "version": "3.1.2",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+          "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
           "dev": true,
           "requires": {
-            "dot-prop": "^4.1.1",
+            "dot-prop": "^5.2.0",
             "indexes-of": "^1.0.1",
             "uniq": "^1.0.1"
           }
@@ -15011,15 +14467,15 @@
     },
     "postcss-modules-extract-imports": {
       "version": "1.2.1",
-      "resolved": "http://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-1.2.1.tgz",
-      "integrity": "sha1-3IfjQUjsfqtfeR981YSYMzdbdBo=",
+      "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz",
+      "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==",
       "requires": {
         "postcss": "^6.0.1"
       }
     },
     "postcss-modules-local-by-default": {
       "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-1.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
       "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
       "requires": {
         "css-selector-tokenizer": "^0.7.0",
@@ -15028,7 +14484,7 @@
     },
     "postcss-modules-scope": {
       "version": "1.1.0",
-      "resolved": "http://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-1.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
       "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
       "requires": {
         "css-selector-tokenizer": "^0.7.0",
@@ -15037,7 +14493,7 @@
     },
     "postcss-modules-values": {
       "version": "1.3.0",
-      "resolved": "http://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-1.3.0.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
       "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
       "requires": {
         "icss-replace-symbols": "^1.1.0",
@@ -15085,9 +14541,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -15155,9 +14611,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -15226,9 +14682,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -15297,9 +14753,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -15367,9 +14823,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -15437,9 +14893,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -15507,9 +14963,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -15578,9 +15034,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -15647,9 +15103,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -15717,9 +15173,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -15788,9 +15244,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -15859,9 +15315,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -15887,22 +15343,15 @@
       }
     },
     "postcss-selector-parser": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
-      "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+      "version": "6.0.4",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz",
+      "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==",
       "dev": true,
       "requires": {
-        "cssesc": "^2.0.0",
+        "cssesc": "^3.0.0",
         "indexes-of": "^1.0.1",
-        "uniq": "^1.0.1"
-      },
-      "dependencies": {
-        "cssesc": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
-          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==",
-          "dev": true
-        }
+        "uniq": "^1.0.1",
+        "util-deprecate": "^1.0.2"
       }
     },
     "postcss-svgo": {
@@ -15949,9 +15398,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -16019,9 +15468,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -16048,32 +15497,33 @@
     },
     "postcss-value-parser": {
       "version": "3.3.1",
-      "resolved": "http://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
-      "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE="
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+      "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
     },
     "prelude-ls": {
       "version": "1.1.2",
-      "resolved": "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz",
+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
       "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
       "dev": true
     },
     "prepend-http": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
-      "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
       "dev": true
     },
     "preserve": {
       "version": "0.2.0",
-      "resolved": "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
       "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
       "dev": true
     },
     "prettier": {
-      "version": "1.16.3",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz",
-      "integrity": "sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==",
-      "dev": true
+      "version": "1.19.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
+      "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
+      "dev": true,
+      "optional": true
     },
     "pretty": {
       "version": "2.0.0",
@@ -16098,13 +15548,13 @@
       }
     },
     "pretty-error": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
-      "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz",
+      "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==",
       "dev": true,
       "requires": {
-        "renderkid": "^2.0.1",
-        "utila": "~0.4"
+        "lodash": "^4.17.20",
+        "renderkid": "^2.0.4"
       }
     },
     "pretty-format": {
@@ -16136,38 +15586,29 @@
     },
     "private": {
       "version": "0.1.8",
-      "resolved": "http://registry.npm.taobao.org/private/download/private-0.1.8.tgz",
-      "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8="
+      "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+      "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+      "dev": true
     },
     "process": {
       "version": "0.11.10",
-      "resolved": "http://registry.npm.taobao.org/process/download/process-0.11.10.tgz",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
       "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
     },
     "process-nextick-args": {
-      "version": "2.0.0",
-      "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz",
-      "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o="
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
     },
     "progress": {
       "version": "2.0.3",
-      "resolved": "http://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz",
-      "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=",
+      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
       "dev": true
     },
-    "promise": {
-      "version": "7.3.1",
-      "resolved": "http://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz",
-      "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "asap": "~2.0.3"
-      }
-    },
     "promise-inflight": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
       "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
     },
     "prompts": {
@@ -16187,18 +15628,18 @@
       "dev": true
     },
     "proxy-addr": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
-      "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
+      "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
       "dev": true,
       "requires": {
         "forwarded": "~0.1.2",
-        "ipaddr.js": "1.9.0"
+        "ipaddr.js": "1.9.1"
       }
     },
     "prr": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
       "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
     },
     "pseudomap": {
@@ -16208,15 +15649,15 @@
       "dev": true
     },
     "psl": {
-      "version": "1.1.31",
-      "resolved": "http://registry.npm.taobao.org/psl/download/psl-1.1.31.tgz",
-      "integrity": "sha1-6aqG0BAbWxBcvpOsa3hM1UcnYYQ=",
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+      "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
       "dev": true
     },
     "public-encrypt": {
       "version": "4.0.3",
-      "resolved": "http://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz",
-      "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=",
+      "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
       "requires": {
         "bn.js": "^4.1.0",
         "browserify-rsa": "^4.0.0",
@@ -16224,12 +15665,19 @@
         "parse-asn1": "^5.0.0",
         "randombytes": "^2.0.1",
         "safe-buffer": "^5.1.2"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+        }
       }
     },
     "pump": {
       "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz",
-      "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=",
+      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
       "requires": {
         "end-of-stream": "^1.1.0",
         "once": "^1.3.1"
@@ -16237,8 +15685,8 @@
     },
     "pumpify": {
       "version": "1.5.1",
-      "resolved": "http://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz",
-      "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=",
+      "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
       "requires": {
         "duplexify": "^3.6.0",
         "inherits": "^2.0.3",
@@ -16247,8 +15695,8 @@
       "dependencies": {
         "pump": {
           "version": "2.0.1",
-          "resolved": "http://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz",
-          "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+          "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
           "requires": {
             "end-of-stream": "^1.1.0",
             "once": "^1.3.1"
@@ -16258,8 +15706,8 @@
     },
     "punycode": {
       "version": "2.1.1",
-      "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz",
-      "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew="
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
     },
     "q": {
       "version": "1.5.1",
@@ -16269,60 +15717,47 @@
     },
     "qs": {
       "version": "6.5.2",
-      "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz",
-      "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
       "dev": true
     },
     "query-string": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
-      "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+      "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
       "dev": true,
       "requires": {
-        "decode-uri-component": "^0.2.0",
         "object-assign": "^4.1.0",
         "strict-uri-encode": "^1.0.0"
       }
     },
     "querystring": {
       "version": "0.2.0",
-      "resolved": "http://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
       "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
     },
     "querystring-es3": {
       "version": "0.2.1",
-      "resolved": "http://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz",
+      "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
       "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
     },
     "querystringify": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
-      "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
       "dev": true
     },
     "quill": {
-      "version": "1.3.6",
-      "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.6.tgz",
-      "integrity": "sha512-K0mvhimWZN6s+9OQ249CH2IEPZ9JmkFuCQeHAOQax3EZ2nDJ3wfGh59mnlQaZV2i7u8eFarx6wAtvQKgShojug==",
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz",
+      "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==",
       "requires": {
         "clone": "^2.1.1",
         "deep-equal": "^1.0.1",
         "eventemitter3": "^2.0.3",
-        "extend": "^3.0.1",
+        "extend": "^3.0.2",
         "parchment": "^1.1.4",
         "quill-delta": "^3.6.2"
-      },
-      "dependencies": {
-        "clone": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
-          "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
-        },
-        "eventemitter3": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz",
-          "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo="
-        }
       }
     },
     "quill-delta": {
@@ -16345,8 +15780,8 @@
     },
     "randomatic": {
       "version": "3.1.1",
-      "resolved": "http://registry.npm.taobao.org/randomatic/download/randomatic-3.1.1.tgz",
-      "integrity": "sha1-t3bvxZN1mE42xTey9RofCv8Noe0=",
+      "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
+      "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
       "dev": true,
       "requires": {
         "is-number": "^4.0.0",
@@ -16356,30 +15791,30 @@
       "dependencies": {
         "is-number": {
           "version": "4.0.0",
-          "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-4.0.0.tgz",
-          "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+          "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
           "dev": true
         },
         "kind-of": {
-          "version": "6.0.2",
-          "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz",
-          "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=",
+          "version": "6.0.3",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
           "dev": true
         }
       }
     },
     "randombytes": {
       "version": "2.1.0",
-      "resolved": "http://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz",
-      "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=",
+      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
       "requires": {
         "safe-buffer": "^5.1.0"
       }
     },
     "randomfill": {
       "version": "1.0.4",
-      "resolved": "http://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz",
-      "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=",
+      "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+      "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
       "requires": {
         "randombytes": "^2.0.5",
         "safe-buffer": "^5.1.0"
@@ -16405,7 +15840,7 @@
     },
     "read-pkg": {
       "version": "1.1.0",
-      "resolved": "http://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
       "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
       "dev": true,
       "requires": {
@@ -16416,7 +15851,7 @@
       "dependencies": {
         "path-type": {
           "version": "1.1.0",
-          "resolved": "http://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
           "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
           "dev": true,
           "requires": {
@@ -16427,7 +15862,7 @@
         },
         "pify": {
           "version": "2.3.0",
-          "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
           "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
           "dev": true
         }
@@ -16435,7 +15870,7 @@
     },
     "read-pkg-up": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
       "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
       "dev": true,
       "requires": {
@@ -16445,7 +15880,7 @@
       "dependencies": {
         "find-up": {
           "version": "1.1.2",
-          "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
           "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
           "dev": true,
           "requires": {
@@ -16455,7 +15890,7 @@
         },
         "path-exists": {
           "version": "2.1.0",
-          "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
           "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
           "dev": true,
           "requires": {
@@ -16465,9 +15900,9 @@
       }
     },
     "readable-stream": {
-      "version": "2.3.6",
-      "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz",
-      "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=",
+      "version": "2.3.7",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
       "requires": {
         "core-util-is": "~1.0.0",
         "inherits": "~2.0.3",
@@ -16480,19 +15915,18 @@
       "dependencies": {
         "isarray": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
           "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
         }
       }
     },
     "readdirp": {
-      "version": "2.2.1",
-      "resolved": "http://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz",
-      "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
+      "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+      "optional": true,
       "requires": {
-        "graceful-fs": "^4.1.11",
-        "micromatch": "^3.1.10",
-        "readable-stream": "^2.0.2"
+        "picomatch": "^2.2.1"
       }
     },
     "realpath-native": {
@@ -16505,35 +15939,35 @@
       }
     },
     "regenerate": {
-      "version": "1.4.0",
-      "resolved": "http://registry.npm.taobao.org/regenerate/download/regenerate-1.4.0.tgz",
-      "integrity": "sha1-SoVuxLVuQHfFV1icroXnpMiGmhE="
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+      "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="
     },
     "regenerate-unicode-properties": {
-      "version": "8.0.2",
-      "resolved": "http://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.0.2.tgz",
-      "integrity": "sha1-ezj6opYlI3bTY1WM+9qQyc5wlmI=",
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
+      "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
       "requires": {
         "regenerate": "^1.4.0"
       }
     },
     "regenerator-runtime": {
       "version": "0.11.1",
-      "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz",
-      "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk="
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
     },
     "regenerator-transform": {
-      "version": "0.13.4",
-      "resolved": "http://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.13.4.tgz",
-      "integrity": "sha1-GPZ2PPE4LGnDbfdsbOEizGlChPs=",
+      "version": "0.14.5",
+      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
+      "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
       "requires": {
-        "private": "^0.1.6"
+        "@babel/runtime": "^7.8.4"
       }
     },
     "regex-cache": {
       "version": "0.4.4",
-      "resolved": "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz",
-      "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=",
+      "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+      "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
       "dev": true,
       "requires": {
         "is-equal-shallow": "^0.1.3"
@@ -16541,17 +15975,21 @@
     },
     "regex-not": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz",
-      "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=",
+      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
       "requires": {
         "extend-shallow": "^3.0.2",
         "safe-regex": "^1.1.0"
       }
     },
-    "regexp-tree": {
-      "version": "0.1.5",
-      "resolved": "http://registry.npm.taobao.org/regexp-tree/download/regexp-tree-0.1.5.tgz",
-      "integrity": "sha1-fNcfyhcZjQS0F279eXE/KZgAk5c="
+    "regexp.prototype.flags": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
+      "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
+      "requires": {
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.17.0-next.1"
+      }
     },
     "regexpp": {
       "version": "1.1.0",
@@ -16561,41 +15999,41 @@
       "optional": true
     },
     "regexpu-core": {
-      "version": "4.5.4",
-      "resolved": "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.5.4.tgz",
-      "integrity": "sha1-CA2dAiiaqH/hZnpPUTa8mKauuq4=",
+      "version": "4.7.1",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz",
+      "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==",
       "requires": {
         "regenerate": "^1.4.0",
-        "regenerate-unicode-properties": "^8.0.2",
-        "regjsgen": "^0.5.0",
-        "regjsparser": "^0.6.0",
+        "regenerate-unicode-properties": "^8.2.0",
+        "regjsgen": "^0.5.1",
+        "regjsparser": "^0.6.4",
         "unicode-match-property-ecmascript": "^1.0.4",
-        "unicode-match-property-value-ecmascript": "^1.1.0"
+        "unicode-match-property-value-ecmascript": "^1.2.0"
       }
     },
     "regjsgen": {
-      "version": "0.5.0",
-      "resolved": "http://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.0.tgz",
-      "integrity": "sha1-p2NNwI+JIJwgSa3aNSVxH7lyZd0="
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
+      "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A=="
     },
     "regjsparser": {
-      "version": "0.6.0",
-      "resolved": "http://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.0.tgz",
-      "integrity": "sha1-8eaui32iuulsmTmbhozWyTOiupw=",
+      "version": "0.6.4",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz",
+      "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==",
       "requires": {
         "jsesc": "~0.5.0"
       },
       "dependencies": {
         "jsesc": {
           "version": "0.5.0",
-          "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz",
+          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
           "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
         }
       }
     },
     "regression": {
       "version": "2.0.1",
-      "resolved": "http://registry.npm.taobao.org/regression/download/regression-2.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/regression/-/regression-2.0.1.tgz",
       "integrity": "sha1-jSnD6CJKEIUMNeM36FqLL6w7DIc="
     },
     "relateurl": {
@@ -16606,20 +16044,20 @@
     },
     "remove-trailing-separator": {
       "version": "1.1.0",
-      "resolved": "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
       "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
     },
     "renderkid": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz",
-      "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.4.tgz",
+      "integrity": "sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==",
       "dev": true,
       "requires": {
         "css-select": "^1.1.0",
         "dom-converter": "^0.2",
         "htmlparser2": "^3.3.0",
-        "strip-ansi": "^3.0.0",
-        "utila": "^0.4.0"
+        "lodash": "^4.17.20",
+        "strip-ansi": "^3.0.0"
       },
       "dependencies": {
         "css-select": {
@@ -16634,6 +16072,12 @@
             "nth-check": "~1.0.1"
           }
         },
+        "css-what": {
+          "version": "2.1.3",
+          "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
+          "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
+          "dev": true
+        },
         "domutils": {
           "version": "1.5.1",
           "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
@@ -16648,17 +16092,17 @@
     },
     "repeat-element": {
       "version": "1.1.3",
-      "resolved": "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz",
-      "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4="
+      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+      "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
     },
     "repeat-string": {
       "version": "1.6.1",
-      "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz",
+      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
       "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
     },
     "repeating": {
       "version": "2.0.1",
-      "resolved": "http://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
       "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
       "dev": true,
       "requires": {
@@ -16666,9 +16110,9 @@
       }
     },
     "request": {
-      "version": "2.88.0",
-      "resolved": "http://registry.npm.taobao.org/request/download/request-2.88.0.tgz",
-      "integrity": "sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=",
+      "version": "2.88.2",
+      "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+      "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
       "dev": true,
       "requires": {
         "aws-sign2": "~0.7.0",
@@ -16678,7 +16122,7 @@
         "extend": "~3.0.2",
         "forever-agent": "~0.6.1",
         "form-data": "~2.3.2",
-        "har-validator": "~5.1.0",
+        "har-validator": "~5.1.3",
         "http-signature": "~1.2.0",
         "is-typedarray": "~1.0.0",
         "isstream": "~0.1.2",
@@ -16688,27 +16132,27 @@
         "performance-now": "^2.1.0",
         "qs": "~6.5.2",
         "safe-buffer": "^5.1.2",
-        "tough-cookie": "~2.4.3",
+        "tough-cookie": "~2.5.0",
         "tunnel-agent": "^0.6.0",
         "uuid": "^3.3.2"
       }
     },
     "request-promise-core": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",
-      "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
+      "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
       "dev": true,
       "requires": {
-        "lodash": "^4.17.11"
+        "lodash": "^4.17.19"
       }
     },
     "request-promise-native": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz",
-      "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==",
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz",
+      "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
       "dev": true,
       "requires": {
-        "request-promise-core": "1.1.2",
+        "request-promise-core": "1.1.4",
         "stealthy-require": "^1.1.1",
         "tough-cookie": "^2.3.3"
       }
@@ -16719,15 +16163,9 @@
       "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
       "dev": true
     },
-    "require-from-string": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
-      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
-      "dev": true
-    },
     "require-main-filename": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
       "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
       "dev": true
     },
@@ -16760,9 +16198,9 @@
       "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
     },
     "resolve": {
-      "version": "1.10.0",
-      "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.10.0.tgz",
-      "integrity": "sha1-O9qur0XMB/N1ZW39LlTtCBCxAbo=",
+      "version": "1.17.0",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+      "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
       "requires": {
         "path-parse": "^1.0.6"
       }
@@ -16793,12 +16231,12 @@
     },
     "resolve-url": {
       "version": "0.2.1",
-      "resolved": "http://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz",
+      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
       "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
     },
     "restore-cursor": {
       "version": "2.0.0",
-      "resolved": "http://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
       "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
       "dev": true,
       "requires": {
@@ -16808,7 +16246,7 @@
     },
     "resumer": {
       "version": "0.0.0",
-      "resolved": "http://registry.npm.taobao.org/resumer/download/resumer-0.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz",
       "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=",
       "requires": {
         "through": "~2.3.4"
@@ -16816,8 +16254,14 @@
     },
     "ret": {
       "version": "0.1.15",
-      "resolved": "http://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz",
-      "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w="
+      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+    },
+    "retry": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+      "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+      "dev": true
     },
     "rgb-regex": {
       "version": "1.0.1",
@@ -16833,24 +16277,24 @@
     },
     "right-align": {
       "version": "0.1.3",
-      "resolved": "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz",
+      "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
       "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
       "requires": {
         "align-text": "^0.1.1"
       }
     },
     "rimraf": {
-      "version": "2.6.3",
-      "resolved": "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz",
-      "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+      "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
       "requires": {
         "glob": "^7.1.3"
       }
     },
     "ripemd160": {
       "version": "2.0.2",
-      "resolved": "http://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz",
-      "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=",
+      "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+      "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
       "requires": {
         "hash-base": "^3.0.0",
         "inherits": "^2.0.1"
@@ -16858,7 +16302,7 @@
     },
     "rollup": {
       "version": "0.25.8",
-      "resolved": "http://registry.npm.taobao.org/rollup/download/rollup-0.25.8.tgz",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.25.8.tgz",
       "integrity": "sha1-v2zoO4dRDRY0Ru6qV37WpvxYNeA=",
       "requires": {
         "chalk": "^1.1.1",
@@ -16873,17 +16317,14 @@
       "dev": true
     },
     "run-async": {
-      "version": "2.3.0",
-      "resolved": "http://registry.npm.taobao.org/run-async/download/run-async-2.3.0.tgz",
-      "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
-      "dev": true,
-      "requires": {
-        "is-promise": "^2.1.0"
-      }
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+      "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
+      "dev": true
     },
     "run-queue": {
       "version": "1.0.3",
-      "resolved": "http://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz",
+      "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
       "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
       "requires": {
         "aproba": "^1.1.1"
@@ -16891,12 +16332,12 @@
     },
     "rw": {
       "version": "1.3.3",
-      "resolved": "http://registry.npm.taobao.org/rw/download/rw-1.3.3.tgz",
+      "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
       "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
     },
     "rx": {
       "version": "4.1.0",
-      "resolved": "http://registry.npm.taobao.org/rx/download/rx-4.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
       "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=",
       "dev": true
     },
@@ -16918,9 +16359,9 @@
       }
     },
     "rxjs": {
-      "version": "6.4.0",
-      "resolved": "http://registry.npm.taobao.org/rxjs/download/rxjs-6.4.0.tgz",
-      "integrity": "sha1-87sP572n+2nerAwW8XtQsLh5BQQ=",
+      "version": "6.6.3",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz",
+      "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==",
       "dev": true,
       "requires": {
         "tslib": "^1.9.0"
@@ -16928,12 +16369,12 @@
     },
     "safe-buffer": {
       "version": "5.1.2",
-      "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
-      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
     },
     "safe-regex": {
       "version": "1.1.0",
-      "resolved": "http://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
       "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
       "requires": {
         "ret": "~0.1.10"
@@ -16941,8 +16382,8 @@
     },
     "safer-buffer": {
       "version": "2.1.2",
-      "resolved": "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz",
-      "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
     "sane": {
       "version": "2.5.2",
@@ -16959,6 +16400,37 @@
         "minimist": "^1.1.1",
         "walker": "~1.0.5",
         "watch": "~0.18.0"
+      },
+      "dependencies": {
+        "anymatch": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+          "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+          "dev": true,
+          "requires": {
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
+          }
+        },
+        "fsevents": {
+          "version": "1.2.13",
+          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+          "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "bindings": "^1.5.0"
+          }
+        },
+        "normalize-path": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+          "dev": true,
+          "requires": {
+            "remove-trailing-separator": "^1.0.1"
+          }
+        }
       }
     },
     "sax": {
@@ -16968,18 +16440,18 @@
       "dev": true
     },
     "schema-utils": {
-      "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz",
-      "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
+      "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
       "requires": {
-        "ajv": "^6.1.0",
-        "ajv-errors": "^1.0.0",
-        "ajv-keywords": "^3.1.0"
+        "@types/json-schema": "^7.0.5",
+        "ajv": "^6.12.4",
+        "ajv-keywords": "^3.5.2"
       }
     },
     "select": {
       "version": "1.1.2",
-      "resolved": "http://registry.npm.taobao.org/select/download/select-1.1.2.tgz",
+      "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
       "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
     },
     "select-hose": {
@@ -16989,18 +16461,18 @@
       "dev": true
     },
     "selfsigned": {
-      "version": "1.10.4",
-      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz",
-      "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==",
+      "version": "1.10.8",
+      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz",
+      "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==",
       "dev": true,
       "requires": {
-        "node-forge": "0.7.5"
+        "node-forge": "^0.10.0"
       }
     },
     "semver": {
-      "version": "5.7.0",
-      "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.7.0.tgz",
-      "integrity": "sha1-eQp89v6lRZuslhELKbYEEtyP+Ws="
+      "version": "5.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
     },
     "send": {
       "version": "0.17.1",
@@ -17045,13 +16517,22 @@
           "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
           "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
           "dev": true
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+          "dev": true
         }
       }
     },
     "serialize-javascript": {
-      "version": "1.7.0",
-      "resolved": "http://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-1.7.0.tgz",
-      "integrity": "sha1-1uDfsqODKoyURo5usduX5VoZKmU="
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
+      "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
+      "requires": {
+        "randombytes": "^2.1.0"
+      }
     },
     "serve-index": {
       "version": "1.9.1",
@@ -17089,10 +16570,10 @@
             "statuses": ">= 1.4.0 < 2"
           }
         },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
           "dev": true
         },
         "setprototypeof": {
@@ -17122,9 +16603,9 @@
       "dev": true
     },
     "set-value": {
-      "version": "2.0.0",
-      "resolved": "http://registry.npm.taobao.org/set-value/download/set-value-2.0.0.tgz",
-      "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+      "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
       "requires": {
         "extend-shallow": "^2.0.1",
         "is-extendable": "^0.1.1",
@@ -17134,7 +16615,7 @@
       "dependencies": {
         "extend-shallow": {
           "version": "2.0.1",
-          "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "requires": {
             "is-extendable": "^0.1.0"
@@ -17144,7 +16625,7 @@
     },
     "setimmediate": {
       "version": "1.0.5",
-      "resolved": "http://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz",
+      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
       "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
     },
     "setprototypeof": {
@@ -17155,17 +16636,17 @@
     },
     "sha.js": {
       "version": "2.4.11",
-      "resolved": "http://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz",
-      "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=",
+      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+      "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
       "requires": {
         "inherits": "^2.0.1",
         "safe-buffer": "^5.0.1"
       }
     },
     "shallow-equal": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.1.0.tgz",
-      "integrity": "sha512-0SW1nWo1hnabO62SEeHsl8nmTVVEzguVWZCj5gaQrgWAxz/BaCja4OWdJBWLVPDxdtE/WU7c98uUCCXyPHSCvw=="
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz",
+      "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA=="
     },
     "shallowequal": {
       "version": "1.1.0",
@@ -17174,7 +16655,7 @@
     },
     "shebang-command": {
       "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
       "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
       "dev": true,
       "requires": {
@@ -17183,21 +16664,15 @@
     },
     "shebang-regex": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
       "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
       "dev": true
     },
     "shell-quote": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
-      "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
-      "dev": true,
-      "requires": {
-        "array-filter": "~0.0.0",
-        "array-map": "~0.0.0",
-        "array-reduce": "~0.0.0",
-        "jsonify": "~0.0.0"
-      }
+      "version": "1.7.2",
+      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
+      "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
+      "dev": true
     },
     "shellwords": {
       "version": "0.1.1",
@@ -17212,15 +16687,15 @@
       "dev": true
     },
     "signal-exit": {
-      "version": "3.0.2",
-      "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz",
-      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+      "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
       "dev": true
     },
     "simple-statistics": {
       "version": "6.1.1",
-      "resolved": "http://registry.npm.taobao.org/simple-statistics/download/simple-statistics-6.1.1.tgz",
-      "integrity": "sha1-46B5n/xJkU1vQhxaSsWF9qE+K60="
+      "resolved": "https://registry.npmjs.org/simple-statistics/-/simple-statistics-6.1.1.tgz",
+      "integrity": "sha512-zGwn0DDRa9Zel4H4n2pjTFIyGoAGpnpjrGIctreCxj5XWrcx9v7Xy7270FkC967WMmcvuc8ZU7m0ZG+hGN7gAA=="
     },
     "simple-swizzle": {
       "version": "0.2.2",
@@ -17263,8 +16738,8 @@
     },
     "snapdragon": {
       "version": "0.8.2",
-      "resolved": "http://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz",
-      "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=",
+      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
       "requires": {
         "base": "^0.11.1",
         "debug": "^2.2.0",
@@ -17278,15 +16753,15 @@
       "dependencies": {
         "debug": {
           "version": "2.6.9",
-          "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
-          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
           "requires": {
             "ms": "2.0.0"
           }
         },
         "define-property": {
           "version": "0.2.5",
-          "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "requires": {
             "is-descriptor": "^0.1.0"
@@ -17294,28 +16769,23 @@
         },
         "extend-shallow": {
           "version": "2.0.1",
-          "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "requires": {
             "is-extendable": "^0.1.0"
           }
         },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
-        },
         "source-map": {
           "version": "0.5.7",
-          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
           "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
         }
       }
     },
     "snapdragon-node": {
       "version": "2.1.1",
-      "resolved": "http://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz",
-      "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=",
+      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
       "requires": {
         "define-property": "^1.0.0",
         "isobject": "^3.0.0",
@@ -17324,7 +16794,7 @@
       "dependencies": {
         "define-property": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
           "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
           "requires": {
             "is-descriptor": "^1.0.0"
@@ -17332,24 +16802,24 @@
         },
         "is-accessor-descriptor": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "requires": {
             "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "requires": {
             "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
           "version": "1.0.2",
-          "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
-          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "requires": {
             "is-accessor-descriptor": "^1.0.0",
             "is-data-descriptor": "^1.0.0",
@@ -17357,34 +16827,35 @@
           }
         },
         "kind-of": {
-          "version": "6.0.2",
-          "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz",
-          "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE="
+          "version": "6.0.3",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
         }
       }
     },
     "snapdragon-util": {
       "version": "3.0.1",
-      "resolved": "http://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz",
-      "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=",
+      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
       "requires": {
         "kind-of": "^3.2.0"
       }
     },
     "sockjs": {
-      "version": "0.3.19",
-      "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
-      "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
+      "version": "0.3.20",
+      "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz",
+      "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==",
       "dev": true,
       "requires": {
         "faye-websocket": "^0.10.0",
-        "uuid": "^3.0.1"
+        "uuid": "^3.4.0",
+        "websocket-driver": "0.6.5"
       }
     },
     "sockjs-client": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz",
-      "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz",
+      "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==",
       "dev": true,
       "requires": {
         "debug": "^3.2.5",
@@ -17396,29 +16867,35 @@
       },
       "dependencies": {
         "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "version": "3.2.7",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
           "dev": true,
           "requires": {
             "ms": "^2.1.1"
           }
         },
         "faye-websocket": {
-          "version": "0.11.1",
-          "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
-          "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
+          "version": "0.11.3",
+          "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
+          "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
           "dev": true,
           "requires": {
             "websocket-driver": ">=0.5.1"
           }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
         }
       }
     },
     "sort-keys": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
-      "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
       "dev": true,
       "requires": {
         "is-plain-obj": "^1.0.0"
@@ -17426,23 +16903,23 @@
     },
     "source-list-map": {
       "version": "2.0.1",
-      "resolved": "http://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz",
-      "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ="
+      "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+      "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw=="
     },
     "source-map": {
       "version": "0.1.32",
-      "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.1.32.tgz",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz",
       "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=",
       "requires": {
         "amdefine": ">=0.0.4"
       }
     },
     "source-map-resolve": {
-      "version": "0.5.2",
-      "resolved": "http://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.2.tgz",
-      "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=",
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+      "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
       "requires": {
-        "atob": "^2.1.1",
+        "atob": "^2.1.2",
         "decode-uri-component": "^0.2.0",
         "resolve-url": "^0.2.1",
         "source-map-url": "^0.4.0",
@@ -17451,7 +16928,7 @@
     },
     "source-map-support": {
       "version": "0.3.3",
-      "resolved": "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.3.3.tgz",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.3.3.tgz",
       "integrity": "sha1-NJAJd9W6PwfHdX7nLnO7GptTdU8=",
       "requires": {
         "source-map": "0.1.32"
@@ -17459,13 +16936,13 @@
     },
     "source-map-url": {
       "version": "0.4.0",
-      "resolved": "http://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz",
+      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
       "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
     },
     "spdx-correct": {
-      "version": "3.1.0",
-      "resolved": "http://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.0.tgz",
-      "integrity": "sha1-+4PlBERSaPFUsHTiGMh8ADzTHfQ=",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+      "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
       "dev": true,
       "requires": {
         "spdx-expression-parse": "^3.0.0",
@@ -17473,15 +16950,15 @@
       }
     },
     "spdx-exceptions": {
-      "version": "2.2.0",
-      "resolved": "http://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.2.0.tgz",
-      "integrity": "sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc=",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+      "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
       "dev": true
     },
     "spdx-expression-parse": {
-      "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.0.tgz",
-      "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
       "dev": true,
       "requires": {
         "spdx-exceptions": "^2.1.0",
@@ -17489,15 +16966,15 @@
       }
     },
     "spdx-license-ids": {
-      "version": "3.0.4",
-      "resolved": "http://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.4.tgz",
-      "integrity": "sha1-dezRqI3owYTvAV6vtRtbSL/RG7E=",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
+      "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==",
       "dev": true
     },
     "spdy": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz",
-      "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
+      "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
       "dev": true,
       "requires": {
         "debug": "^4.1.0",
@@ -17508,13 +16985,19 @@
       },
       "dependencies": {
         "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+          "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
           "dev": true,
           "requires": {
-            "ms": "^2.1.1"
+            "ms": "2.1.2"
           }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
         }
       }
     },
@@ -17533,18 +17016,24 @@
       },
       "dependencies": {
         "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+          "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
           "dev": true,
           "requires": {
-            "ms": "^2.1.1"
+            "ms": "2.1.2"
           }
         },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
+        },
         "readable-stream": {
-          "version": "3.4.0",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
-          "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+          "version": "3.6.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+          "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
           "dev": true,
           "requires": {
             "inherits": "^2.0.3",
@@ -17556,22 +17045,22 @@
     },
     "split-string": {
       "version": "3.1.0",
-      "resolved": "http://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz",
-      "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=",
+      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
       "requires": {
         "extend-shallow": "^3.0.0"
       }
     },
     "sprintf-js": {
       "version": "1.0.3",
-      "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
       "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
       "dev": true
     },
     "sshpk": {
       "version": "1.16.1",
-      "resolved": "http://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz",
-      "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=",
+      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+      "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
       "dev": true,
       "requires": {
         "asn1": "~0.2.3",
@@ -17587,8 +17076,8 @@
     },
     "ssri": {
       "version": "6.0.1",
-      "resolved": "http://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz",
-      "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=",
+      "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+      "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
       "requires": {
         "figgy-pudding": "^3.5.1"
       }
@@ -17600,20 +17089,31 @@
       "dev": true
     },
     "stack-utils": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
-      "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
-      "dev": true
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.4.tgz",
+      "integrity": "sha512-IPDJfugEGbfizBwBZRZ3xpccMdRyP5lqsBWXGQWimVjua/ccLCeMOAVjlc1R7LxFjo5sEDhyNIXd8mo/AiDS9w==",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "^2.0.0"
+      },
+      "dependencies": {
+        "escape-string-regexp": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+          "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+          "dev": true
+        }
+      }
     },
     "stackframe": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz",
-      "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz",
+      "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==",
       "dev": true
     },
     "static-extend": {
       "version": "0.1.2",
-      "resolved": "http://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz",
+      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
       "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
       "requires": {
         "define-property": "^0.2.5",
@@ -17622,7 +17122,7 @@
       "dependencies": {
         "define-property": {
           "version": "0.2.5",
-          "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "requires": {
             "is-descriptor": "^0.1.0"
@@ -17644,8 +17144,8 @@
     },
     "stream-browserify": {
       "version": "2.0.2",
-      "resolved": "http://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz",
-      "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=",
+      "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+      "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
       "requires": {
         "inherits": "~2.0.1",
         "readable-stream": "^2.0.2"
@@ -17653,8 +17153,8 @@
     },
     "stream-each": {
       "version": "1.2.3",
-      "resolved": "http://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz",
-      "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=",
+      "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+      "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
       "requires": {
         "end-of-stream": "^1.1.0",
         "stream-shift": "^1.0.0"
@@ -17662,8 +17162,8 @@
     },
     "stream-http": {
       "version": "2.8.3",
-      "resolved": "http://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz",
-      "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=",
+      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+      "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
       "requires": {
         "builtin-status-codes": "^3.0.0",
         "inherits": "^2.0.1",
@@ -17673,9 +17173,9 @@
       }
     },
     "stream-shift": {
-      "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.0.tgz",
-      "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI="
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+      "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
     },
     "strict-uri-encode": {
       "version": "1.1.0",
@@ -17717,8 +17217,8 @@
     },
     "string-width": {
       "version": "2.1.1",
-      "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz",
-      "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+      "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
       "dev": true,
       "requires": {
         "is-fullwidth-code-point": "^2.0.0",
@@ -17727,64 +17227,190 @@
       "dependencies": {
         "ansi-regex": {
           "version": "3.0.0",
-          "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
           "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
           "dev": true
         },
         "strip-ansi": {
           "version": "4.0.0",
-          "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
           "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
           "dev": true,
           "requires": {
-            "ansi-regex": "^3.0.0"
+            "ansi-regex": "^3.0.0"
+          }
+        }
+      }
+    },
+    "string.prototype.padend": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.1.tgz",
+      "integrity": "sha512-eCzTASPnoCr5Ht+Vn1YXgm8SB015hHKgEIMu9Nr9bQmLhRBxKRfmzSj/IQsxDFc8JInJDDFA0qXwK+xxI7wDkg==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.18.0-next.1"
+      },
+      "dependencies": {
+        "es-abstract": {
+          "version": "1.18.0-next.1",
+          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+          "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+          "dev": true,
+          "requires": {
+            "es-to-primitive": "^1.2.1",
+            "function-bind": "^1.1.1",
+            "has": "^1.0.3",
+            "has-symbols": "^1.0.1",
+            "is-callable": "^1.2.2",
+            "is-negative-zero": "^2.0.0",
+            "is-regex": "^1.1.1",
+            "object-inspect": "^1.8.0",
+            "object-keys": "^1.1.1",
+            "object.assign": "^4.1.1",
+            "string.prototype.trimend": "^1.0.1",
+            "string.prototype.trimstart": "^1.0.1"
+          }
+        },
+        "is-regex": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+          "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+          "dev": true,
+          "requires": {
+            "has-symbols": "^1.0.1"
+          }
+        },
+        "object-inspect": {
+          "version": "1.8.0",
+          "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+          "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
+          "dev": true
+        }
+      }
+    },
+    "string.prototype.padstart": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.1.tgz",
+      "integrity": "sha512-kcFjKhQYg40AK9MITCWYr/vIebruAD01sc/fxi8szHJaEG7Rke4XHw6LU9c1VWXh/+J/PxvWLLf/aIAGKhXkAQ==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.18.0-next.1"
+      },
+      "dependencies": {
+        "es-abstract": {
+          "version": "1.18.0-next.1",
+          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+          "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+          "dev": true,
+          "requires": {
+            "es-to-primitive": "^1.2.1",
+            "function-bind": "^1.1.1",
+            "has": "^1.0.3",
+            "has-symbols": "^1.0.1",
+            "is-callable": "^1.2.2",
+            "is-negative-zero": "^2.0.0",
+            "is-regex": "^1.1.1",
+            "object-inspect": "^1.8.0",
+            "object-keys": "^1.1.1",
+            "object.assign": "^4.1.1",
+            "string.prototype.trimend": "^1.0.1",
+            "string.prototype.trimstart": "^1.0.1"
+          }
+        },
+        "is-regex": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+          "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+          "dev": true,
+          "requires": {
+            "has-symbols": "^1.0.1"
           }
+        },
+        "object-inspect": {
+          "version": "1.8.0",
+          "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+          "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
+          "dev": true
         }
       }
     },
-    "string.prototype.padend": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz",
-      "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=",
-      "dev": true,
+    "string.prototype.trim": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.3.tgz",
+      "integrity": "sha512-16IL9pIBA5asNOSukPfxX2W68BaBvxyiRK16H3RA/lWW9BDosh+w7f+LhomPHpXJ82QEe7w7/rY/S1CV97raLg==",
       "requires": {
-        "define-properties": "^1.1.2",
-        "es-abstract": "^1.4.3",
-        "function-bind": "^1.0.2"
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.18.0-next.1"
+      },
+      "dependencies": {
+        "es-abstract": {
+          "version": "1.18.0-next.1",
+          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+          "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+          "requires": {
+            "es-to-primitive": "^1.2.1",
+            "function-bind": "^1.1.1",
+            "has": "^1.0.3",
+            "has-symbols": "^1.0.1",
+            "is-callable": "^1.2.2",
+            "is-negative-zero": "^2.0.0",
+            "is-regex": "^1.1.1",
+            "object-inspect": "^1.8.0",
+            "object-keys": "^1.1.1",
+            "object.assign": "^4.1.1",
+            "string.prototype.trimend": "^1.0.1",
+            "string.prototype.trimstart": "^1.0.1"
+          }
+        },
+        "is-regex": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+          "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+          "requires": {
+            "has-symbols": "^1.0.1"
+          }
+        },
+        "object-inspect": {
+          "version": "1.8.0",
+          "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+          "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA=="
+        }
       }
     },
-    "string.prototype.padstart": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz",
-      "integrity": "sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI=",
-      "dev": true,
+    "string.prototype.trimend": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz",
+      "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==",
       "requires": {
-        "define-properties": "^1.1.2",
-        "es-abstract": "^1.4.3",
-        "function-bind": "^1.0.2"
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3"
       }
     },
-    "string.prototype.trim": {
-      "version": "1.1.2",
-      "resolved": "http://registry.npm.taobao.org/string.prototype.trim/download/string.prototype.trim-1.1.2.tgz",
-      "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=",
+    "string.prototype.trimstart": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz",
+      "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==",
       "requires": {
-        "define-properties": "^1.1.2",
-        "es-abstract": "^1.5.0",
-        "function-bind": "^1.0.2"
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3"
       }
     },
     "string_decoder": {
       "version": "1.1.1",
-      "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz",
-      "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
       "requires": {
         "safe-buffer": "~5.1.0"
       }
     },
     "strip-ansi": {
       "version": "3.0.1",
-      "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
       "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
       "requires": {
         "ansi-regex": "^2.0.0"
@@ -17792,7 +17418,7 @@
     },
     "strip-bom": {
       "version": "2.0.0",
-      "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
       "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
       "dev": true,
       "requires": {
@@ -17805,6 +17431,12 @@
       "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
       "dev": true
     },
+    "strip-final-newline": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+      "dev": true
+    },
     "strip-indent": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
@@ -17813,17 +17445,29 @@
     },
     "strip-json-comments": {
       "version": "2.0.1",
-      "resolved": "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
       "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
       "dev": true
     },
     "style-loader": {
       "version": "0.23.1",
-      "resolved": "http://registry.npm.taobao.org/style-loader/download/style-loader-0.23.1.tgz",
-      "integrity": "sha1-y5FUYG8+dxq2xKtjcCahBJF02SU=",
+      "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
+      "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==",
       "requires": {
         "loader-utils": "^1.1.0",
         "schema-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
       }
     },
     "stylehacks": {
@@ -17869,9 +17513,9 @@
           }
         },
         "postcss": {
-          "version": "7.0.16",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
-          "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+          "version": "7.0.35",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
           "dev": true,
           "requires": {
             "chalk": "^2.4.2",
@@ -17880,12 +17524,12 @@
           }
         },
         "postcss-selector-parser": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
-          "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+          "version": "3.1.2",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+          "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
           "dev": true,
           "requires": {
-            "dot-prop": "^4.1.1",
+            "dot-prop": "^5.2.0",
             "indexes-of": "^1.0.1",
             "uniq": "^1.0.1"
           }
@@ -17909,7 +17553,7 @@
     },
     "supports-color": {
       "version": "2.0.0",
-      "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
       "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
     },
     "svg-tags": {
@@ -17919,18 +17563,17 @@
       "dev": true
     },
     "svgo": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz",
-      "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==",
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
+      "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
       "dev": true,
       "requires": {
         "chalk": "^2.4.1",
         "coa": "^2.0.2",
         "css-select": "^2.0.0",
         "css-select-base-adapter": "^0.1.1",
-        "css-tree": "1.0.0-alpha.28",
-        "css-url-regex": "^1.1.0",
-        "csso": "^3.5.1",
+        "css-tree": "1.0.0-alpha.37",
+        "csso": "^4.0.2",
         "js-yaml": "^3.13.1",
         "mkdirp": "~0.5.1",
         "object.values": "^1.1.0",
@@ -17972,9 +17615,9 @@
       }
     },
     "symbol-tree": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
-      "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
       "dev": true
     },
     "table": {
@@ -18062,48 +17705,50 @@
     },
     "tapable": {
       "version": "1.1.3",
-      "resolved": "http://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz",
-      "integrity": "sha1-ofzMBrWNth/XpF2i2kT186Pme6I="
+      "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+      "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
     },
     "tape": {
-      "version": "4.10.1",
-      "resolved": "http://registry.npm.taobao.org/tape/download/tape-4.10.1.tgz",
-      "integrity": "sha1-9zvmCIjcsSDwi1f5R69lqClQal8=",
+      "version": "4.13.3",
+      "resolved": "https://registry.npmjs.org/tape/-/tape-4.13.3.tgz",
+      "integrity": "sha512-0/Y20PwRIUkQcTCSi4AASs+OANZZwqPKaipGCEwp10dQMipVvSZwUUCi01Y/OklIGyHKFhIcjock+DKnBfLAFw==",
       "requires": {
-        "deep-equal": "~1.0.1",
+        "deep-equal": "~1.1.1",
         "defined": "~1.0.0",
+        "dotignore": "~0.1.2",
         "for-each": "~0.3.3",
         "function-bind": "~1.1.1",
-        "glob": "~7.1.3",
+        "glob": "~7.1.6",
         "has": "~1.0.3",
-        "inherits": "~2.0.3",
-        "minimist": "~1.2.0",
-        "object-inspect": "~1.6.0",
-        "resolve": "~1.10.0",
+        "inherits": "~2.0.4",
+        "is-regex": "~1.0.5",
+        "minimist": "~1.2.5",
+        "object-inspect": "~1.7.0",
+        "resolve": "~1.17.0",
         "resumer": "~0.0.0",
-        "string.prototype.trim": "~1.1.2",
+        "string.prototype.trim": "~1.2.1",
         "through": "~2.3.8"
       }
     },
     "terser": {
-      "version": "3.17.0",
-      "resolved": "http://registry.npm.taobao.org/terser/download/terser-3.17.0.tgz",
-      "integrity": "sha1-+I/77aDetWN/nSSw2mb04VqxDLI=",
+      "version": "4.8.0",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
+      "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
       "requires": {
-        "commander": "^2.19.0",
+        "commander": "^2.20.0",
         "source-map": "~0.6.1",
-        "source-map-support": "~0.5.10"
+        "source-map-support": "~0.5.12"
       },
       "dependencies": {
         "source-map": {
           "version": "0.6.1",
-          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
         },
         "source-map-support": {
-          "version": "0.5.12",
-          "resolved": "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.12.tgz",
-          "integrity": "sha1-tPOxDVGFelrwE4086AA7IBYT1Zk=",
+          "version": "0.5.19",
+          "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+          "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
           "requires": {
             "buffer-from": "^1.0.0",
             "source-map": "^0.6.0"
@@ -18112,31 +17757,99 @@
       }
     },
     "terser-webpack-plugin": {
-      "version": "1.2.3",
-      "resolved": "http://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-1.2.3.tgz",
-      "integrity": "sha1-P5i8kC+sPl0N5zCGn1BmhWEmLsg=",
+      "version": "1.4.5",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
+      "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
       "requires": {
-        "cacache": "^11.0.2",
-        "find-cache-dir": "^2.0.0",
+        "cacache": "^12.0.2",
+        "find-cache-dir": "^2.1.0",
+        "is-wsl": "^1.1.0",
         "schema-utils": "^1.0.0",
-        "serialize-javascript": "^1.4.0",
+        "serialize-javascript": "^4.0.0",
         "source-map": "^0.6.1",
-        "terser": "^3.16.1",
-        "webpack-sources": "^1.1.0",
-        "worker-farm": "^1.5.2"
+        "terser": "^4.1.2",
+        "webpack-sources": "^1.4.0",
+        "worker-farm": "^1.7.0"
       },
       "dependencies": {
+        "find-cache-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+          "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+          "requires": {
+            "commondir": "^1.0.1",
+            "make-dir": "^2.0.0",
+            "pkg-dir": "^3.0.0"
+          }
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "make-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+          "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+          "requires": {
+            "pify": "^4.0.1",
+            "semver": "^5.6.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+        },
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+          "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        },
         "source-map": {
           "version": "0.6.1",
-          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
         }
       }
     },
     "test-exclude": {
       "version": "4.2.3",
-      "resolved": "http://registry.npm.taobao.org/test-exclude/download/test-exclude-4.2.3.tgz",
-      "integrity": "sha1-qaXmRHTkOYM5JFoKdprXwvSpfCA=",
+      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz",
+      "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==",
       "dev": true,
       "requires": {
         "arrify": "^1.0.1",
@@ -18148,7 +17861,7 @@
       "dependencies": {
         "arr-diff": {
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
           "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
           "dev": true,
           "requires": {
@@ -18157,13 +17870,13 @@
         },
         "array-unique": {
           "version": "0.2.1",
-          "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
           "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
           "dev": true
         },
         "braces": {
           "version": "1.8.5",
-          "resolved": "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
           "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
           "dev": true,
           "requires": {
@@ -18174,7 +17887,7 @@
         },
         "expand-brackets": {
           "version": "0.1.5",
-          "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz",
+          "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
           "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
           "dev": true,
           "requires": {
@@ -18183,7 +17896,7 @@
         },
         "extglob": {
           "version": "0.3.2",
-          "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz",
+          "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
           "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
           "dev": true,
           "requires": {
@@ -18192,13 +17905,13 @@
         },
         "is-extglob": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
           "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
           "dev": true
         },
         "is-glob": {
           "version": "2.0.1",
-          "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
           "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
           "dev": true,
           "requires": {
@@ -18207,7 +17920,7 @@
         },
         "micromatch": {
           "version": "2.3.11",
-          "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
           "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
           "dev": true,
           "requires": {
@@ -18228,7 +17941,7 @@
         },
         "normalize-path": {
           "version": "2.1.1",
-          "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
+          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
           "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
           "dev": true,
           "requires": {
@@ -18239,14 +17952,14 @@
     },
     "text-table": {
       "version": "0.2.0",
-      "resolved": "http://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
       "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
       "dev": true
     },
     "thenify": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz",
-      "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=",
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+      "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
       "dev": true,
       "requires": {
         "any-promise": "^1.0.0"
@@ -18262,9 +17975,9 @@
       }
     },
     "thread-loader": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.2.tgz",
-      "integrity": "sha512-7xpuc9Ifg6WU+QYw/8uUqNdRwMD+N5gjwHKMqETrs96Qn+7BHwECpt2Brzr4HFlf4IAkZsayNhmGdbkBsTJ//w==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz",
+      "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==",
       "dev": true,
       "requires": {
         "loader-runner": "^2.3.1",
@@ -18278,30 +17991,35 @@
       "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
       "dev": true
     },
+    "throttle-debounce": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz",
+      "integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ=="
+    },
     "through": {
       "version": "2.3.8",
-      "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz",
+      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
       "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
     },
     "through2": {
       "version": "2.0.5",
-      "resolved": "http://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz",
-      "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
       "requires": {
         "readable-stream": "~2.3.6",
         "xtend": "~4.0.1"
       }
     },
     "thunky": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz",
-      "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
+      "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
       "dev": true
     },
     "timers-browserify": {
-      "version": "2.0.10",
-      "resolved": "http://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.10.tgz",
-      "integrity": "sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4=",
+      "version": "2.0.12",
+      "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
+      "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
       "requires": {
         "setimmediate": "^1.0.4"
       }
@@ -18314,18 +18032,18 @@
     },
     "tiny-emitter": {
       "version": "2.1.0",
-      "resolved": "http://registry.npm.taobao.org/tiny-emitter/download/tiny-emitter-2.1.0.tgz",
-      "integrity": "sha1-HRpW7fxRxD6GPLtTgqcjMONVVCM="
+      "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
+      "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
     },
     "tinycolor2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz",
-      "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g="
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz",
+      "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA=="
     },
     "tmp": {
       "version": "0.0.33",
-      "resolved": "http://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz",
-      "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=",
+      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
       "dev": true,
       "requires": {
         "os-tmpdir": "~1.0.2"
@@ -18339,17 +18057,17 @@
     },
     "to-arraybuffer": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
       "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
     },
     "to-fast-properties": {
       "version": "2.0.0",
-      "resolved": "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
       "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
     },
     "to-object-path": {
       "version": "0.3.0",
-      "resolved": "http://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz",
+      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
       "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
       "requires": {
         "kind-of": "^3.0.2"
@@ -18357,8 +18075,8 @@
     },
     "to-regex": {
       "version": "3.0.2",
-      "resolved": "http://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz",
-      "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=",
+      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
       "requires": {
         "define-property": "^2.0.2",
         "extend-shallow": "^3.0.2",
@@ -18368,7 +18086,7 @@
     },
     "to-regex-range": {
       "version": "2.1.1",
-      "resolved": "http://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
       "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
       "requires": {
         "is-number": "^3.0.0",
@@ -18382,9 +18100,9 @@
       "dev": true
     },
     "topojson-client": {
-      "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/topojson-client/download/topojson-client-3.0.0.tgz",
-      "integrity": "sha1-H5kpOnfvQqRI0DKoGqmCtz82DS8=",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.0.1.tgz",
+      "integrity": "sha512-rfGGzyqefpxOaxvV9OTF9t+1g+WhjGEbAIuCcmKYrQkxr0nttjMMyzZsK+NhLW4cTl2g1bz2jQczPUtEshpbVQ==",
       "requires": {
         "commander": "2"
       }
@@ -18396,21 +18114,13 @@
       "dev": true
     },
     "tough-cookie": {
-      "version": "2.4.3",
-      "resolved": "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.4.3.tgz",
-      "integrity": "sha1-U/Nto/R3g7CSWvoG/587FlKA94E=",
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+      "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
       "dev": true,
       "requires": {
-        "psl": "^1.1.24",
-        "punycode": "^1.4.1"
-      },
-      "dependencies": {
-        "punycode": {
-          "version": "1.4.1",
-          "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz",
-          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
-          "dev": true
-        }
+        "psl": "^1.1.28",
+        "punycode": "^2.1.1"
       }
     },
     "tr46": {
@@ -18424,8 +18134,9 @@
     },
     "trim-right": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz",
-      "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
+      "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+      "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+      "dev": true
     },
     "tryer": {
       "version": "1.0.1",
@@ -18453,19 +18164,48 @@
         }
       }
     },
+    "tsconfig-paths": {
+      "version": "3.9.0",
+      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz",
+      "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==",
+      "dev": true,
+      "requires": {
+        "@types/json5": "^0.0.29",
+        "json5": "^1.0.1",
+        "minimist": "^1.2.0",
+        "strip-bom": "^3.0.0"
+      },
+      "dependencies": {
+        "json5": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.0"
+          }
+        },
+        "strip-bom": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+          "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+          "dev": true
+        }
+      }
+    },
     "tslib": {
-      "version": "1.9.3",
-      "resolved": "http://registry.npm.taobao.org/tslib/download/tslib-1.9.3.tgz",
-      "integrity": "sha1-1+TdeSRdhUKMTX5IIqeZF5VMooY="
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
     },
     "tty-browserify": {
       "version": "0.0.0",
-      "resolved": "http://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
       "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
     },
     "tunnel-agent": {
       "version": "0.6.0",
-      "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz",
+      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
       "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
       "dev": true,
       "requires": {
@@ -18474,13 +18214,13 @@
     },
     "tweetnacl": {
       "version": "0.14.5",
-      "resolved": "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz",
+      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
       "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
       "dev": true
     },
     "type-check": {
       "version": "0.3.2",
-      "resolved": "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz",
+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
       "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
       "dev": true,
       "requires": {
@@ -18488,9 +18228,9 @@
       }
     },
     "type-fest": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz",
-      "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==",
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+      "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
       "dev": true
     },
     "type-is": {
@@ -18505,12 +18245,12 @@
     },
     "typedarray": {
       "version": "0.0.6",
-      "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
       "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
     },
     "uglify-js": {
       "version": "2.8.29",
-      "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
       "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
       "requires": {
         "source-map": "~0.5.1",
@@ -18520,71 +18260,50 @@
       "dependencies": {
         "source-map": {
           "version": "0.5.7",
-          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
           "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
         }
       }
     },
     "uglify-to-browserify": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
       "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
       "optional": true
     },
     "unicode-canonical-property-names-ecmascript": {
       "version": "1.0.4",
-      "resolved": "http://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
-      "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg="
+      "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+      "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ=="
     },
     "unicode-match-property-ecmascript": {
       "version": "1.0.4",
-      "resolved": "http://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz",
-      "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=",
+      "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+      "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
       "requires": {
         "unicode-canonical-property-names-ecmascript": "^1.0.4",
         "unicode-property-aliases-ecmascript": "^1.0.4"
       }
     },
     "unicode-match-property-value-ecmascript": {
-      "version": "1.1.0",
-      "resolved": "http://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.1.0.tgz",
-      "integrity": "sha1-W0tCbgjROoA2Xg1lesemwexGonc="
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
+      "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ=="
     },
     "unicode-property-aliases-ecmascript": {
-      "version": "1.0.5",
-      "resolved": "http://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.0.5.tgz",
-      "integrity": "sha1-qcxsx85joKMCP8meNBuUQx1AWlc="
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
+      "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg=="
     },
     "union-value": {
-      "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/union-value/download/union-value-1.0.0.tgz",
-      "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+      "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
       "requires": {
         "arr-union": "^3.1.0",
         "get-value": "^2.0.6",
         "is-extendable": "^0.1.1",
-        "set-value": "^0.4.3"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
-        "set-value": {
-          "version": "0.4.3",
-          "resolved": "http://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz",
-          "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
-          "requires": {
-            "extend-shallow": "^2.0.1",
-            "is-extendable": "^0.1.1",
-            "is-plain-object": "^2.0.1",
-            "to-object-path": "^0.3.0"
-          }
-        }
+        "set-value": "^2.0.1"
       }
     },
     "uniq": {
@@ -18601,16 +18320,16 @@
     },
     "unique-filename": {
       "version": "1.1.1",
-      "resolved": "http://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz",
-      "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=",
+      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+      "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
       "requires": {
         "unique-slug": "^2.0.0"
       }
     },
     "unique-slug": {
-      "version": "2.0.1",
-      "resolved": "http://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.1.tgz",
-      "integrity": "sha1-Xp7cbRzo+yZNsYpQfvm9hURFHKY=",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+      "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
       "requires": {
         "imurmurhash": "^0.1.4"
       }
@@ -18635,7 +18354,7 @@
     },
     "unset-value": {
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
       "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
       "requires": {
         "has-value": "^0.3.1",
@@ -18644,7 +18363,7 @@
       "dependencies": {
         "has-value": {
           "version": "0.3.1",
-          "resolved": "http://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz",
+          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
           "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
           "requires": {
             "get-value": "^2.0.3",
@@ -18654,7 +18373,7 @@
           "dependencies": {
             "isobject": {
               "version": "2.1.0",
-              "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz",
+              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
               "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
               "requires": {
                 "isarray": "1.0.0"
@@ -18664,20 +18383,20 @@
         },
         "has-values": {
           "version": "0.1.4",
-          "resolved": "http://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz",
+          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
           "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
         },
         "isarray": {
           "version": "1.0.0",
-          "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
           "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
         }
       }
     },
     "upath": {
-      "version": "1.1.2",
-      "resolved": "http://registry.npm.taobao.org/upath/download/upath-1.1.2.tgz",
-      "integrity": "sha1-PbZYYA7a7sy+bbXmhNZ+6MKs0Gg="
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+      "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
     },
     "upper-case": {
       "version": "1.1.3",
@@ -18686,21 +18405,21 @@
       "dev": true
     },
     "uri-js": {
-      "version": "4.2.2",
-      "resolved": "http://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz",
-      "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=",
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
+      "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
       "requires": {
         "punycode": "^2.1.0"
       }
     },
     "urix": {
       "version": "0.1.0",
-      "resolved": "http://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
       "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
     },
     "url": {
       "version": "0.11.0",
-      "resolved": "http://registry.npm.taobao.org/url/download/url-0.11.0.tgz",
+      "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
       "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
       "requires": {
         "punycode": "1.3.2",
@@ -18709,7 +18428,7 @@
       "dependencies": {
         "punycode": {
           "version": "1.3.2",
-          "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
           "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
         }
       }
@@ -18723,6 +18442,19 @@
         "loader-utils": "^1.1.0",
         "mime": "^2.0.3",
         "schema-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
       }
     },
     "url-parse": {
@@ -18735,31 +18467,46 @@
         "requires-port": "^1.0.0"
       }
     },
+    "url-search-params-polyfill": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/url-search-params-polyfill/-/url-search-params-polyfill-7.0.1.tgz",
+      "integrity": "sha512-bAw7L2E+jn9XHG5P9zrPnHdO0yJub4U+yXJOdpcpkr7OBd9T8oll4lUos0iSGRcDvfZoLUKfx9a6aNmIhJ4+mQ=="
+    },
     "use": {
       "version": "3.1.1",
-      "resolved": "http://registry.npm.taobao.org/use/download/use-3.1.1.tgz",
-      "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8="
+      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+      "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
     },
     "util": {
       "version": "0.11.1",
-      "resolved": "http://registry.npm.taobao.org/util/download/util-0.11.1.tgz",
-      "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=",
+      "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+      "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
       "requires": {
         "inherits": "2.0.3"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+        }
       }
     },
     "util-deprecate": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
       "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
     },
     "util.promisify": {
-      "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz",
-      "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
+      "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==",
+      "dev": true,
       "requires": {
-        "define-properties": "^1.1.2",
-        "object.getownpropertydescriptors": "^2.0.3"
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.17.2",
+        "has-symbols": "^1.0.1",
+        "object.getownpropertydescriptors": "^2.1.0"
       }
     },
     "utila": {
@@ -18775,15 +18522,24 @@
       "dev": true
     },
     "uuid": {
-      "version": "3.3.2",
-      "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.3.2.tgz",
-      "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=",
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
       "dev": true
     },
+    "v-viewer": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/v-viewer/-/v-viewer-1.5.1.tgz",
+      "integrity": "sha512-Q5ICKzmYQD0qTf+hti2Lhgy6UYY2zgFr+YrN9a3yPgr7pOjYrG405Pz4+6Z6FXlhdhGysCWFJUNCI2tsIyvjWQ==",
+      "requires": {
+        "throttle-debounce": "^2.0.1",
+        "viewerjs": "^1.5.0"
+      }
+    },
     "validate-npm-package-license": {
       "version": "3.0.4",
-      "resolved": "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz",
-      "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
       "dev": true,
       "requires": {
         "spdx-correct": "^3.0.0",
@@ -18797,15 +18553,15 @@
       "dev": true
     },
     "vendors": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz",
-      "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==",
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
+      "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==",
       "dev": true
     },
     "venn.js": {
       "version": "0.2.20",
-      "resolved": "http://registry.npm.taobao.org/venn.js/download/venn.js-0.2.20.tgz",
-      "integrity": "sha1-Pw5QzHXLofWGkqijL2e9eq8apvo=",
+      "resolved": "https://registry.npmjs.org/venn.js/-/venn.js-0.2.20.tgz",
+      "integrity": "sha512-bb5SYq/wamY9fvcuErb9a0FJkgIFHJjkLZWonQ+DoKKuDX3WPH2B4ouI1ce4K2iejBklQy6r1ly8nOGIyOCO6w==",
       "requires": {
         "d3-selection": "^1.0.2",
         "d3-transition": "^1.0.1",
@@ -18814,7 +18570,7 @@
     },
     "verror": {
       "version": "1.10.0",
-      "resolved": "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz",
+      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
       "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
       "dev": true,
       "requires": {
@@ -18823,12 +18579,17 @@
         "extsprintf": "^1.2.0"
       }
     },
+    "viewerjs": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/viewerjs/-/viewerjs-1.8.0.tgz",
+      "integrity": "sha512-ck2geFG3Brg0FcfXIhs2kl3BMqInqW5ZFIFqKbTT/KKG2rS5UGC/47CfKQSBqwiyJVtEIe/dbt/Opu45sBz7Zw=="
+    },
     "viser": {
-      "version": "2.4.5",
-      "resolved": "http://registry.npm.taobao.org/viser/download/viser-2.4.5.tgz",
-      "integrity": "sha1-eB9O8p/ciJMYnuiPdFCAvmqnfOw=",
+      "version": "2.4.9",
+      "resolved": "https://registry.npmjs.org/viser/-/viser-2.4.9.tgz",
+      "integrity": "sha512-DKsqtMa3TZYQHEZ7jp4kpNp1Iqomda7d+3IkkIjIdKQvfL8OeksXfy/ECZUY1hTrGoOe7cq85+6PMS+MPn4mgQ==",
       "requires": {
-        "@antv/g2": "^3.4.0",
+        "@antv/g2": "~3.5.3",
         "@antv/g2-brush": "^0.0.2",
         "@antv/g2-plugin-slider": "^2.1.0",
         "@types/d3-format": "*",
@@ -18839,16 +18600,16 @@
       },
       "dependencies": {
         "@types/node": {
-          "version": "8.10.46",
-          "resolved": "http://registry.npm.taobao.org/@types/node/download/@types/node-8.10.46.tgz",
-          "integrity": "sha1-EhYdtIp3Xoxpwc//K+VFYQOBBW8="
+          "version": "8.10.66",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+          "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
         }
       }
     },
     "viser-vue": {
-      "version": "2.4.5",
-      "resolved": "http://registry.npm.taobao.org/viser-vue/download/viser-vue-2.4.5.tgz",
-      "integrity": "sha1-dzGLsyETxcEIaMhcecu7/0oW05Q=",
+      "version": "2.4.8",
+      "resolved": "https://registry.npmjs.org/viser-vue/-/viser-vue-2.4.8.tgz",
+      "integrity": "sha512-ERAREN+6k/ywrwT+swcMo4CDIAq6dBjnB0+lhmsSfaip06BGHSBfNKg6yl7/4GJ9Nk2kioUw3llNhEboJuIKmQ==",
       "requires": {
         "@types/node": "*",
         "viser": "^2.0.0",
@@ -18856,30 +18617,27 @@
       }
     },
     "vm-browserify": {
-      "version": "0.0.4",
-      "resolved": "http://registry.npm.taobao.org/vm-browserify/download/vm-browserify-0.0.4.tgz",
-      "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
-      "requires": {
-        "indexof": "0.0.1"
-      }
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+      "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
     },
     "vue": {
-      "version": "2.6.10",
-      "resolved": "http://registry.npm.taobao.org/vue/download/vue-2.6.10.tgz",
-      "integrity": "sha1-pysaQqTYKnIepDjRtr9V5mGVxjc="
+      "version": "2.6.12",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz",
+      "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg=="
     },
     "vue-clipboard2": {
       "version": "0.2.1",
-      "resolved": "http://registry.npm.taobao.org/vue-clipboard2/download/vue-clipboard2-0.2.1.tgz",
-      "integrity": "sha1-nwZpCvHJiu80S+H8S+sAzcUwfuE=",
+      "resolved": "https://registry.npmjs.org/vue-clipboard2/-/vue-clipboard2-0.2.1.tgz",
+      "integrity": "sha512-n6ie/0g0bKohmLlC/5ja1esq2Q0jQ5hWmhNSZcvCsWfDeDnVARjl6cBB9p72XV1nlVfuqsZcfV8HTjjZAIlLBA==",
       "requires": {
         "clipboard": "^2.0.0"
       }
     },
     "vue-cropper": {
       "version": "0.4.4",
-      "resolved": "http://registry.npm.taobao.org/vue-cropper/download/vue-cropper-0.4.4.tgz",
-      "integrity": "sha1-Y8hbpcf52XeTcJMMhSK2HesXfJc=",
+      "resolved": "https://registry.npmjs.org/vue-cropper/-/vue-cropper-0.4.4.tgz",
+      "integrity": "sha512-5xJ3jWyTnsx3JM+lFV5mwdPjKfpYi2rvByEh4H0sFtCMILo3YTmMti2pq9YeoPLybJz04ho+wemYw5TqidYV5g==",
       "requires": {
         "@babel/core": "^7.1.2",
         "@babel/plugin-transform-runtime": "^7.1.0",
@@ -18923,19 +18681,28 @@
       }
     },
     "vue-hot-reload-api": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz",
-      "integrity": "sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g==",
+      "version": "2.3.4",
+      "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
+      "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==",
       "dev": true
     },
+    "vue-input-tag": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/vue-input-tag/-/vue-input-tag-2.0.7.tgz",
+      "integrity": "sha512-MiTVXg/OQ0SEPmQRPBw77akCrANAn/MUvo8U5fXLEwwtzGAASpGSru2uBvCMakDB5zF0ZV3ynkX/V8tOfSU6qA==",
+      "requires": {
+        "vue": "^2.5.17"
+      }
+    },
     "vue-jest": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/vue-jest/-/vue-jest-3.0.4.tgz",
-      "integrity": "sha512-PY9Rwt4OyaVlA+KDJJ0614CbEvNOkffDI9g9moLQC/2DDoo0YrqZm7dHi13Q10uoK5Nt5WCYFdeAheOExPah0w==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/vue-jest/-/vue-jest-3.0.7.tgz",
+      "integrity": "sha512-PIOxFM+wsBMry26ZpfBvUQ/DGH2hvp5khDQ1n51g3bN0TwFwTy4J85XVfxTRMukqHji/GnAoGUnlZ5Ao73K62w==",
       "dev": true,
       "requires": {
         "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0",
         "chalk": "^2.1.0",
+        "deasync": "^0.1.15",
         "extract-from-css": "^0.4.4",
         "find-babel-config": "^1.1.0",
         "js-beautify": "^1.6.14",
@@ -18984,12 +18751,12 @@
       }
     },
     "vue-loader": {
-      "version": "15.7.0",
-      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.7.0.tgz",
-      "integrity": "sha512-x+NZ4RIthQOxcFclEcs8sXGEWqnZHodL2J9Vq+hUz+TDZzBaDIh1j3d9M2IUlTjtrHTZy4uMuRdTi8BGws7jLA==",
+      "version": "15.9.5",
+      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.5.tgz",
+      "integrity": "sha512-oeMOs2b5o5gRqkxfds10bCx6JeXYTwivRgbb8hzOrcThD2z1+GqEKE3EX9A2SGbsYDf4rXwRg6D5n1w0jO5SwA==",
       "dev": true,
       "requires": {
-        "@vue/component-compiler-utils": "^2.5.1",
+        "@vue/component-compiler-utils": "^3.1.0",
         "hash-sum": "^1.0.2",
         "loader-utils": "^1.1.0",
         "vue-hot-reload-api": "^2.3.0",
@@ -18998,8 +18765,8 @@
     },
     "vue-ls": {
       "version": "3.2.1",
-      "resolved": "http://registry.npm.taobao.org/vue-ls/download/vue-ls-3.2.1.tgz",
-      "integrity": "sha1-JdHHWzpRwXAYEp3mB7RLsSCjOFo="
+      "resolved": "https://registry.npmjs.org/vue-ls/-/vue-ls-3.2.1.tgz",
+      "integrity": "sha512-JoZDpSu0qV5AM50vspEzOut2lcm8R0tr5WG99jMHh14qFXkUes3ZdmDMG/p8iSQVQpg0pd/svGwM9Nd7OI2oaw=="
     },
     "vue-quill-editor": {
       "version": "3.0.6",
@@ -19016,9 +18783,9 @@
       "integrity": "sha512-UzD8t1CG+aoWVOOpGd5KcaCNtCgUc0byaKhJMH+6N7H/p1ThVkYl/VCt7DmCrdhUlzZK+hT5JPTKAdrbWi0nNw=="
     },
     "vue-router": {
-      "version": "3.0.6",
-      "resolved": "http://registry.npm.taobao.org/vue-router/download/vue-router-3.0.6.tgz",
-      "integrity": "sha1-Lk8PnLsLltAgWrJpDP5YiTUTasM="
+      "version": "3.4.9",
+      "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.9.tgz",
+      "integrity": "sha512-CGAKWN44RqXW06oC+u4mPgHLQQi2t6vLD/JbGRDAXm0YpMv0bgpKuU5bBd7AvMgfTz9kXVRIWKHqRwGEb8xFkA=="
     },
     "vue-style-loader": {
       "version": "4.1.2",
@@ -19032,19 +18799,19 @@
     },
     "vue-svg-component-builder": {
       "version": "2.0.3",
-      "resolved": "http://registry.npm.taobao.org/vue-svg-component-builder/download/vue-svg-component-builder-2.0.3.tgz",
-      "integrity": "sha1-xOChkHNYeriC/W9yu3s7Y7Q5aAE=",
+      "resolved": "https://registry.npmjs.org/vue-svg-component-builder/-/vue-svg-component-builder-2.0.3.tgz",
+      "integrity": "sha512-We9ZLSYPQx9y3v5+HNWyjkGFaxZMlWPTqYBU08y4YT46f453BQ4JxIoS8rV0a8PIxnKap7m/YIzrdIfoHxrpaA==",
       "dev": true
     },
     "vue-svg-component-runtime": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/vue-svg-component-runtime/download/vue-svg-component-runtime-1.0.1.tgz",
-      "integrity": "sha1-xMJBzfkv6tdC7zMTO5l/9C2LnuY="
+      "resolved": "https://registry.npmjs.org/vue-svg-component-runtime/-/vue-svg-component-runtime-1.0.1.tgz",
+      "integrity": "sha512-TkmZ1qwFeFJSRH6b6KVqDU2f8DCSdoNoo/veKqog7FsyF0UETTI66ALKX1rrLXy/KT6LSaJB5IfZkuuSfaQsEA=="
     },
     "vue-svg-icon-loader": {
       "version": "2.1.1",
-      "resolved": "http://registry.npm.taobao.org/vue-svg-icon-loader/download/vue-svg-icon-loader-2.1.1.tgz",
-      "integrity": "sha1-e5mcywZHzjs5A7+/U1/iR+EbAyo=",
+      "resolved": "https://registry.npmjs.org/vue-svg-icon-loader/-/vue-svg-icon-loader-2.1.1.tgz",
+      "integrity": "sha512-JOL4fyh9rnbcqMLTF5NVG8YVupnLIMHMY+3CLMaEb9xDUmfk6Cp3RqyI/8gBea7d51i4lyNdzZ3tQ/EJLQxQDA==",
       "dev": true,
       "requires": {
         "@types/loader-utils": "1.1.3",
@@ -19055,25 +18822,31 @@
       "dependencies": {
         "@types/node": {
           "version": "8.9.5",
-          "resolved": "http://registry.npm.taobao.org/@types/node/download/@types/node-8.9.5.tgz",
-          "integrity": "sha1-FiuGS8cL4Hfm2yErMidUkXkp6XY=",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-8.9.5.tgz",
+          "integrity": "sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ==",
           "dev": true
         },
         "big.js": {
           "version": "3.2.0",
-          "resolved": "http://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz",
-          "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=",
+          "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+          "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
+          "dev": true
+        },
+        "emojis-list": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
           "dev": true
         },
         "json5": {
           "version": "0.5.1",
-          "resolved": "http://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
           "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
           "dev": true
         },
         "loader-utils": {
           "version": "1.1.0",
-          "resolved": "http://registry.npm.taobao.org/loader-utils/download/loader-utils-1.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
           "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
           "dev": true,
           "requires": {
@@ -19085,9 +18858,9 @@
       }
     },
     "vue-template-compiler": {
-      "version": "2.6.10",
-      "resolved": "http://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.10.tgz",
-      "integrity": "sha1-MjtPNJXwT6o1AzN6gvXWUHeZycw=",
+      "version": "2.6.12",
+      "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz",
+      "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==",
       "requires": {
         "de-indent": "^1.0.2",
         "he": "^1.1.0"
@@ -19100,17 +18873,17 @@
       "dev": true
     },
     "vuex": {
-      "version": "3.1.0",
-      "resolved": "http://registry.npm.taobao.org/vuex/download/vuex-3.1.0.tgz",
-      "integrity": "sha1-Y0uBUVzwz+l2vR/+lgF1XlH4Q7k="
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.0.tgz",
+      "integrity": "sha512-W74OO2vCJPs9/YjNjW8lLbj+jzT24waTo2KShI8jLvJW8OaIkgb3wuAMA7D+ZiUxDOx3ubwSZTaJBip9G8a3aQ=="
     },
     "w3c-hr-time": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",
-      "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
+      "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
       "dev": true,
       "requires": {
-        "browser-process-hrtime": "^0.1.2"
+        "browser-process-hrtime": "^1.0.0"
       }
     },
     "walker": {
@@ -19146,13 +18919,122 @@
       }
     },
     "watchpack": {
-      "version": "1.6.0",
-      "resolved": "http://registry.npm.taobao.org/watchpack/download/watchpack-1.6.0.tgz",
-      "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=",
+      "version": "1.7.5",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
+      "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
       "requires": {
-        "chokidar": "^2.0.2",
+        "chokidar": "^3.4.1",
         "graceful-fs": "^4.1.2",
-        "neo-async": "^2.5.0"
+        "neo-async": "^2.5.0",
+        "watchpack-chokidar2": "^2.0.1"
+      }
+    },
+    "watchpack-chokidar2": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
+      "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
+      "optional": true,
+      "requires": {
+        "chokidar": "^2.1.8"
+      },
+      "dependencies": {
+        "anymatch": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+          "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+          "optional": true,
+          "requires": {
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
+          },
+          "dependencies": {
+            "normalize-path": {
+              "version": "2.1.1",
+              "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+              "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+              "optional": true,
+              "requires": {
+                "remove-trailing-separator": "^1.0.1"
+              }
+            }
+          }
+        },
+        "binary-extensions": {
+          "version": "1.13.1",
+          "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+          "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+          "optional": true
+        },
+        "chokidar": {
+          "version": "2.1.8",
+          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+          "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+          "optional": true,
+          "requires": {
+            "anymatch": "^2.0.0",
+            "async-each": "^1.0.1",
+            "braces": "^2.3.2",
+            "fsevents": "^1.2.7",
+            "glob-parent": "^3.1.0",
+            "inherits": "^2.0.3",
+            "is-binary-path": "^1.0.0",
+            "is-glob": "^4.0.0",
+            "normalize-path": "^3.0.0",
+            "path-is-absolute": "^1.0.0",
+            "readdirp": "^2.2.1",
+            "upath": "^1.1.1"
+          }
+        },
+        "fsevents": {
+          "version": "1.2.13",
+          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+          "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+          "optional": true,
+          "requires": {
+            "bindings": "^1.5.0"
+          }
+        },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "optional": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "optional": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        },
+        "is-binary-path": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+          "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+          "optional": true,
+          "requires": {
+            "binary-extensions": "^1.0.0"
+          }
+        },
+        "readdirp": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+          "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+          "optional": true,
+          "requires": {
+            "graceful-fs": "^4.1.11",
+            "micromatch": "^3.1.10",
+            "readable-stream": "^2.0.2"
+          }
+        }
       }
     },
     "wbuf": {
@@ -19180,44 +19062,55 @@
       "dev": true
     },
     "webpack": {
-      "version": "4.30.0",
-      "resolved": "http://registry.npm.taobao.org/webpack/download/webpack-4.30.0.tgz",
-      "integrity": "sha1-rKdu91YwoixJ/MI1s5tMV1kdM6k=",
-      "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/helper-module-context": "1.8.5",
-        "@webassemblyjs/wasm-edit": "1.8.5",
-        "@webassemblyjs/wasm-parser": "1.8.5",
-        "acorn": "^6.0.5",
-        "acorn-dynamic-import": "^4.0.0",
-        "ajv": "^6.1.0",
-        "ajv-keywords": "^3.1.0",
-        "chrome-trace-event": "^1.0.0",
-        "enhanced-resolve": "^4.1.0",
-        "eslint-scope": "^4.0.0",
+      "version": "4.44.2",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz",
+      "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==",
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-module-context": "1.9.0",
+        "@webassemblyjs/wasm-edit": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0",
+        "acorn": "^6.4.1",
+        "ajv": "^6.10.2",
+        "ajv-keywords": "^3.4.1",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^4.3.0",
+        "eslint-scope": "^4.0.3",
         "json-parse-better-errors": "^1.0.2",
-        "loader-runner": "^2.3.0",
-        "loader-utils": "^1.1.0",
-        "memory-fs": "~0.4.1",
-        "micromatch": "^3.1.8",
-        "mkdirp": "~0.5.0",
-        "neo-async": "^2.5.0",
-        "node-libs-browser": "^2.0.0",
+        "loader-runner": "^2.4.0",
+        "loader-utils": "^1.2.3",
+        "memory-fs": "^0.4.1",
+        "micromatch": "^3.1.10",
+        "mkdirp": "^0.5.3",
+        "neo-async": "^2.6.1",
+        "node-libs-browser": "^2.2.1",
         "schema-utils": "^1.0.0",
-        "tapable": "^1.1.0",
-        "terser-webpack-plugin": "^1.1.0",
-        "watchpack": "^1.5.0",
-        "webpack-sources": "^1.3.0"
+        "tapable": "^1.1.3",
+        "terser-webpack-plugin": "^1.4.3",
+        "watchpack": "^1.7.4",
+        "webpack-sources": "^1.4.1"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
       }
     },
     "webpack-bundle-analyzer": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz",
-      "integrity": "sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA==",
+      "version": "3.9.0",
+      "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz",
+      "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==",
       "dev": true,
       "requires": {
-        "acorn": "^6.0.7",
-        "acorn-walk": "^6.1.1",
+        "acorn": "^7.1.1",
+        "acorn-walk": "^7.1.1",
         "bfj": "^6.1.1",
         "chalk": "^2.4.1",
         "commander": "^2.18.0",
@@ -19225,12 +19118,24 @@
         "express": "^4.16.3",
         "filesize": "^3.6.1",
         "gzip-size": "^5.0.0",
-        "lodash": "^4.17.10",
+        "lodash": "^4.17.19",
         "mkdirp": "^0.5.1",
         "opener": "^1.5.1",
         "ws": "^6.0.0"
       },
       "dependencies": {
+        "acorn": {
+          "version": "7.4.1",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+          "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+          "dev": true
+        },
+        "acorn-walk": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+          "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+          "dev": true
+        },
         "ansi-styles": {
           "version": "3.2.1",
           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
@@ -19282,59 +19187,99 @@
       }
     },
     "webpack-dev-middleware": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz",
-      "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==",
+      "version": "3.7.2",
+      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz",
+      "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==",
       "dev": true,
       "requires": {
         "memory-fs": "^0.4.1",
-        "mime": "^2.4.2",
+        "mime": "^2.4.4",
+        "mkdirp": "^0.5.1",
         "range-parser": "^1.2.1",
         "webpack-log": "^2.0.0"
       }
     },
     "webpack-dev-server": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.4.1.tgz",
-      "integrity": "sha512-CRqZQX2ryMtrg0r3TXQPpNh76eM1HD3Wmu6zDBxIKi/d2y+4aa28Ia8weNT0bfgWpY6Vs3Oq/K8+DjfbR+tWYw==",
+      "version": "3.11.0",
+      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz",
+      "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==",
       "dev": true,
       "requires": {
         "ansi-html": "0.0.7",
         "bonjour": "^3.5.0",
-        "chokidar": "^2.1.6",
+        "chokidar": "^2.1.8",
         "compression": "^1.7.4",
         "connect-history-api-fallback": "^1.6.0",
         "debug": "^4.1.1",
         "del": "^4.1.1",
-        "express": "^4.17.0",
-        "html-entities": "^1.2.1",
-        "http-proxy-middleware": "^0.19.1",
+        "express": "^4.17.1",
+        "html-entities": "^1.3.1",
+        "http-proxy-middleware": "0.19.1",
         "import-local": "^2.0.0",
         "internal-ip": "^4.3.0",
         "ip": "^1.1.5",
+        "is-absolute-url": "^3.0.3",
         "killable": "^1.0.1",
-        "loglevel": "^1.6.1",
+        "loglevel": "^1.6.8",
         "opn": "^5.5.0",
-        "portfinder": "^1.0.20",
+        "p-retry": "^3.0.1",
+        "portfinder": "^1.0.26",
         "schema-utils": "^1.0.0",
-        "selfsigned": "^1.10.4",
-        "semver": "^6.0.0",
+        "selfsigned": "^1.10.7",
+        "semver": "^6.3.0",
         "serve-index": "^1.9.1",
-        "sockjs": "0.3.19",
-        "sockjs-client": "1.3.0",
-        "spdy": "^4.0.0",
+        "sockjs": "0.3.20",
+        "sockjs-client": "1.4.0",
+        "spdy": "^4.0.2",
         "strip-ansi": "^3.0.1",
         "supports-color": "^6.1.0",
         "url": "^0.11.0",
-        "webpack-dev-middleware": "^3.7.0",
+        "webpack-dev-middleware": "^3.7.2",
         "webpack-log": "^2.0.0",
-        "yargs": "12.0.5"
+        "ws": "^6.2.1",
+        "yargs": "^13.3.2"
       },
       "dependencies": {
         "ansi-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
-          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+          "dev": true,
+          "requires": {
+            "color-convert": "^1.9.0"
+          }
+        },
+        "anymatch": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+          "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+          "dev": true,
+          "requires": {
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
+          },
+          "dependencies": {
+            "normalize-path": {
+              "version": "2.1.1",
+              "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+              "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+              "dev": true,
+              "requires": {
+                "remove-trailing-separator": "^1.0.1"
+              }
+            }
+          }
+        },
+        "binary-extensions": {
+          "version": "1.13.1",
+          "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+          "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
           "dev": true
         },
         "camelcase": {
@@ -19344,9 +19289,9 @@
           "dev": true
         },
         "chokidar": {
-          "version": "2.1.6",
-          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz",
-          "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==",
+          "version": "2.1.8",
+          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+          "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
           "dev": true,
           "requires": {
             "anymatch": "^2.0.0",
@@ -19364,34 +19309,86 @@
           }
         },
         "cliui": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
-          "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+          "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
           "dev": true,
           "requires": {
-            "string-width": "^2.1.1",
-            "strip-ansi": "^4.0.0",
-            "wrap-ansi": "^2.0.0"
+            "string-width": "^3.1.0",
+            "strip-ansi": "^5.2.0",
+            "wrap-ansi": "^5.1.0"
           },
           "dependencies": {
             "strip-ansi": {
-              "version": "4.0.0",
-              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-              "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+              "version": "5.2.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+              "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
               "dev": true,
               "requires": {
-                "ansi-regex": "^3.0.0"
+                "ansi-regex": "^4.1.0"
               }
             }
           }
         },
         "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+          "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
           "dev": true,
           "requires": {
-            "ms": "^2.1.1"
+            "ms": "2.1.2"
+          }
+        },
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+          "dev": true
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "fsevents": {
+          "version": "1.2.13",
+          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+          "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "bindings": "^1.5.0"
+          }
+        },
+        "get-caller-file": {
+          "version": "2.0.5",
+          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+          "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+          "dev": true
+        },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "dev": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
           }
         },
         "import-local": {
@@ -19404,55 +19401,117 @@
             "resolve-cwd": "^2.0.0"
           }
         },
-        "invert-kv": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
-          "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
+        "is-absolute-url": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
+          "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
           "dev": true
         },
-        "lcid": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
-          "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+        "is-binary-path": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+          "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
           "dev": true,
           "requires": {
-            "invert-kv": "^2.0.0"
+            "binary-extensions": "^1.0.0"
           }
         },
-        "mem": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
-          "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
           "dev": true,
           "requires": {
-            "map-age-cleaner": "^0.1.1",
-            "mimic-fn": "^2.0.0",
-            "p-is-promise": "^2.0.0"
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
           }
         },
-        "mimic-fn": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
           "dev": true
         },
-        "os-locale": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
-          "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
           "dev": true,
           "requires": {
-            "execa": "^1.0.0",
-            "lcid": "^2.0.0",
-            "mem": "^4.0.0"
+            "p-limit": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
+        },
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+          "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+          "dev": true,
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        },
+        "readdirp": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+          "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.11",
+            "micromatch": "^3.1.10",
+            "readable-stream": "^2.0.2"
+          }
+        },
+        "require-main-filename": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+          "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+          "dev": true
+        },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
           }
         },
         "semver": {
-          "version": "6.1.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz",
-          "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==",
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
           "dev": true
         },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          },
+          "dependencies": {
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+              "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^4.1.0"
+              }
+            }
+          }
+        },
         "supports-color": {
           "version": "6.1.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
@@ -19462,30 +19521,59 @@
             "has-flag": "^3.0.0"
           }
         },
+        "wrap-ansi": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+          "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.0",
+            "string-width": "^3.0.0",
+            "strip-ansi": "^5.0.0"
+          },
+          "dependencies": {
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+              "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^4.1.0"
+              }
+            }
+          }
+        },
+        "ws": {
+          "version": "6.2.1",
+          "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+          "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+          "dev": true,
+          "requires": {
+            "async-limiter": "~1.0.0"
+          }
+        },
         "yargs": {
-          "version": "12.0.5",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
-          "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
+          "version": "13.3.2",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+          "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
           "dev": true,
           "requires": {
-            "cliui": "^4.0.0",
-            "decamelize": "^1.2.0",
+            "cliui": "^5.0.0",
             "find-up": "^3.0.0",
-            "get-caller-file": "^1.0.1",
-            "os-locale": "^3.0.0",
+            "get-caller-file": "^2.0.1",
             "require-directory": "^2.1.1",
-            "require-main-filename": "^1.0.1",
+            "require-main-filename": "^2.0.0",
             "set-blocking": "^2.0.0",
-            "string-width": "^2.0.0",
+            "string-width": "^3.0.0",
             "which-module": "^2.0.0",
-            "y18n": "^3.2.1 || ^4.0.0",
-            "yargs-parser": "^11.1.1"
+            "y18n": "^4.0.0",
+            "yargs-parser": "^13.1.2"
           }
         },
         "yargs-parser": {
-          "version": "11.1.1",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
-          "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+          "version": "13.1.2",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+          "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
           "dev": true,
           "requires": {
             "camelcase": "^5.0.0",
@@ -19505,18 +19593,18 @@
       }
     },
     "webpack-merge": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz",
-      "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==",
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz",
+      "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==",
       "dev": true,
       "requires": {
-        "lodash": "^4.17.5"
+        "lodash": "^4.17.15"
       }
     },
     "webpack-sources": {
-      "version": "1.3.0",
-      "resolved": "http://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.3.0.tgz",
-      "integrity": "sha1-KijcufH0X+lg2PFJMlK17mUw+oU=",
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+      "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
       "requires": {
         "source-list-map": "^2.0.0",
         "source-map": "~0.6.1"
@@ -19524,31 +19612,33 @@
       "dependencies": {
         "source-map": {
           "version": "0.6.1",
-          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
         }
       }
     },
     "webpack-theme-color-replacer": {
-      "version": "1.2.15",
-      "resolved": "https://registry.npmjs.org/webpack-theme-color-replacer/-/webpack-theme-color-replacer-1.2.15.tgz",
-      "integrity": "sha512-tht5fk6ce6ZwXqPbvkLBJMS+iAM3H60pyexKvZHEbkHpQ1Onq2Y0u6+wUbNBQ/QfDEvCTX5MSkNfD2w/ZJEeKg==",
-      "dev": true
+      "version": "1.3.14",
+      "resolved": "https://registry.npmjs.org/webpack-theme-color-replacer/-/webpack-theme-color-replacer-1.3.14.tgz",
+      "integrity": "sha512-PKT/OD2+iXxGuGDxH/MVkt36EKYtYckowzPlZBdPOgGIVk8MbvLfdRFYOmWz6vhVJpyIGWtpfpoP9ecWZP8qYg==",
+      "dev": true,
+      "requires": {
+        "webpack-sources": "*"
+      }
     },
     "websocket-driver": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
-      "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
+      "version": "0.6.5",
+      "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz",
+      "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=",
       "dev": true,
       "requires": {
-        "http-parser-js": ">=0.4.0",
         "websocket-extensions": ">=0.1.1"
       }
     },
     "websocket-extensions": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
-      "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
+      "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
       "dev": true
     },
     "whatwg-encoding": {
@@ -19579,8 +19669,8 @@
     },
     "which": {
       "version": "1.3.1",
-      "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.1.tgz",
-      "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
       "dev": true,
       "requires": {
         "isexe": "^2.0.0"
@@ -19594,23 +19684,29 @@
     },
     "window-size": {
       "version": "0.1.0",
-      "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
       "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
     },
     "wolfy87-eventemitter": {
       "version": "5.1.0",
-      "resolved": "http://registry.npm.taobao.org/wolfy87-eventemitter/download/wolfy87-eventemitter-5.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.1.0.tgz",
       "integrity": "sha1-NcGsDdGsDBXjXZgVCPwiCEoToBE="
     },
+    "word-wrap": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+      "dev": true
+    },
     "wordwrap": {
       "version": "0.0.2",
-      "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
       "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
     },
     "worker-farm": {
-      "version": "1.6.0",
-      "resolved": "http://registry.npm.taobao.org/worker-farm/download/worker-farm-1.6.0.tgz",
-      "integrity": "sha1-rsxAWXb6talVJhgIRvDboojzpKA=",
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+      "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
       "requires": {
         "errno": "~0.1.7"
       }
@@ -19649,7 +19745,7 @@
     },
     "wrappy": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
     },
     "write": {
@@ -19689,23 +19785,23 @@
       "dev": true
     },
     "xtend": {
-      "version": "4.0.1",
-      "resolved": "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz",
-      "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
     },
     "y18n": {
       "version": "4.0.0",
-      "resolved": "http://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz",
-      "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms="
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+      "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
     },
     "yallist": {
-      "version": "3.0.3",
-      "resolved": "http://registry.npm.taobao.org/yallist/download/yallist-3.0.3.tgz",
-      "integrity": "sha1-tLBJ4xS+VF486AIjbWzSLNkcPek="
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
     },
     "yargs": {
       "version": "3.10.0",
-      "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
       "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
       "requires": {
         "camelcase": "^1.0.2",
diff --git a/package.json b/package.json
index 10ac546f0f..36316a8a79 100644
--- a/package.json
+++ b/package.json
@@ -1,137 +1,142 @@
-{
-  "name": "vue-antd-pro",
-  "version": "2.0.0",
-  "private": true,
-  "scripts": {
-    "serve": "vue-cli-service serve",
-    "build": "vue-cli-service build",
-    "build:preview": "vue-cli-service build --mode preview",
-    "lint": "vue-cli-service lint",
-    "lint:nofix": "vue-cli-service lint --no-fix",
-    "test:unit": "vue-cli-service test:unit",
-    "postinstall": "opencollective-postinstall"
-  },
-  "dependencies": {
-    "@antv/data-set": "^0.10.1",
-    "ant-design-vue": "~1.3.9",
-    "axios": "^0.19.0",
-    "core-js": "^2.6.5",
-    "enquire.js": "^2.1.6",
-    "js-cookie": "^2.2.0",
-    "lodash.get": "^4.4.2",
-    "lodash.pick": "^4.4.0",
-    "md5": "^2.2.1",
-    "mockjs2": "^1.0.5",
-    "moment": "^2.24.0",
-    "nprogress": "^0.2.0",
-    "viser-vue": "^2.3.3",
-    "vue": "^2.5.22",
-    "vue-clipboard2": "^0.2.1",
-    "vue-cropper": "0.4.4",
-    "vue-ls": "^3.2.0",
-    "vue-quill-editor": "^3.0.6",
-    "vue-router": "^3.0.1",
-    "vue-svg-component-runtime": "^1.0.1",
-    "vuex": "^3.1.0",
-    "wangeditor": "^3.1.1"
-  },
-  "devDependencies": {
-    "@ant-design/colors": "^3.1.0",
-    "@babel/polyfill": "^7.2.5",
-    "@vue/cli-plugin-babel": "^3.7.0",
-    "@vue/cli-plugin-eslint": "^3.7.0",
-    "@vue/cli-plugin-unit-jest": "^3.7.0",
-    "@vue/cli-service": "^3.7.0",
-    "@vue/eslint-config-standard": "^4.0.0",
-    "@vue/test-utils": "^1.0.0-beta.20",
-    "babel-core": "7.0.0-bridge.0",
-    "babel-eslint": "^10.0.1",
-    "babel-jest": "^23.6.0",
-    "babel-plugin-import": "^1.11.0",
-    "eslint": "^5.8.0",
-    "eslint-plugin-html": "^5.0.0",
-    "eslint-plugin-vue": "^5.0.0",
-    "less": "^3.8.1",
-    "less-loader": "^4.1.0",
-    "opencollective": "^1.0.3",
-    "opencollective-postinstall": "^2.0.2",
-    "vue-svg-icon-loader": "^2.1.1",
-    "vue-template-compiler": "^2.5.22",
-    "webpack-theme-color-replacer": "^1.2.15"
-  },
-  "eslintConfig": {
-    "root": true,
-    "env": {
-      "node": true
-    },
-    "extends": [
-      "plugin:vue/strongly-recommended",
-      "@vue/standard"
-    ],
-    "parserOptions": {
-      "parser": "babel-eslint"
-    },
-    "rules": {
-      "generator-star-spacing": "off",
-      "no-mixed-operators": 0,
-      "vue/max-attributes-per-line": [
-        2,
-        {
-          "singleline": 5,
-          "multiline": {
-            "max": 1,
-            "allowFirstLine": false
-          }
-        }
-      ],
-      "vue/attribute-hyphenation": 0,
-      "vue/html-self-closing": 0,
-      "vue/component-name-in-template-casing": 0,
-      "vue/html-closing-bracket-spacing": 0,
-      "vue/singleline-html-element-content-newline": 0,
-      "vue/no-unused-components": 0,
-      "vue/multiline-html-element-content-newline": 0,
-      "vue/no-use-v-if-with-v-for": 0,
-      "vue/html-closing-bracket-newline": 0,
-      "vue/no-parsing-error": 0,
-      "no-console": 0,
-      "no-tabs": 0,
-      "quotes": [
-        2,
-        "single",
-        {
-          "avoidEscape": true,
-          "allowTemplateLiterals": true
-        }
-      ],
-      "semi": [
-        2,
-        "never",
-        {
-          "beforeStatementContinuationChars": "never"
-        }
-      ],
-      "no-delete-var": 2,
-      "prefer-const": [
-        2,
-        {
-          "ignoreReadBeforeAssign": false
-        }
-      ]
-    }
-  },
-  "postcss": {
-    "plugins": {
-      "autoprefixer": {}
-    }
-  },
-  "browserslist": [
-    "> 1%",
-    "last 2 versions",
-    "not ie <= 10"
-  ],
-  "collective": {
-    "type": "opencollective",
-    "url": "https://opencollective.com/ant-design-pro-vue"
-  }
-}
+{
+  "name": "vue-antd-pro",
+  "version": "2.0.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve",
+    "build": "vue-cli-service build",
+    "build:preview": "vue-cli-service build --mode preview",
+    "lint": "vue-cli-service lint",
+    "lint:nofix": "vue-cli-service lint --no-fix",
+    "test:unit": "vue-cli-service test:unit",
+    "postinstall": "opencollective-postinstall"
+  },
+  "dependencies": {
+    "@ant-design/icons-vue": "^6.1.0",
+    "@antv/data-set": "^0.10.1",
+    "ant-design-vue": "~1.3.9",
+    "axios": "^0.19.0",
+    "core-js": "^2.6.5",
+    "enquire.js": "^2.1.6",
+    "jquery": "^3.4.1",
+    "js-cookie": "^2.2.0",
+    "lodash.get": "^4.4.2",
+    "lodash.pick": "^4.4.0",
+    "md5": "^2.2.1",
+    "mockjs2": "^1.0.5",
+    "moment": "^2.24.0",
+    "nprogress": "^0.2.0",
+    "url-search-params-polyfill": "^7.0.0",
+    "v-viewer": "^1.4.2",
+    "viser-vue": "^2.3.3",
+    "vue": "^2.5.22",
+    "vue-clipboard2": "^0.2.1",
+    "vue-cropper": "0.4.4",
+    "vue-input-tag": "^2.0.6",
+    "vue-ls": "^3.2.0",
+    "vue-quill-editor": "^3.0.6",
+    "vue-router": "^3.0.1",
+    "vue-svg-component-runtime": "^1.0.1",
+    "vuex": "^3.1.0",
+    "wangeditor": "^3.1.1"
+  },
+  "devDependencies": {
+    "@ant-design/colors": "^3.1.0",
+    "@babel/polyfill": "^7.2.5",
+    "@vue/cli-plugin-babel": "^3.7.0",
+    "@vue/cli-plugin-eslint": "^3.7.0",
+    "@vue/cli-plugin-unit-jest": "^3.7.0",
+    "@vue/cli-service": "^3.7.0",
+    "@vue/eslint-config-standard": "^4.0.0",
+    "@vue/test-utils": "^1.0.0-beta.20",
+    "babel-core": "7.0.0-bridge.0",
+    "babel-eslint": "^10.0.1",
+    "babel-jest": "^23.6.0",
+    "babel-plugin-import": "^1.11.0",
+    "eslint": "^5.8.0",
+    "eslint-plugin-html": "^5.0.0",
+    "eslint-plugin-vue": "^5.0.0",
+    "less": "^3.8.1",
+    "less-loader": "^4.1.0",
+    "opencollective": "^1.0.3",
+    "opencollective-postinstall": "^2.0.2",
+    "vue-svg-icon-loader": "^2.1.1",
+    "vue-template-compiler": "^2.5.22",
+    "webpack-theme-color-replacer": "^1.2.15"
+  },
+  "eslintConfig": {
+    "root": true,
+    "env": {
+      "node": true
+    },
+    "extends": [
+      "plugin:vue/strongly-recommended",
+      "@vue/standard"
+    ],
+    "parserOptions": {
+      "parser": "babel-eslint"
+    },
+    "rules": {
+      "generator-star-spacing": "off",
+      "no-mixed-operators": 0,
+      "vue/max-attributes-per-line": [
+        2,
+        {
+          "singleline": 5,
+          "multiline": {
+            "max": 1,
+            "allowFirstLine": false
+          }
+        }
+      ],
+      "vue/attribute-hyphenation": 0,
+      "vue/html-self-closing": 0,
+      "vue/component-name-in-template-casing": 0,
+      "vue/html-closing-bracket-spacing": 0,
+      "vue/singleline-html-element-content-newline": 0,
+      "vue/no-unused-components": 0,
+      "vue/multiline-html-element-content-newline": 0,
+      "vue/no-use-v-if-with-v-for": 0,
+      "vue/html-closing-bracket-newline": 0,
+      "vue/no-parsing-error": 0,
+      "no-console": 0,
+      "no-tabs": 0,
+      "quotes": [
+        2,
+        "single",
+        {
+          "avoidEscape": true,
+          "allowTemplateLiterals": true
+        }
+      ],
+      "semi": [
+        2,
+        "never",
+        {
+          "beforeStatementContinuationChars": "never"
+        }
+      ],
+      "no-delete-var": 2,
+      "prefer-const": [
+        2,
+        {
+          "ignoreReadBeforeAssign": false
+        }
+      ]
+    }
+  },
+  "postcss": {
+    "plugins": {
+      "autoprefixer": {}
+    }
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions",
+    "not ie <= 10"
+  ],
+  "collective": {
+    "type": "opencollective",
+    "url": "https://opencollective.com/ant-design-pro-vue"
+  }
+}
diff --git a/public/color.less b/public/color.less
index c7e6b1b23b..58ca0ffaa8 100644
--- a/public/color.less
+++ b/public/color.less
@@ -2342,8 +2342,6 @@ i.trigger:hover {
   border-radius: 2px;
   color: #fff;
 }
-.logo {
-}
 .logo h1 {
   color: white;
 }
diff --git a/public/index.html b/public/index.html
index a73a7821be..55be4e28d9 100644
--- a/public/index.html
+++ b/public/index.html
@@ -5,19 +5,115 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <link rel="icon" href="<%= BASE_URL %>logo.png">
-    <title>Ant Design Pro</title>
-    <style>#loading-mask{position:fixed;left:0;top:0;height:100%;width:100%;background:#fff;user-select:none;z-index:9999;overflow:hidden}.loading-wrapper{position:absolute;top:50%;left:50%;transform:translate(-50%,-100%)}.loading-dot{animation:antRotate 1.2s infinite linear;transform:rotate(45deg);position:relative;display:inline-block;font-size:64px;width:64px;height:64px;box-sizing:border-box}.loading-dot i{width:22px;height:22px;position:absolute;display:block;background-color:#1890ff;border-radius:100%;transform:scale(.75);transform-origin:50% 50%;opacity:.3;animation:antSpinMove 1s infinite linear alternate}.loading-dot i:nth-child(1){top:0;left:0}.loading-dot i:nth-child(2){top:0;right:0;-webkit-animation-delay:.4s;animation-delay:.4s}.loading-dot i:nth-child(3){right:0;bottom:0;-webkit-animation-delay:.8s;animation-delay:.8s}.loading-dot i:nth-child(4){bottom:0;left:0;-webkit-animation-delay:1.2s;animation-delay:1.2s}@keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@-webkit-keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@keyframes antSpinMove{to{opacity:1}}@-webkit-keyframes antSpinMove{to{opacity:1}}</style>
+    <title>支扩中国</title>
+    <style>
+      #loading-mask {
+        position: fixed;
+        left: 0;
+        top: 0;
+        height: 100%;
+        width: 100%;
+        background: #fff;
+        user-select: none;
+        z-index: 9999;
+        overflow: hidden
+      }
+
+      .loading-wrapper {
+        position: absolute;
+        top: 50%;
+        left: 50%;
+        transform: translate(-50%, -100%)
+      }
+
+      .loading-dot {
+        animation: antRotate 1.2s infinite linear;
+        transform: rotate(45deg);
+        position: relative;
+        display: inline-block;
+        font-size: 64px;
+        width: 64px;
+        height: 64px;
+        box-sizing: border-box
+      }
+
+      .loading-dot i {
+        width: 22px;
+        height: 22px;
+        position: absolute;
+        display: block;
+        background-color: #1890ff;
+        border-radius: 100%;
+        transform: scale(.75);
+        transform-origin: 50% 50%;
+        opacity: .3;
+        animation: antSpinMove 1s infinite linear alternate
+      }
+
+      .loading-dot i:nth-child(1) {
+        top: 0;
+        left: 0
+      }
+
+      .loading-dot i:nth-child(2) {
+        top: 0;
+        right: 0;
+        -webkit-animation-delay: .4s;
+        animation-delay: .4s
+      }
+
+      .loading-dot i:nth-child(3) {
+        right: 0;
+        bottom: 0;
+        -webkit-animation-delay: .8s;
+        animation-delay: .8s
+      }
+
+      .loading-dot i:nth-child(4) {
+        bottom: 0;
+        left: 0;
+        -webkit-animation-delay: 1.2s;
+        animation-delay: 1.2s
+      }
+
+      @keyframes antRotate {
+        to {
+          -webkit-transform: rotate(405deg);
+          transform: rotate(405deg)
+        }
+      }
+
+      @-webkit-keyframes antRotate {
+        to {
+          -webkit-transform: rotate(405deg);
+          transform: rotate(405deg)
+        }
+      }
+
+      @keyframes antSpinMove {
+        to {
+          opacity: 1
+        }
+      }
+
+      @-webkit-keyframes antSpinMove {
+        to {
+          opacity: 1
+        }
+      }
+    </style>
   </head>
   <body>
     <noscript>
-      <strong>We're sorry but vue-antd-pro doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+      <strong>We're sorry but vue-antd-pro doesn't work properly without JavaScript enabled. Please enable it to
+        continue.</strong>
     </noscript>
     <div id="app">
       <div id="loading-mask">
-          <div class="loading-wrapper">
-            <span class="loading-dot loading-dot-spin"><i></i><i></i><i></i><i></i></span>
-          </div>
+        <div class="loading-wrapper">
+          <span class="loading-dot loading-dot-spin"><i></i><i></i><i></i><i></i></span>
         </div>
+      </div>
     </div>
     <!-- built files will be auto injected -->
   </body>
diff --git a/public/logo-old.png b/public/logo-old.png
new file mode 100644
index 0000000000..443088971e
Binary files /dev/null and b/public/logo-old.png differ
diff --git a/public/logo.png b/public/logo.png
index e887375c35..9f6716811a 100644
Binary files a/public/logo.png and b/public/logo.png differ
diff --git a/public/logo1.png b/public/logo1.png
new file mode 100644
index 0000000000..93a83f8886
Binary files /dev/null and b/public/logo1.png differ
diff --git a/run.bat b/run.bat
new file mode 100644
index 0000000000..01150790ec
--- /dev/null
+++ b/run.bat
@@ -0,0 +1 @@
+yarn run serve
\ No newline at end of file
diff --git a/src/api/basis.js b/src/api/basis.js
new file mode 100644
index 0000000000..76254cec56
--- /dev/null
+++ b/src/api/basis.js
@@ -0,0 +1,304 @@
+import api from './index'
+import { axios } from '@/utils/request'
+
+export function saveBasis(params) {
+  return axios({
+    url: '/basis/saveBasis',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getElementsAnswer(params) {
+  return axios({
+    url: '/basisMask/getElementsAnswer',
+    method: 'post',
+    data: params
+  })
+}
+//获得省市
+export function getProvinceAndCity() {
+  return axios({
+    url: '/dictionaryAttribute/getProvinceAndCity',
+    method: 'post'
+  })
+}
+//获得民族
+export function getNation() {
+  return axios({
+    url: '/dictionaryAttribute/getNation',
+    method: 'post'
+  })
+}
+//根据字典ID获得内容
+export function getDictionaryAttributeByDictionaryId(params) {
+  return axios({
+    url: '/dictionaryAttribute/getDictionaryAttributeByDictionaryId',
+    method: 'post',
+    data: params
+  })
+}
+//提交患者信息
+export function addOrUpdate(params) {
+  return axios({
+    url: '/patient/addOrUpdate',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getPatientBasis(params) {
+  return axios({
+    url: '/basis/getPatientBasis',
+    method: 'post',
+    data: params
+  })
+}
+
+export function computeScore(params) {
+  return axios({
+    url: '/basis/computeScore',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getMedicineAllergyList(params) {
+  return axios({
+    url: '/basis/getMedicineAllergyList',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getAllQuestionList(params) {
+  return axios({
+    url: '/question/detail',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getTaskDetail(params) {
+  return axios({
+    url: '/visitTask/getVisitTaskDetail',
+    method: 'post',
+    data: params
+  })
+}
+
+export function saveQuestion(params) {
+  return axios({
+    url: '/question/save',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getCollectDetail(params) {
+  return axios({
+    url: '/reportCollectBase/getByBasisElementId',
+    method: 'post',
+    data: params
+  })
+}
+
+export function addVasit(params) {
+  return axios({
+    url: '/visitTask/addVasit',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getCollectElements(params) {
+  return axios({
+    url: '/reportCollectBase/getBasisElementById',
+    method: 'post',
+    data: params
+  })
+}
+
+export function saveReport(params) {
+  return axios({
+    url: '/reportCollectBase/addOrEditReportResult',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getVtList(params) {
+  return axios({
+    url: '/visitTask/getVtList',
+    method: 'post',
+    data: params
+  })
+}
+
+export function importVtData(params) {
+  return axios({
+    url: '/visitTask/importVtData',
+    method: 'post',
+    data: params
+  })
+}
+
+export function saveVisitTask(params) {
+  return axios({
+    url: '/visitTask/save',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getBasisForm(params) {
+  return axios({
+    url: '/basis/getFormData',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getSFJxDataList(params) {
+  return axios({
+    url: '/basis/getSFJxDataList',
+    method: 'post',
+    params: params
+  })
+}
+
+export function createSFJx(params) {
+  return axios({
+    url: '/basis/createSFJx',
+    method: 'post',
+    data: params
+  })
+}
+
+export function createNfs(params) {
+  return axios({
+    url: '/basis/createNfs',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getQuestionDetail(params) {
+  return axios({
+    url: '/question/detail',
+    method: 'post',
+    data: params
+  })
+}
+
+export function validateCard(params) {
+  return axios({
+    url: '/patient/getPatientDetailByCard',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getFsImportDate(params) {
+  return axios({
+    url: '/basis/getFsImportDate',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getOcrResult(params) {
+  return axios({
+    url: '/reportCollectBase/ocrResult',
+    method: 'post',
+    data: params
+  })
+}
+
+export function downLoadManual(id) {
+  return axios({
+    url: '/index/downLoad?id=' + id,
+    method: 'get'
+  })
+}
+
+export function recoverSubmit(params) {
+  return axios({
+    url: '/basis/recoverSubmit',
+    method: 'post',
+    data: params
+  })
+}
+
+export function outGroup(params) {
+  return axios({
+    url: '/basis/outGroup',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getJxDataList(params) {
+  return axios({
+    url: '/basis/getJxDataList',
+    method: 'post',
+    data: params
+  })
+}
+
+export function submitCheck(params) {
+  return axios({
+    url: '/basis/submitCheck',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getCenterNum(params) {
+  return axios({
+    url: '/basis/getCenterNum',
+    method: 'post',
+    params: params
+  })
+}
+
+export function patientReport(params) {
+  return axios({
+    url: '/patientReport/getDataList',
+    method: 'post',
+    params: params
+  })
+}
+
+export function exportFormData(params) {
+  return axios({
+    url: '/basis/exportFormData',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取入组人员详情
+export function getDataEcho (id) {
+  return axios({
+    url: 'patientPending/' + id + '/view',
+    method: 'get'
+  })
+}
+
+// 入组提交请求
+export function updateDataEcho (patientPendingId, wxPatientId, params) {
+  return axios({
+    url: 'patientPending/' + patientPendingId + '/' + wxPatientId + '/accessPatient',
+    method: 'post',
+    data: params
+  })
+}
+
+// 查询未读公告
+export function getUnReadAnnouncement () {
+  return axios({
+    url: '/announcementSending/getUnReadAnnouncement',
+    method: 'get'
+  })
+}
diff --git a/src/api/center.js b/src/api/center.js
new file mode 100644
index 0000000000..1af545d6f5
--- /dev/null
+++ b/src/api/center.js
@@ -0,0 +1,68 @@
+import api from './index'
+import {
+  axios
+} from '@/utils/request'
+
+export function getCenterDataList(parameter) {
+  return axios({
+    url: '/authority/getCenterDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function selectCenterDataList(parameter) {
+  return axios({
+    url: '/authority/selectCenterDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function saveCenter(parameter) {
+  return axios({
+    url: '/authority/saveCenter',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function getRoleDataList(parameter) {
+  return axios({
+    url: '/authority/getRoleDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function saveRole(parameter) {
+  return axios({
+    url: '/authority/saveRole',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function getDoctorDataList(parameter) {
+  return axios({
+    url: '/authority/getDoctorDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function saveDoctor(parameter) {
+  return axios({
+    url: '/authority/saveDoctor',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function getDoctorDetail(parameter) {
+    return axios({
+      url: '/authority/getDoctorDetail',
+      method: 'post',
+      params: parameter
+    })
+  }
\ No newline at end of file
diff --git a/src/api/distract.js b/src/api/distract.js
new file mode 100644
index 0000000000..304b5b4019
--- /dev/null
+++ b/src/api/distract.js
@@ -0,0 +1,96 @@
+import { axios } from '@/utils/request'
+
+const api = {
+  distract: '/distract'
+}
+
+export default api
+
+// 获取患者注册信息
+export function getZKDataList (parameter) {
+  return axios({
+    url: '/patientPending/getDataList',
+    method: 'get',
+    params: parameter
+  })
+}
+
+export function getZyDataList (parameter) {
+  return axios({
+    url: '/distract/getZyDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function addDistract (data) {
+  return axios({
+    url: '/distract/addDistract',
+    method: 'post',
+    data
+  })
+}
+
+export function getSqDataList (parameter) {
+  return axios({
+    url: '/distract/getSqDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function verifyDistract (data) {
+  return axios({
+    url: '/distract/verifyDistract',
+    method: 'post',
+    data
+  })
+}
+
+export function getWxBingDataList (parameter) {
+  return axios({
+    url: '/wxBusiness/getDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function wxPatientReview (data) {
+  return axios({
+    url: '/wxBusiness/wxPatientReview',
+    method: 'post',
+    data
+  })
+}
+
+export function wxBind (data) {
+  return axios({
+    url: '/wxBusiness/bind',
+    method: 'post',
+    data
+  })
+}
+
+export function getWxQuestionList (parameter) {
+  return axios({
+    url: '/question/getWxQuestionList',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function getWxQuestionDetail (data) {
+  return axios({
+    url: '/question/detail',
+    method: 'post',
+    data
+  })
+}
+
+export function questionReview (data) {
+  return axios({
+    url: '/question/questionReview',
+    method: 'post',
+    data
+  })
+}
diff --git a/src/api/famousDoctor.js b/src/api/famousDoctor.js
new file mode 100644
index 0000000000..9add01dac2
--- /dev/null
+++ b/src/api/famousDoctor.js
@@ -0,0 +1,35 @@
+import {
+  axios
+} from '@/utils/request'
+
+export function getFamousDoctorList(parameter) {
+  return axios({
+    url: '/famousDoctor/getDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function getDoctorDetail(data) {
+  return axios({
+    url: '/famousDoctor/getDoctorDetail',
+    method: 'post',
+    data
+  })
+}
+
+export function saveDoctor(data) {
+  return axios({
+    url: '/famousDoctor/saveDoctorDetail',
+    method: 'post',
+    data
+  })
+}
+
+export function getCenter(data) {
+  return axios({
+    url: '/famousDoctor/getCenter',
+    method: 'post',
+    data
+  })
+}
diff --git a/src/api/group.js b/src/api/group.js
new file mode 100644
index 0000000000..fc7c105d70
--- /dev/null
+++ b/src/api/group.js
@@ -0,0 +1,59 @@
+import { axios } from '@/utils/request'
+
+const api = {
+  user: '/user',
+  role: '/role',
+  patient: '/patient',
+  permission: '/permission',
+  permissionNoPager: '/permission/no-pager',
+  orgTree: '/org/tree'
+}
+
+export default api
+
+export function getDatalList(parameter) {
+  return axios({
+    url: '/project/getDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+export function getPatientList(parameter) {
+  return axios({
+    url: '/project/getPatientList',
+    method: 'post',
+     params: parameter
+  })
+}
+export function joinProject(parameter) {
+  return axios({
+    url: '/project/joinProject',
+    method: 'post',
+    params: parameter
+  })
+}
+export function deleteCase(parameter) {
+  return axios({
+    url: '/project/deleteCase',
+    method: 'post',
+    params: parameter
+  })
+}
+
+// export function getPatientList (parameter) {
+//   return axios({
+//     url: '/patient/getDataList',
+//     method: 'post',
+//     params: parameter
+//   })
+// }
+// 
+// 
+// export function getPatientDetail (parameter) {
+//   return axios({
+//     url: '/patient/detail',
+//     method: 'post',
+//     params: parameter
+//   })
+// }
+// 
diff --git a/src/api/home.js b/src/api/home.js
new file mode 100644
index 0000000000..78e9c0caa6
--- /dev/null
+++ b/src/api/home.js
@@ -0,0 +1,53 @@
+import api from './index'
+import {
+  axios
+} from '@/utils/request'
+
+export function getAllNumbers(params) {
+  return axios({
+    url: '/index/getAllNumbers',
+    params: {isIcon: params},
+    method: 'post'
+  })
+}
+export function getMyWork() {
+  return axios({
+    url: '/index/getMyWork',
+    method: 'post',
+  })
+}
+export function getPatientsAndBasiss(params) {
+  return axios({
+    url: '/index/getPatientsAndBasiss',
+    params: {isIcon: params},
+    method: 'post',
+  })
+}
+export function getProvinceCompare() {
+  return axios({
+    url: '/index/getProvinceCompare',
+    method: 'post',
+  })
+}
+
+export function manualList(params) {
+  return axios({
+    url: '/index/manual',
+    method: 'post'
+  })
+}
+
+export function uploadFlie(params) {
+  return axios({
+    url: '/ethics/save',
+    method: 'post',
+    data: params
+  })
+}
+
+export function fileList() {
+  return axios({
+    url: '/ethics/getEthics',
+    method: 'post'
+  })
+}
\ No newline at end of file
diff --git a/src/api/login.js b/src/api/login.js
index 06f256b486..6875cd294c 100644
--- a/src/api/login.js
+++ b/src/api/login.js
@@ -14,9 +14,9 @@ import { axios } from '@/utils/request'
  */
 export function login (parameter) {
   return axios({
-    url: '/auth/login',
+    url: '/login/loginCheck',
     method: 'post',
-    data: parameter
+    params: parameter
   })
 }
 
@@ -40,11 +40,8 @@ export function getInfo () {
 
 export function logout () {
   return axios({
-    url: '/auth/logout',
-    method: 'post',
-    headers: {
-      'Content-Type': 'application/json;charset=UTF-8'
-    }
+    url: '/login/loginOut',
+    method: 'post'
   })
 }
 
@@ -59,3 +56,26 @@ export function get2step (parameter) {
     data: parameter
   })
 }
+
+export function getDetailById (parameter) {
+  return axios({
+    url: '/login/getDetailById',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function updatePwd (parameter) {
+  return axios({
+    url: '/login/updatePwd',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function getVersion () {
+  return axios({
+    url: '/text/getHtmlVersion',
+    method: 'post'
+  })
+}
\ No newline at end of file
diff --git a/src/api/message.js b/src/api/message.js
new file mode 100644
index 0000000000..ff32dc62a3
--- /dev/null
+++ b/src/api/message.js
@@ -0,0 +1,55 @@
+// import api from './index'
+import { axios } from '@/utils/request'
+
+// 查询所有消息
+export function getMessageList (parameter) {
+  return axios({
+    url: '/announcement/getDataList',
+    method: 'get',
+    params: parameter
+  })
+}
+// 撤回消息
+export function withdrawData (announcementId) {
+  return axios({
+    url: '/announcement/revocation/' + announcementId,
+    method: 'post'
+  })
+}
+// 发布消息
+export function publishData (announcementId) {
+  return axios({
+    url: '/announcement/publish/' + announcementId,
+    method: 'post'
+  })
+}
+// 编辑或者新增消息
+export function saveOrUpdateData (params) {
+  return axios({
+    url: '/announcement/saveOrUpdate',
+    method: 'post',
+    data: params
+  })
+}
+// 删除通知
+export function deleteData (id) {
+  return axios({
+    url: '/announcement/' + id + '/cancel',
+    method: 'post'
+  })
+}
+// 详情
+export function detailData (announcementId) {
+  return axios({
+    url: '/announcement/' + announcementId + '/view',
+    method: 'get'
+  })
+}
+
+// 阅读公告
+export function isReadDetail (announcementId) {
+  return axios({
+    url: '/announcement/readAnnouncement/' + announcementId,
+    method: 'post'
+  })
+}
diff --git a/src/api/messageReply.js b/src/api/messageReply.js
new file mode 100644
index 0000000000..bbc86ee43e
--- /dev/null
+++ b/src/api/messageReply.js
@@ -0,0 +1,25 @@
+import { axios } from '@/utils/request'
+
+// 查询所有人员消息
+export function getMessageDataList (parameter) {
+  return axios({
+    url: '/patientCenterMessage/getDataList',
+    method: 'get',
+    params: parameter
+  })
+}
+// 查询当前患者消息
+export function getPatientMessageList (patientCenterMessageId) {
+  return axios({
+    url: '/messageRecords/centerGetMessageRecords/' + patientCenterMessageId,
+    method: 'get'
+  })
+}
+// 回复消息消息
+export function replyMessageData (params) {
+  return axios({
+    url: '/patientCenterMessage/centerReplyMessage',
+    method: 'post',
+    data: params
+  })
+}
diff --git a/src/api/patient.js b/src/api/patient.js
new file mode 100644
index 0000000000..5c43acd559
--- /dev/null
+++ b/src/api/patient.js
@@ -0,0 +1,77 @@
+import { axios } from '@/utils/request'
+
+const api = {
+  user: '/user',
+  role: '/role',
+  patient: '/patient',
+  permission: '/permission',
+  permissionNoPager: '/permission/no-pager',
+  orgTree: '/org/tree'
+}
+
+export default api
+
+
+export function getPatientList(parameter) {
+  return axios({
+    url: '/patient/getDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function getPatientDataList(parameter) {
+  return axios({
+    url: '/patient/getPatientDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function deletePatient(parameter) {
+  return axios({
+    url: '/patient/deletePatient',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function getPatientDetail(parameter) {
+  return axios({
+    url: '/patient/detail',
+    method: 'post',
+    params: parameter
+  })
+}
+
+//根据身份证号获取患者详情
+export function getPatientDetailByCard(parameter) {
+  return axios({
+    url: '/patient/getPatientDetailByCard',
+    method: 'post',
+    data: parameter
+  })
+}
+
+export function getSFDataList(parameter) {
+  return axios({
+    url: '/patient/getSFDataList',
+    method: 'post',
+    data: parameter
+  })
+}
+
+export function exportPatient() {
+  return axios({
+    url: '/patient/export',
+    method: 'get'
+  })
+}
+
+export function resetPwd(params) {
+  return axios({
+    url: '/authority/resetPassword',
+    method: 'post',
+    data: params
+  })
+}
\ No newline at end of file
diff --git a/src/api/report.js b/src/api/report.js
new file mode 100644
index 0000000000..0cfb43ec75
--- /dev/null
+++ b/src/api/report.js
@@ -0,0 +1,158 @@
+import { axios } from '@/utils/request'
+
+const api = {
+  reportCollectBase: '/reportCollectBase'
+}
+
+export default api
+
+
+export function getReportList(parameter) {
+  return axios({
+    url: '/reportCollectBase/getDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+
+//添加报告
+export function createReport(parameter) {
+  return axios({
+    url: '/reportCollectBase/createReport',
+    method: 'post',
+    params: parameter
+  })
+}
+//根据用户id获得用户自身带有的选项
+export function getChooseReportCollect(parameter) {
+  return axios({
+    url: '/reportCollectBase/getChooseReportCollect',
+    method: 'post',
+    params: parameter
+  })
+}
+
+//ocr识别
+export function ocrResult(parameter) {
+  return axios({
+    url: '/reportCollectBase/ocrResult',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function getReportType(parameter) {
+  return axios({
+    url: '/reportCollectBase/getReportType',
+    method: 'post'
+  })
+}
+
+export function getReportTypeMark(parameter) {
+  return axios({
+    url: '/reportCollectBase/getReportTypeMark',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function saveReport(parameter) {
+  return axios({
+    url: '/reportCollectBase/saveReport',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function getReportFormData(parameter) {
+  return axios({
+    url: '/reportCollectBase/getReportFormData',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function getImportDataList(parameter) {
+  return axios({
+    url: '/reportCollectBase/getImportDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+export function getReporApplyList(params) {
+  return axios({
+    url: '/reportApply/getDataList',
+    method: 'post',
+    params: params
+  })
+}
+export function saveReporApply(params) {
+  return axios({
+    url: '/reportApply/saveApply',
+    method: 'post',
+    data: params
+  })
+}
+export function checReporApply(params) {
+  return axios({
+    url: '/reportApply/checkApply',
+    method: 'post',
+    data: params
+  })
+}
+export function getEthicsList(params) {
+  return axios({
+    url: '/ethics/getDataList',
+    method: 'post',
+    params: params
+  })
+}
+
+export function ethicsDownload(params) {
+  return axios({
+    url: '/ethics/download',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getPatientEntry(params) {
+  return axios({
+    url: '/patient/getPatientEntry',
+    method: 'post',
+    params: params
+  })
+}
+
+export function getIconJxDataList(params) {
+  return axios({
+    url: '/patientReport/getIconJxDataList',
+    method: 'post',
+    params: params
+  })
+}
+
+export function getIconCgsfDataList(params) {
+  return axios({
+    url: '/patientReport/getIconCgsfDataList',
+    method: 'post',
+    params: params
+  })
+}
+
+export function getIconJxjzDataList(params) {
+  return axios({
+    url: '/patientReport/getIconJxjzDataList',
+    method: 'post',
+    params: params
+  })
+}
+
+export function getIconJxNumList(params) {
+  return axios({
+    url: '/patientReport/getIconJxNumList',
+    method: 'post',
+    params: params
+  })
+}
+
diff --git a/src/api/reportCheck.js b/src/api/reportCheck.js
new file mode 100644
index 0000000000..54ff980a31
--- /dev/null
+++ b/src/api/reportCheck.js
@@ -0,0 +1,27 @@
+import {
+  axios
+} from '@/utils/request'
+
+export function getReportDataList(parameter) {
+  return axios({
+    url: '/reportCheck/getDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function getReportInfo(data) {
+  return axios({
+    url: '/reportCheck/getReport',
+    method: 'post',
+    data
+  })
+}
+
+export function updateReport(data) {
+  return axios({
+    url: '/reportCheck/updateReport',
+    method: 'post',
+    data
+  })
+}
\ No newline at end of file
diff --git a/src/api/task.js b/src/api/task.js
new file mode 100644
index 0000000000..807b3b36c1
--- /dev/null
+++ b/src/api/task.js
@@ -0,0 +1,24 @@
+import api from './index'
+import { axios } from '@/utils/request'
+
+export function getVisitTask(parameter) {
+  return axios({
+    url: '/basis/getFsDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+export function ignoreTask(parameter) {
+  return axios({
+    url: '/visitTask/ignoreTask',
+    method: 'post',
+    params: parameter
+  })
+}
+export function ignoreBNTask(parameter) {
+  return axios({
+    url: '/basis/ignore',
+    method: 'post',
+    params: parameter
+  })
+}
\ No newline at end of file
diff --git a/src/api/text.js b/src/api/text.js
new file mode 100644
index 0000000000..514fe74839
--- /dev/null
+++ b/src/api/text.js
@@ -0,0 +1,35 @@
+import {
+  axios
+} from '@/utils/request'
+
+export function getWXList(parameter) {
+  return axios({
+    url: '/text/getWXList',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function getWebsiteList(parameter) {
+    return axios({
+      url: '/text/getWebsiteList',
+      method: 'post',
+      params: parameter
+    })
+  }
+
+export function getArticleDetail(parameter) {
+  return axios({
+    url: '/text/viewAll',
+    method: 'get',
+    params: parameter
+  })
+}
+
+export function addOrEdit(data) {
+  return axios({
+    url: `/text/addOrEdit`,
+    method: 'post',
+    data
+  })
+}
diff --git a/src/api/textGwLb.js b/src/api/textGwLb.js
new file mode 100644
index 0000000000..ee34f13746
--- /dev/null
+++ b/src/api/textGwLb.js
@@ -0,0 +1,19 @@
+import {
+  axios
+} from '@/utils/request'
+
+export function getDataList(parameter) {
+  return axios({
+    url: '/textGwLb/getDataList',
+    method: 'get',
+    params: parameter
+  })
+}
+
+export function saveData(data) {
+  return axios({
+    url: '/textGwLb/save',
+    method: 'post',
+    data
+  })
+}
\ No newline at end of file
diff --git a/src/api/ticket.js b/src/api/ticket.js
new file mode 100644
index 0000000000..5a739e98dd
--- /dev/null
+++ b/src/api/ticket.js
@@ -0,0 +1,19 @@
+import {
+  axios
+} from '@/utils/request'
+
+export function getTicketDataList(parameter) {
+  return axios({
+    url: '/ticket/getDataList',
+    method: 'post',
+    params: parameter
+  })
+}
+
+export function logoutTicket(data) {
+  return axios({
+    url: '/ticket/logoutTicket',
+    method: 'post',
+    data
+  })
+}
\ No newline at end of file
diff --git a/src/assets/avator.png b/src/assets/avator.png
new file mode 100644
index 0000000000..b1bd2e100f
Binary files /dev/null and b/src/assets/avator.png differ
diff --git a/src/assets/bhalla.jpg b/src/assets/bhalla.jpg
new file mode 100644
index 0000000000..de5173b36b
Binary files /dev/null and b/src/assets/bhalla.jpg differ
diff --git a/src/assets/bhalla.png b/src/assets/bhalla.png
new file mode 100644
index 0000000000..8ff9ae3fc2
Binary files /dev/null and b/src/assets/bhalla.png differ
diff --git a/src/assets/bkzy.png b/src/assets/bkzy.png
new file mode 100644
index 0000000000..ec25356c93
Binary files /dev/null and b/src/assets/bkzy.png differ
diff --git a/src/assets/duigou.png b/src/assets/duigou.png
new file mode 100644
index 0000000000..8a663d5ac5
Binary files /dev/null and b/src/assets/duigou.png differ
diff --git a/src/assets/file.png b/src/assets/file.png
new file mode 100644
index 0000000000..e94161b0af
Binary files /dev/null and b/src/assets/file.png differ
diff --git a/src/assets/h-a.png b/src/assets/h-a.png
new file mode 100644
index 0000000000..1d0f496856
Binary files /dev/null and b/src/assets/h-a.png differ
diff --git a/src/assets/head-icon.png b/src/assets/head-icon.png
new file mode 100644
index 0000000000..19815fa539
Binary files /dev/null and b/src/assets/head-icon.png differ
diff --git a/src/assets/headerImg.png b/src/assets/headerImg.png
new file mode 100644
index 0000000000..f73d81f726
Binary files /dev/null and b/src/assets/headerImg.png differ
diff --git a/src/assets/home-5.png b/src/assets/home-5.png
new file mode 100644
index 0000000000..279c20dfc7
Binary files /dev/null and b/src/assets/home-5.png differ
diff --git a/src/assets/home1.png b/src/assets/home1.png
new file mode 100644
index 0000000000..61671dcb24
Binary files /dev/null and b/src/assets/home1.png differ
diff --git a/src/assets/home2.png b/src/assets/home2.png
new file mode 100644
index 0000000000..91304a9879
Binary files /dev/null and b/src/assets/home2.png differ
diff --git a/src/assets/home3.png b/src/assets/home3.png
new file mode 100644
index 0000000000..acf91b66fe
Binary files /dev/null and b/src/assets/home3.png differ
diff --git a/src/assets/icons/baogao.svg b/src/assets/icons/baogao.svg
new file mode 100644
index 0000000000..54168245c6
--- /dev/null
+++ b/src/assets/icons/baogao.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1572416255329" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1576" width="200" height="200" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M568.32 921.6H281.6c-92.16 0-158.72-61.44-158.72-153.6V394.24c0-15.36-5.12-20.48-20.48-20.48C56.32 368.64 46.08 358.4 46.08 312.32V215.04C46.08 153.6 92.16 102.4 153.6 102.4h552.96C768 102.4 814.08 153.6 819.2 215.04v404.48c0 15.36 5.12 20.48 20.48 20.48h102.4c25.6 0 40.96 15.36 40.96 40.96v133.12c0 61.44-51.2 112.64-117.76 112.64-102.4-5.12-199.68-5.12-296.96-5.12z m189.44-66.56c-10.24-20.48-10.24-40.96-10.24-66.56V389.12 220.16c0-30.72-20.48-51.2-46.08-51.2s-46.08 20.48-46.08 51.2v97.28c0 40.96-10.24 51.2-51.2 51.2H209.92c-15.36 0-20.48 5.12-20.48 20.48V768c0 51.2 30.72 81.92 87.04 81.92h215.04c87.04 5.12 174.08 5.12 266.24 5.12zM599.04 174.08H163.84c-30.72 0-46.08 15.36-46.08 46.08v66.56c0 10.24 5.12 15.36 15.36 15.36h440.32c15.36 0 15.36-5.12 15.36-15.36 0-40.96-5.12-76.8 10.24-112.64z m307.2 588.8s5.12 0 0 0v-40.96c0-10.24 0-15.36-15.36-15.36h-66.56c-5.12-5.12-5.12 0-5.12 10.24v92.16c0 25.6 20.48 46.08 40.96 46.08 25.6 0 46.08-15.36 46.08-40.96 5.12-20.48 0-35.84 0-51.2z" p-id="1577"></path><path d="M471.04 471.04h158.72c25.6 0 40.96 15.36 40.96 35.84 0 20.48-15.36 35.84-40.96 35.84H307.2c-25.6 0-40.96-15.36-40.96-35.84 0-20.48 15.36-35.84 40.96-35.84h163.84zM471.04 706.56H312.32c-25.6 0-40.96-10.24-40.96-35.84 0-20.48 15.36-35.84 46.08-35.84h317.44c25.6 0 40.96 10.24 40.96 35.84 0 20.48-15.36 35.84-46.08 35.84H471.04z" p-id="1578"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/bingli.svg b/src/assets/icons/bingli.svg
new file mode 100644
index 0000000000..b8fe43fb37
--- /dev/null
+++ b/src/assets/icons/bingli.svg
@@ -0,0 +1 @@
+<svg t="1567411952052" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4295" width="300" height="300"><path d="M890.88 619.52v189.44c0 66.56-40.96 112.64-112.64 112.64H245.76c-66.56 0-112.64-46.08-112.64-112.64V317.44c0-66.56 46.08-107.52 107.52-107.52h92.16c15.36 0 25.6-5.12 30.72-15.36a168.96 168.96 0 0 1 296.96 0c5.12 10.24 15.36 15.36 30.72 15.36h92.16c66.56 0 107.52 40.96 107.52 107.52v302.08zM204.8 619.52v179.2c0 46.08 10.24 56.32 56.32 56.32H768c51.2 0 61.44-10.24 61.44-61.44v-266.24-189.44c0-10.24 0-25.6-5.12-35.84-10.24-25.6-35.84-20.48-51.2-20.48-20.48 0-10.24 20.48-10.24 30.72v51.2c-5.12 35.84-30.72 61.44-71.68 61.44H353.28c-40.96 0-71.68-30.72-71.68-71.68V296.96c0-5.12 0-15.36-10.24-15.36-46.08-10.24-66.56 10.24-66.56 46.08v291.84z m307.2-266.24h122.88c56.32 0 56.32 0 51.2-56.32 0-15.36-5.12-15.36-15.36-15.36h-25.6c-15.36 0-25.6-5.12-30.72-20.48-15.36-51.2-51.2-87.04-102.4-87.04S424.96 204.8 409.6 261.12c0 15.36-5.12 20.48-20.48 20.48-46.08 0-46.08 0-46.08 51.2 0 20.48 5.12 25.6 25.6 20.48H512z" p-id="4296"></path><path d="M512 711.68H384c-20.48 0-35.84-5.12-35.84-25.6s15.36-25.6 30.72-25.6h261.12c20.48 0 35.84 10.24 35.84 30.72 0 20.48-15.36 25.6-35.84 25.6-40.96-10.24-87.04-5.12-128-5.12zM512 573.44H384c-20.48 0-30.72-5.12-30.72-25.6s15.36-25.6 35.84-25.6h256c20.48 0 35.84 5.12 35.84 25.6s-15.36 25.6-35.84 25.6H512z" p-id="4297"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/blzysh.svg b/src/assets/icons/blzysh.svg
new file mode 100644
index 0000000000..6c29476ad7
--- /dev/null
+++ b/src/assets/icons/blzysh.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1572235203886" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2007" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M468.48 423.90016H311.36256c-21.49888 0-38.99904 17.50016-38.99904 38.99904 0 21.4016 17.50016 38.99904 38.99904 38.99904H468.48c21.4016 0 38.99904-17.50016 38.99904-38.99904 0-21.4016-17.50016-38.99904-38.99904-38.99904zM311.36256 242.89792c-21.4016 0-38.99904 17.50016-38.99904 38.99904 0 21.4016 17.50016 38.99904 38.99904 38.99904h380.99968c21.4016 0 38.99904-17.50016 38.99904-38.99904 0-21.4016-17.50016-38.99904-38.99904-38.99904H311.36256z" p-id="2008"></path><path d="M432.1024 882.60096H192.79872V139.89888h639.69792v364.8c0 21.00224 16.9984 38.00064 38.00064 38.00064s38.00064-16.9984 38.00064-38.00064V113.89952c0-27.60192-22.4-50.00192-50.00192-50.00192H166.79936c-27.60192 0-50.00192 22.4-50.00192 50.00192v794.7008c0 27.60192 22.4 50.00192 50.00192 50.00192h265.29792c20.80256-0.30208 37.49888-17.19808 37.49888-38.00064s-16.7936-37.70368-37.49376-38.00064z" p-id="2009"></path><path d="M859.09504 815.08352l-68.49536-102.76864c30.1824-21.67808 49.9968-56.87296 49.9968-96.8448 0-65.93536-53.4528-119.38304-119.38304-119.38304-65.93536 0-119.38816 53.4528-119.38816 119.38304a119.05024 119.05024 0 0 0 49.9968 96.8448l-68.49536 102.76864h-77.0048v143.26272h429.78816v-143.26272h-77.01504z m-209.5616-199.56224c-0.01536-39.57248 32.05632-71.66464 71.6288-71.68 39.57248-0.01536 71.66464 32.05632 71.68 71.6288 0.01536 39.57248-32.05632 71.66464-71.6288 71.68-39.57248 0.01536-71.66464-32.05632-71.68-71.6288z m46.5152 116.56704a118.1696 118.1696 0 0 0 50.33472 0l65.52064 82.9952H630.528l65.52064-82.9952z" p-id="2010"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/blzysq.svg b/src/assets/icons/blzysq.svg
new file mode 100644
index 0000000000..0333c275ae
--- /dev/null
+++ b/src/assets/icons/blzysq.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1572235200327" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1894" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M327.08608 358.8352h354.21184c19.89632 0 36.25984-16.27136 36.25984-36.25984 0-19.89632-16.27136-36.25984-36.25984-36.25984H327.08608c-19.89632 0-36.25984 16.27136-36.25984 36.25984 0 19.89632 16.27136 36.25984 36.25984 36.25984z m-36.25984 132.01408c0 19.89632 16.27136 36.25984 36.25984 36.25984h355.51232c19.89632 0 36.25984-16.27136 36.25984-36.25984 0-19.89632-16.27136-36.25984-36.25984-36.25984H327.08608c-19.98848 0-36.25984 16.27136-36.25984 36.25984z" p-id="1895"></path><path d="M429.81376 857.23648H207.33952V166.76352h594.71872v339.1488c0 19.52256 15.80544 35.328 35.328 35.328s35.328-15.80544 35.328-35.328V142.58688c0-25.66144-20.82304-46.48448-46.48448-46.48448H183.168c-25.66144 0-46.48448 20.82304-46.48448 46.48448V881.408c0 25.66144 20.82304 46.48448 46.48448 46.48448h246.64576a35.328 35.328 0 0 0 34.86208-35.328c0-19.33312-15.616-35.0464-34.86208-35.328z" p-id="1896"></path><path d="M733.72672 803.87584h-138.24512l9.29792-9.29792 0.09216-0.09216c10.97216-11.43296 10.87488-29.75232-0.37376-41.00096-11.24864-11.24864-29.56288-11.3408-41.00096-0.37376l-59.40736 59.40736a29.29664 29.29664 0 0 0-8.45824 20.54656v0.09216c0 7.808 2.97472 15.06304 8.45824 20.54656l59.22304 59.22304a29.1328 29.1328 0 0 0 28.53888 8.27392c10.41408-2.60096 18.4064-10.69056 21.10464-21.10464a29.41952 29.41952 0 0 0-8.27392-28.53888l-9.20576-9.20576h138.24512c16.08192 0 29.2864-13.1072 29.2864-29.2864-0.08704-16.08192-13.19424-29.18912-29.28128-29.18912z m145.21856-138.89536l-59.3152-59.3152-0.18432-0.18432a29.1072 29.1072 0 0 0-40.6272 0.7424 29.18912 29.18912 0 0 0-0.7424 40.6272l9.48224 9.5744h-138.24512c-16.08192 0-29.2864 13.1072-29.2864 29.2864 0 16.08192 13.1072 29.2864 29.2864 29.2864h138.15296l-9.29792 9.29792-0.09216 0.09216c-10.97216 11.43296-10.87488 29.84448 0.37376 41.00096a29.11744 29.11744 0 0 0 20.63872 8.45824 29.17376 29.17376 0 0 0 20.36224-8.18176l59.40736-59.40736a29.67552 29.67552 0 0 0 8.45824-20.63872 29.03552 29.03552 0 0 0-8.3712-20.63872z" p-id="1897"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/fangshi.svg b/src/assets/icons/fangshi.svg
new file mode 100644
index 0000000000..e95cc732bf
--- /dev/null
+++ b/src/assets/icons/fangshi.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1567410672167" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3565" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M512 921.6H199.68c-51.2 0-76.8-25.6-76.8-81.92V215.04c0-51.2 25.6-81.92 76.8-81.92h61.44c25.6 0 51.2 5.12 66.56-20.48 10.24-10.24 30.72-10.24 51.2-10.24h271.36c25.6 0 46.08 5.12 61.44 25.6 5.12 10.24 15.36 10.24 20.48 10.24h97.28c46.08 0 71.68 25.6 76.8 71.68v640c-5.12 46.08-30.72 71.68-76.8 71.68H512z m-322.56-394.24v296.96c0 20.48 5.12 25.6 25.6 25.6h593.92c20.48 0 25.6-5.12 25.6-25.6V281.6c0-25.6 10.24-56.32-5.12-71.68-15.36-15.36-46.08-5.12-71.68-5.12-30.72 0-30.72 0-30.72 30.72 0 46.08-25.6 71.68-71.68 76.8H368.64c-40.96 0-66.56-30.72-66.56-71.68v-20.48c0-10.24-5.12-15.36-15.36-15.36H215.04c-15.36 0-20.48 5.12-20.48 20.48-5.12 102.4-5.12 204.8-5.12 302.08zM512 245.76h92.16c51.2 0 51.2 0 51.2-51.2 0-20.48-5.12-20.48-20.48-20.48H419.84c-51.2 0-51.2 0-51.2 51.2 0 15.36 5.12 15.36 15.36 15.36 46.08 5.12 87.04 5.12 128 5.12z" p-id="3566"></path><path d="M460.8 711.68c-10.24 0-20.48-5.12-30.72-15.36-30.72-35.84-61.44-66.56-92.16-102.4-15.36-20.48-15.36-40.96 0-51.2 15.36-15.36 35.84-10.24 51.2 5.12 20.48 20.48 35.84 40.96 51.2 61.44 10.24 15.36 15.36 10.24 25.6 0 46.08-51.2 92.16-102.4 143.36-153.6l15.36-15.36c15.36-15.36 35.84-15.36 51.2-5.12 15.36 15.36 15.36 35.84 0 51.2-61.44 71.68-128 138.24-194.56 209.92 0 10.24-5.12 15.36-20.48 15.36z" p-id="3567"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/home.svg b/src/assets/icons/home.svg
new file mode 100644
index 0000000000..a870011a73
--- /dev/null
+++ b/src/assets/icons/home.svg
@@ -0,0 +1 @@
+<svg t="1567412051859" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4437" width="200" height="200"><path d="M148.48 517.12c-15.36 15.36-30.72 30.72-46.08 40.96-20.48 15.36-40.96 20.48-51.2 5.12-15.36-15.36-10.24-30.72 5.12-51.2 87.04-81.92 174.08-163.84 266.24-245.76 51.2-51.2 102.4-97.28 158.72-148.48 25.6-25.6 40.96-25.6 66.56 0 138.24 128 281.6 261.12 419.84 389.12 20.48 20.48 20.48 35.84 10.24 46.08-15.36 15.36-30.72 10.24-51.2-5.12-133.12-122.88-266.24-240.64-394.24-363.52-10.24-10.24-20.48-10.24-30.72 0C409.6 271.36 317.44 358.4 225.28 440.32c-5.12 10.24-10.24 15.36-10.24 25.6v348.16c0 30.72 15.36 46.08 46.08 46.08h92.16c15.36 0 20.48-5.12 20.48-20.48v-143.36c0-30.72 10.24-35.84 40.96-35.84H614.4c20.48 0 35.84 5.12 35.84 25.6 0 25.6-15.36 30.72-35.84 30.72H460.8c-25.6 0-30.72 5.12-25.6 30.72v138.24c0 25.6-10.24 35.84-35.84 35.84H250.88C189.44 921.6 153.6 880.64 153.6 824.32v-276.48c-5.12-10.24 0-20.48-5.12-30.72z" p-id="4438"></path><path d="M808.96 721.92v-102.4c0-20.48 10.24-35.84 30.72-35.84 20.48 0 30.72 10.24 30.72 35.84v209.92c0 56.32-40.96 97.28-97.28 97.28h-143.36c-25.6 0-35.84-10.24-35.84-25.6 0-25.6 20.48-25.6 35.84-25.6h133.12c35.84 0 46.08-10.24 46.08-46.08v-107.52z" p-id="4439"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/huodongquan.svg b/src/assets/icons/huodongquan.svg
new file mode 100644
index 0000000000..7ae456565a
--- /dev/null
+++ b/src/assets/icons/huodongquan.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1572235207437" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2120" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M900.67456 558.65344a33.7408 33.7408 0 0 0 33.7408-33.7408v-169.6256c0-28.19584-15.45728-52.82816-38.33344-65.93024l-32.97792-124.51328c-9.37984-35.4048-45.81376-56.58112-81.21344-47.20128L171.38688 279.35232h-5.86752c-41.87136 0-75.93472 34.06336-75.93472 75.93472v169.6256a33.7408 33.7408 0 0 0 33.7408 33.7408 35.3536 35.3536 0 0 1 35.31264 35.31264 35.3536 35.3536 0 0 1-35.31264 35.31264 33.7408 33.7408 0 0 0-33.7408 33.7408v169.6256c0 41.87136 34.06336 75.93472 75.93472 75.93472h692.96128c41.87136 0 75.93472-34.06336 75.93472-75.93472v-169.6256a33.7408 33.7408 0 0 0-33.7408-33.7408c-19.47136 0-35.31264-15.84128-35.31264-35.31264s15.84128-35.31264 35.31264-35.31264z m-105.21088-389.75488a13.42464 13.42464 0 0 1 16.38912 9.5232l26.73152 100.93056H378.46016l417.00352-110.45376zM157.06624 832.64v-141.57312c40.15616-13.99296 69.05344-52.23936 69.05344-97.10592S197.2224 510.85312 157.06624 496.86016V355.28704c0-4.6592 3.79392-8.45312 8.45312-8.45312h87.49056v494.26432H165.51936c-4.6592 0-8.45312-3.79392-8.45312-8.45824z m709.86752-335.77984c-40.15616 13.99296-69.05344 52.23936-69.05344 97.10592s28.89728 83.11296 69.05344 97.10592v141.57312c0 4.66432-3.79392 8.45312-8.45824 8.45312H301.2096V346.83392h557.27104c4.66432 0 8.45824 3.79392 8.45824 8.45312l-0.00512 141.57312z" p-id="2121"></path><path d="M673.28512 515.4304H443.8528a24.09984 24.09984 0 0 0 0 48.19968h229.43744a24.09472 24.09472 0 1 0-0.00512-48.19968z m0 115.67616H443.8528a24.09984 24.09984 0 0 0 0 48.19968h229.43744a24.09472 24.09472 0 1 0-0.00512-48.19968z" p-id="2122"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/hzbgsy.svg b/src/assets/icons/hzbgsy.svg
new file mode 100644
index 0000000000..9402b849e1
--- /dev/null
+++ b/src/assets/icons/hzbgsy.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1572235180545" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1783" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M267.90912 756.00896h433.44896v-54.52288H267.90912v54.52288z m433.44896-189.4912H267.91424v53.64224h433.44384v-53.64224z m108.53376 325.04832H186.76736V159.5392h436.9408l54.20032-54.21568H132.56704v840.46848h731.49952V281.19552l-54.17472 59.40224v550.96832z m-297.68192-433.7664l99.16416-0.0768 178.90816-178.3552-96.65024-100.33152-181.34528 180.7872-0.0768 97.97632z m379.22304-279.27552l-96.57344-100.31616-56.89856 56.23808 97.0496 100.62336 56.4224-56.54528z m0 0" p-id="1784"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/jixing.svg b/src/assets/icons/jixing.svg
new file mode 100644
index 0000000000..a8f4b1bb30
--- /dev/null
+++ b/src/assets/icons/jixing.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1572233331309" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1672" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M462.61248 483.5072v259.456c0 26.3424-13.16864 52.67968-32.92672 72.43776s-46.09536 32.92672-72.43776 32.92672c-19.75808 0-39.51104 0-52.67968 6.58432-32.92672 6.58432-59.26912 39.51104-92.19072 59.26912-65.85344 32.92672-111.9488-13.16864-118.53312-79.02208-6.58432-72.43776-6.58432-131.70688-6.58432-177.80224 6.58432-52.67968 13.16864-167.26528 26.3424-200.192 19.75808-52.67968 46.09536-92.19072 85.6064-131.70688s85.6064-65.85344 131.70688-85.6064c52.67968-19.75808 105.36448 0 111.9488 65.85344 0 26.3424 0 46.09536-6.58432 59.26912l19.75808-19.75808c13.16864-6.58432 13.16864-19.75808 13.16864-39.51104V141.07648c0-26.3424 19.75808-46.09536 46.09536-46.09536s46.09536 19.75808 46.09536 46.09536v177.80224c0 13.16864 6.58432 26.3424 13.16864 39.51104l6.58432 6.58432V312.2944c0-65.85344 52.67968-85.6064 111.9488-65.85344 52.67968 19.75808 98.78016 46.09536 131.70688 85.6064 39.51104 39.51104 65.85344 79.02208 85.6064 131.70688 13.16864 39.51104 19.75808 147.5072 26.3424 200.192 0 52.67968 0 111.9488-6.58432 177.80224s-46.09536 105.36448-118.53312 79.02208c-32.92672-13.16864-59.26912-46.09536-92.19072-59.26912-13.16864-6.58432-32.92672-6.58432-52.67968-6.58432-26.3424 0-52.67968-13.16864-72.43776-32.92672s-32.92672-46.09536-32.92672-72.43776V483.5072c0-26.3424 0-52.67968 13.16864-72.43776l-32.92672-39.51104c-6.58432-6.58432-13.16864-13.16864-19.75808-13.16864-6.58432 0-19.75808 0-26.3424 6.58432l-39.51104 46.09536c6.5792 26.3424 6.5792 46.10048 6.5792 72.43776z m414.86848 246.28736c-39.51104 6.58432-111.9488 13.16864-184.38656-32.92672-6.58432-6.58432-13.16864-19.75808-6.58432-26.3424 6.58432-6.58432 19.75808-13.16864 26.3424-6.58432 65.85344 39.51104 131.70688 32.92672 164.62848 26.3424v-32.92672c0-46.09536-6.58432-154.09664-19.75808-187.01824-13.16864-39.51104-39.51104-79.02208-65.85344-105.36448-32.92672-32.92672-65.85344-52.67968-111.9488-65.85344-39.51104-13.16864-19.75808 39.51104-19.75808 65.85344 6.58432 26.3424 6.58432 46.09536-13.16864 65.85344-13.16864 13.16864-13.16864 32.92672-13.16864 46.09536v266.04032c0 13.16864 6.58432 19.75808 13.16864 26.3424 6.58432 6.58432 19.75808 13.16864 26.3424 13.16864 19.75808 0 46.09536 0 65.85344 6.58432 46.09536 13.16864 59.26912 39.51104 105.36448 59.26912 19.75808 13.16864 26.3424 0 26.3424-19.75808 0-32.9216 6.58432-65.84832 6.58432-98.77504z m-724.3776-39.51104c32.92672 13.16864 98.78016 19.75808 171.21792-26.3424 6.58432-6.58432 19.75808 0 26.3424 6.58432 6.58432 6.58432 0 19.75808-6.58432 26.3424-72.43776 46.09536-144.87552 39.51104-184.38656 32.92672 0 32.92672 0 65.85344 6.58432 98.78016 0 19.75808 0 32.92672 26.3424 19.75808 39.51104-19.75808 59.26912-52.67968 105.36448-59.26912 19.75808-6.58432 46.09536-6.58432 65.85344-6.58432 13.16864 0 19.75808-6.58432 26.3424-13.16864 6.58432-6.58432 13.16864-19.75808 13.16864-26.3424V476.92288c0-13.16864 0-32.92672-6.58432-46.09536-19.75808-19.75808-19.75808-32.92672-13.16864-65.85344 6.58432-26.3424 19.75808-72.43776-19.75808-65.85344-52.6848 19.75808-85.61152 39.51616-118.53824 72.43776S192.6144 437.41184 179.44576 476.92288c-13.16864 32.92672-19.75808 140.92288-19.75808 187.01824-6.58432 6.58944-6.58432 19.75808-6.58432 26.3424z" p-id="1673"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/jkzs.svg b/src/assets/icons/jkzs.svg
new file mode 100644
index 0000000000..01eec7b14d
--- /dev/null
+++ b/src/assets/icons/jkzs.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1572235467519" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2454" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M785.81248 162.44224H728.5248l-7.1424 28.17024a53.69856 53.69856 0 0 1-52.13184 40.49408H372.55168a53.69344 53.69344 0 0 1-52.13184-40.49408l-7.1424-28.17024H238.18752c-86.03648 0-156.032 69.99552-156.032 156.032v448.91648c0 86.03648 69.99552 156.032 156.032 156.032h547.62496c86.03648 0 156.032-69.99552 156.032-156.032V318.47424c0-86.03648-69.99552-156.032-156.032-156.032z m81.3312 604.94336c0 44.84608-36.48512 81.3312-81.3312 81.3312H238.18752c-44.84608 0-81.3312-36.48512-81.3312-81.3312V318.47424c0-44.84608 36.48512-81.3312 81.3312-81.3312h20.59776a128.38912 128.38912 0 0 0 113.7664 68.66432h296.704a128.38912 128.38912 0 0 0 113.7664-68.66432h2.79552c44.84608 0 81.3312 36.48512 81.3312 81.3312v448.91136h-0.00512z" p-id="2455"></path><path d="M658.22208 515.84h-94.85312V430.7968c0-13.09696-9.51808-23.71584-21.25312-23.71584H485.67808c-11.74016 0-21.25312 10.61888-21.25312 23.71584v85.0432h-85.8624a23.71072 23.71072 0 0 0-23.71072 23.71584v51.51744a23.71584 23.71584 0 0 0 23.71072 23.71584h85.8624v95.67232c0 13.09696 9.51808 23.71072 21.25312 23.71072h56.43264c11.73504 0 21.25312-10.61888 21.25312-23.71072v-95.67232h94.85312a23.71072 23.71072 0 0 0 23.71072-23.71584v-51.51744a23.7056 23.7056 0 0 0-23.7056-23.71584zM393.28256 177.44384h250.21952a38.43072 38.43072 0 1 0 0-76.86144H393.28256a38.43072 38.43072 0 1 0 0 76.86144z" p-id="2456"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/myzj.svg b/src/assets/icons/myzj.svg
new file mode 100644
index 0000000000..dd6ab225bd
--- /dev/null
+++ b/src/assets/icons/myzj.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1572235462698" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2343" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M655.34464 617.61024c139.65312 51.39968 244.0448 175.54432 267.42784 326.5792H858.0608c-30.14144-163.88608-173.45024-288.12288-346.05568-288.12288-172.60544 0-315.91936 124.24192-346.05568 288.12288h-64.7168c23.38304-151.03488 127.77472-275.18464 267.39712-326.5792-86.41536-49.71008-144.74752-142.81216-144.74752-249.67168V79.81568h576.25088v288.12288c-0.00512 106.85952-58.3424 199.9616-144.78848 249.67168z m-47.30368-441.7536h-64.0256V111.82592H479.98976v64.0256H415.95904v64.0256h64.03072v64.0256h64.03072V239.88224h64.0256V175.85664zM287.90272 367.93856c0 123.77088 100.3264 224.09728 224.09728 224.09728s224.09728-100.3264 224.09728-224.09728H287.90272z" p-id="2344"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/ocr.svg b/src/assets/icons/ocr.svg
new file mode 100644
index 0000000000..d3c987a182
--- /dev/null
+++ b/src/assets/icons/ocr.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1565772359823" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2271" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M512 947.2H209.066667c-12.8 0-25.6 4.266667-34.133334 12.8-29.866667 34.133333-81.066667 29.866667-110.933333 0-29.866667-34.133333-29.866667-81.066667 4.266667-110.933333 8.533333-8.533333 12.8-17.066667 12.8-29.866667V204.8c0-12.8-4.266667-21.333333-12.8-29.866667-34.133333-29.866667-38.4-81.066667-4.266667-110.933333 34.133333-29.866667 81.066667-29.866667 110.933333 4.266667 8.533333 8.533333 17.066667 12.8 29.866667 12.8h614.4c12.8 0 21.333333-4.266667 29.866667-12.8 29.866667-34.133333 81.066667-38.4 115.2-4.266667 29.866667 34.133333 29.866667 81.066667-4.266667 110.933333-8.533333 8.533333-12.8 17.066667-12.8 29.866667v614.4c0 12.8 4.266667 21.333333 12.8 29.866667 34.133333 29.866667 38.4 76.8 4.266667 110.933333-29.866667 34.133333-81.066667 34.133333-110.933334 0-8.533333-12.8-21.333333-12.8-34.133333-12.8H512zM866.133333 512V204.8c0-21.333333-21.333333-46.933333-42.666666-46.933333H204.8c-21.333333 0-46.933333 25.6-46.933333 46.933333v614.4c0 21.333333 25.6 46.933333 46.933333 46.933333h610.133333c25.6 0 46.933333-25.6 46.933334-46.933333 4.266667-102.4 4.266667-204.8 4.266666-307.2z" p-id="2272"></path><path d="M563.2 524.8v123.733333c0 17.066667 4.266667 21.333333 21.333333 21.333334 34.133333 0 34.133333 0 34.133334 34.133333 0 46.933333 0 46.933333-42.666667 46.933333h-145.066667c-17.066667 0-25.6-4.266667-21.333333-21.333333v-12.8c0-38.4 0-42.666667 38.4-42.666667 12.8 0 12.8-4.266667 12.8-12.8V401.066667c0-12.8-4.266667-17.066667-12.8-17.066667H345.6c-12.8-4.266667-17.066667 0-17.066667 8.533333v46.933334c0 12.8 0 17.066667-17.066666 17.066666-59.733333 0-59.733333 0-59.733334-59.733333V315.733333c0-12.8 4.266667-17.066667 17.066667-17.066666h494.933333c12.8 0 17.066667 4.266667 17.066667 17.066666v123.733334c0 12.8-4.266667 17.066667-17.066667 17.066666-21.333333 0-46.933333 8.533333-59.733333-4.266666-12.8-12.8-4.266667-38.4-4.266667-55.466667s-4.266667-21.333333-21.333333-21.333333h-98.133333c-12.8 0-17.066667 4.266667-17.066667 17.066666v132.266667z" p-id="2273"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/ruzhu.svg b/src/assets/icons/ruzhu.svg
new file mode 100644
index 0000000000..568aad90e6
--- /dev/null
+++ b/src/assets/icons/ruzhu.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1567410695912" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3901" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M506.88 465.92C491.52 460.8 476.16 460.8 460.8 450.56 373.76 404.48 286.72 358.4 199.68 317.44c-15.36-10.24-20.48-15.36-25.6-30.72 0-15.36 10.24-25.6 20.48-30.72 92.16-51.2 184.32-97.28 271.36-143.36 30.72-15.36 61.44-15.36 92.16 0 87.04 46.08 174.08 92.16 266.24 138.24 10.24 5.12 20.48 15.36 20.48 30.72s-5.12 25.6-20.48 30.72c-92.16 46.08-184.32 92.16-271.36 138.24-15.36 10.24-30.72 10.24-46.08 15.36zM271.36 286.72c76.8 40.96 148.48 76.8 225.28 112.64 10.24 5.12 25.6 5.12 35.84 0 51.2-25.6 102.4-51.2 153.6-81.92 20.48-10.24 40.96-20.48 61.44-35.84-71.68-35.84-143.36-76.8-215.04-112.64-15.36-5.12-25.6-5.12-40.96 0-25.6 15.36-51.2 25.6-76.8 35.84-46.08 30.72-92.16 56.32-143.36 81.92zM117.76 558.08V419.84c0-40.96 30.72-56.32 66.56-40.96 87.04 46.08 168.96 92.16 256 138.24 30.72 15.36 46.08 40.96 46.08 76.8v266.24c0 10.24 0 15.36-5.12 25.6-5.12 25.6-30.72 40.96-56.32 25.6-87.04-46.08-174.08-97.28-261.12-143.36-30.72-15.36-40.96-40.96-40.96-71.68-10.24-46.08-5.12-92.16-5.12-138.24z m61.44-107.52v245.76c0 10.24 5.12 20.48 15.36 25.6 71.68 35.84 138.24 76.8 209.92 112.64 15.36 10.24 15.36 5.12 15.36-10.24 0-56.32-5.12-112.64 0-174.08 5.12-51.2-10.24-76.8-56.32-102.4-61.44-25.6-122.88-61.44-184.32-97.28zM542.72 737.28v-138.24c0-35.84 15.36-61.44 46.08-76.8 87.04-46.08 174.08-92.16 256-143.36 30.72-15.36 61.44 0 61.44 35.84v281.6c0 30.72-15.36 51.2-40.96 66.56-87.04 46.08-174.08 97.28-266.24 143.36-30.72 15.36-61.44 0-61.44-35.84 5.12-40.96 5.12-87.04 5.12-133.12z m61.44 102.4h5.12c76.8-40.96 148.48-81.92 225.28-122.88 10.24-5.12 10.24-10.24 10.24-20.48V450.56h-5.12c-71.68 40.96-148.48 81.92-220.16 117.76-10.24 5.12-15.36 15.36-15.36 25.6v245.76z" p-id="3902"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/webconfig.svg b/src/assets/icons/webconfig.svg
new file mode 100644
index 0000000000..56354d06f2
--- /dev/null
+++ b/src/assets/icons/webconfig.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1574057245614" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3091" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M960.2 155.3H454.5C435 93.2 377.5 47.7 309.3 47.7c-68.5 0-125.9 45.4-145.2 107.5H71.5c-25.1 0-45.3 20.3-45.3 45.3 0 24.9 20.3 45.2 45.3 45.2H164c19.4 62.2 76.8 107.5 145.2 107.5 68.2 0 125.7-45.3 145.2-107.5h505.7c24.9 0 45.1-20.3 45.1-45.2 0.1-25-20.1-45.2-45-45.2zM309.3 262.8c-34.3 0-62.3-27.9-62.3-62.2 0-34.4 28-62.3 62.3-62.3s62.3 27.9 62.3 62.3c0 34.3-28.1 62.2-62.3 62.2z m650.9 226.4H836.9c-19.5-62.2-76.8-107.6-145.2-107.6S566 427 546.5 489.2h-475c-25.1 0-45.3 20.2-45.3 45.1 0 25.1 20.3 45.5 45.3 45.5h475c19.5 62 76.8 107.4 145.2 107.4s125.7-45.5 145.2-107.4h123.2c24.9 0 45.1-20.4 45.1-45.5 0.1-24.9-20.1-45.1-45-45.1zM691.7 596.6c-34.3 0-62.3-27.8-62.3-62.3 0-34.2 28-62.1 62.3-62.1s62.3 27.9 62.3 62.1c0 34.5-28 62.3-62.3 62.3z m268.5 218.9H459.5c-11.7-72.4-74.3-128.1-150.2-128.1s-138.5 55.7-150.4 128.1H71.5c-25.1 0-45.3 20.4-45.3 45.3 0 25.1 20.3 45.3 45.3 45.3H172c24.8 51 76.8 86.8 137.3 86.8 60.5 0 112.4-35.8 137.1-86.8h513.8c24.9 0 45.1-20.3 45.1-45.3 0-24.9-20.2-45.3-45.1-45.3z m-650.9 86.9c-34.3 0-62.3-28-62.3-62.3s28-62.3 62.3-62.3 62.3 28 62.3 62.3-28.1 62.3-62.3 62.3z" p-id="3092"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/wenjuan.svg b/src/assets/icons/wenjuan.svg
new file mode 100644
index 0000000000..e7a5301514
--- /dev/null
+++ b/src/assets/icons/wenjuan.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1567410683469" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3677" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.2 512v281.6c0 40.96 15.36 56.32 56.32 56.32h143.36c30.72 0 46.08 15.36 46.08 35.84 0 30.72-20.48 35.84-46.08 35.84H230.4c-61.44 0-107.52-40.96-117.76-102.4v-35.84V245.76v-35.84c5.12-61.44 51.2-102.4 112.64-102.4C394.24 102.4 563.2 102.4 737.28 102.4c71.68 0 117.76 46.08 117.76 117.76v143.36c0 25.6-5.12 40.96-35.84 40.96-25.6 0-35.84-20.48-35.84-40.96V235.52c0-40.96-15.36-56.32-56.32-56.32H235.52c-46.08 0-61.44 15.36-61.44 61.44 5.12 87.04 5.12 179.2 5.12 271.36z" p-id="3678"></path><path d="M517.12 906.24c-51.2 0-51.2 0-51.2-46.08 0-35.84 10.24-61.44 35.84-87.04 76.8-76.8 153.6-153.6 225.28-230.4 15.36-15.36 20.48-15.36 30.72 0 20.48 20.48 40.96 46.08 61.44 66.56 10.24 10.24 10.24 20.48 0 30.72-81.92 87.04-168.96 174.08-250.88 256-15.36 20.48-35.84 5.12-51.2 10.24zM476.16 343.04H302.08c-30.72 0-46.08-10.24-46.08-35.84 0-25.6 15.36-35.84 46.08-35.84h353.28c30.72 0 46.08 10.24 46.08 35.84 0 30.72-20.48 35.84-46.08 35.84H476.16zM424.96 491.52H302.08c-25.6 0-46.08-10.24-46.08-35.84 0-25.6 15.36-35.84 40.96-35.84h240.64c25.6 0 40.96 10.24 46.08 35.84 0 25.6-15.36 35.84-46.08 35.84H424.96zM363.52 645.12H296.96c-20.48 0-40.96-10.24-40.96-35.84 0-25.6 15.36-35.84 40.96-35.84h138.24c25.6 0 40.96 10.24 40.96 35.84 0 25.6-15.36 35.84-40.96 35.84-25.6 5.12-46.08 0-71.68 0zM870.4 593.92c-10.24 0-97.28-92.16-92.16-92.16 10.24-20.48 30.72-35.84 46.08-51.2 15.36-10.24 25.6 0 35.84 10.24l46.08 46.08c10.24 10.24 15.36 25.6 5.12 35.84-10.24 20.48-25.6 40.96-40.96 51.2z" p-id="3679"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/wx.svg b/src/assets/icons/wx.svg
new file mode 100644
index 0000000000..85b22b5b80
--- /dev/null
+++ b/src/assets/icons/wx.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="400px" height="400.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#ffffff" d="M664.250054 368.541681c10.015098 0 19.892049 0.732687 29.67281 1.795902-26.647917-122.810047-159.358451-214.077703-310.826188-214.077703-169.353083 0-308.085774 114.232694-308.085774 259.274068 0 83.708494 46.165436 152.460344 123.281791 205.78483l-30.80868 91.730191 107.688651-53.455469c38.558178 7.53665 69.459978 15.308661 107.924012 15.308661 9.66308 0 19.230993-0.470721 28.752858-1.225921-6.025227-20.36584-9.521864-41.723264-9.521864-63.862493C402.328693 476.632491 517.908058 368.541681 664.250054 368.541681zM498.62897 285.87389c23.200398 0 38.557154 15.120372 38.557154 38.061874 0 22.846334-15.356756 38.156018-38.557154 38.156018-23.107277 0-46.260603-15.309684-46.260603-38.156018C452.368366 300.994262 475.522716 285.87389 498.62897 285.87389zM283.016307 362.090758c-23.107277 0-46.402843-15.309684-46.402843-38.156018 0-22.941502 23.295566-38.061874 46.402843-38.061874 23.081695 0 38.46301 15.120372 38.46301 38.061874C321.479317 346.782098 306.098002 362.090758 283.016307 362.090758zM945.448458 606.151333c0-121.888048-123.258255-221.236753-261.683954-221.236753-146.57838 0-262.015505 99.348706-262.015505 221.236753 0 122.06508 115.437126 221.200938 262.015505 221.200938 30.66644 0 61.617359-7.609305 92.423993-15.262612l84.513836 45.786813-23.178909-76.17082C899.379213 735.776599 945.448458 674.90216 945.448458 606.151333zM598.803483 567.994292c-15.332197 0-30.807656-15.096836-30.807656-30.501688 0-15.190981 15.47546-30.477129 30.807656-30.477129 23.295566 0 38.558178 15.286148 38.558178 30.477129C637.361661 552.897456 622.099049 567.994292 598.803483 567.994292zM768.25071 567.994292c-15.213493 0-30.594809-15.096836-30.594809-30.501688 0-15.190981 15.381315-30.477129 30.594809-30.477129 23.107277 0 38.558178 15.286148 38.558178 30.477129C806.808888 552.897456 791.357987 567.994292 768.25071 567.994292z" /></svg>
\ No newline at end of file
diff --git a/src/assets/icons/wxyhbd.svg b/src/assets/icons/wxyhbd.svg
new file mode 100644
index 0000000000..bdc5013eae
--- /dev/null
+++ b/src/assets/icons/wxyhbd.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1572235362533" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2232" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M343.12192 490.72128C222.64832 385.50016 235.6224 227.2768 329.61536 139.27424c94.464-88.448 242.66752-85.02784 329.5488 5.90848 91.49952 95.76448 91.79136 250.14784-22.34368 345.56928 21.48864 9.98912 42.27584 20.3776 61.23008 33.9456 7.6288 5.45792 15.744 10.42432 22.56896 16.768 6.8864 6.4 33.90976 30.86848 39.05536 24.2944 21.83168-27.89376 47.42656-67.2256 69.76-94.72 17.72032-21.81632 12.53888-27.52 36.95616-13.2096 24.99072 14.63808 34.4064 19.42016 58.95168 34.79552 23.92576 14.98624 25.67168 28.03712 6.30272 48.03072a9445.6576 9445.6576 0 0 1-99.70176 101.34016c-5.57568 5.58592-7.36768 9.04192-2.45248 16.6656 46.6688 72.36096 68.86912 152.32 72.2176 237.9008 0.43008 11.05408 1.8432 22.08256 0.18944 33.2032-1.60256 10.76224-7.23968 17.01888-18.16576 18.06848-5.07904 0.4864-10.19392 0.86528-15.29344 0.8704-114.02752 0.04608-228.06528 0.94208-342.08256-0.19456-138.11712-1.37728-276.22912 0.15872-414.336-0.63488-27.51488-0.15872-33.32608-5.53472-32.87552-32.93184 2.06336-126.02368 40.77568-237.87008 130.3296-329.00608 37.21216-37.86752 78.85824-70.40512 127.9232-92.2368 1.92-0.85504 3.73248-1.94048 5.72416-2.97984z m163.8912 376.7552c-47.54944-40.68864-93.824-80.18432-139.93472-119.87456-5.77536-4.97152-11.3152-10.48064-15.8464-16.57344-6.0928-8.19712-4.75136-16.3072 4.01408-21.95456 5.30944-3.42016 11.18208-6.17472 17.11616-8.3712 21.91872-8.1152 29.27104-6.66624 51.19488-14.76608 19.31264-7.13216 27.20256-4.87424 39.808 11.02848 16.6912 21.05344 39.25504 39.89504 58.24 60.8 15.37536 16.93184 45.09184 30.81728 59.44832 13.3376 45.51168-42.7776 88.25344-90.2656 124.70272-135.39328 3.09248-3.82976-26.14272-26.9568-31.34464-30.61248-58.52672-41.13408-123.99104-66.25792-194.93376-62.0288-107.50976 6.41024-192.67072 57.75872-253.72672 147.26144-34.28352 50.25792-53.56544 106.08128-60.01152 166.43072-0.59392 5.57568-2.81088 11.42272 7.7312 11.37152 98.59584-0.51712 197.19168-0.38912 295.78752-0.67584 11.8784-0.03584 23.71072 2.95424 37.75488 0.02048zM342.64064 308.20864c-1.99168 97.74592 80.07168 155.68384 146.91328 155.16672 84.32128-0.65536 149.9392-69.4016 149.92896-158.22848-0.01024-83.56864-63.58528-147.16928-147.15392-147.22048-86.656-0.05632-149.70368 63.24736-149.68832 150.28224z m426.88512 404.4544l-159.04256 155.75552c66.048 0 132.10112-0.22528 198.14912 0.256 9.15456 0.06656 8.53504-4.34688 7.85408-10.09664-6.27712-52.93568-21.23776-103.01952-46.96064-145.91488z" p-id="2233"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/zhanghao.svg b/src/assets/icons/zhanghao.svg
new file mode 100644
index 0000000000..3761eb11fd
--- /dev/null
+++ b/src/assets/icons/zhanghao.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1567410701711" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4012" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M363.52 491.52C307.2 450.56 276.48 399.36 271.36 327.68 261.12 199.68 389.12 87.04 517.12 102.4c117.76 15.36 194.56 117.76 189.44 225.28-5.12 107.52-92.16 199.68-199.68 204.8-71.68 5.12-138.24 20.48-199.68 66.56-76.8 61.44-122.88 143.36-133.12 245.76 0 15.36 10.24 10.24 15.36 10.24h286.72c15.36 0 20.48 5.12 20.48 20.48 0 46.08 0 46.08-46.08 46.08H122.88c-15.36 0-20.48-5.12-20.48-20.48 0-138.24 51.2-261.12 158.72-348.16 30.72-25.6 61.44-46.08 102.4-61.44z m122.88-322.56c-81.92 0-153.6 66.56-153.6 153.6 0 76.8 71.68 148.48 148.48 148.48 87.04 0 153.6-66.56 153.6-148.48 5.12-87.04-61.44-153.6-148.48-153.6zM803.84 419.84h71.68c10.24 0 10.24 5.12 10.24 10.24 0 51.2 5.12 51.2-51.2 51.2h-46.08c-15.36 0-10.24 5.12-10.24 15.36 0 10.24-5.12 20.48 10.24 15.36H870.4c10.24 0 15.36 5.12 15.36 15.36 0 51.2 0 51.2-46.08 51.2h-35.84c-5.12 0-20.48-5.12-20.48 5.12-5.12 10.24 0 20.48 0 35.84 0 5.12 5.12 5.12 10.24 5.12 76.8 10.24 128 66.56 128 143.36 0 66.56-40.96 128-112.64 148.48-66.56 15.36-143.36-20.48-168.96-87.04-25.6-66.56 0-148.48 61.44-184.32 15.36-5.12 15.36-15.36 15.36-30.72V445.44c0-20.48 5.12-25.6 25.6-25.6 20.48 5.12 40.96 0 61.44 0z m51.2 353.28c0-46.08-35.84-81.92-81.92-81.92-46.08 0-81.92 35.84-81.92 81.92 0 46.08 40.96 87.04 87.04 87.04 40.96-5.12 76.8-40.96 76.8-87.04z" p-id="4013"></path></svg>
\ No newline at end of file
diff --git a/src/assets/loginBg.jpg b/src/assets/loginBg.jpg
new file mode 100644
index 0000000000..f73fcd95c3
Binary files /dev/null and b/src/assets/loginBg.jpg differ
diff --git a/src/assets/logo.png b/src/assets/logo.png
index e887375c35..9f6716811a 100644
Binary files a/src/assets/logo.png and b/src/assets/logo.png differ
diff --git a/src/assets/logo1.png b/src/assets/logo1.png
new file mode 100644
index 0000000000..1a29f96cc1
Binary files /dev/null and b/src/assets/logo1.png differ
diff --git a/src/assets/logowords.png b/src/assets/logowords.png
new file mode 100644
index 0000000000..3bcbc832cd
Binary files /dev/null and b/src/assets/logowords.png differ
diff --git a/src/assets/man.png b/src/assets/man.png
new file mode 100644
index 0000000000..f365ee63f9
Binary files /dev/null and b/src/assets/man.png differ
diff --git a/src/assets/murry.png b/src/assets/murry.png
new file mode 100644
index 0000000000..afdb3cc931
Binary files /dev/null and b/src/assets/murry.png differ
diff --git a/src/assets/noData.png b/src/assets/noData.png
new file mode 100644
index 0000000000..9b35598b75
Binary files /dev/null and b/src/assets/noData.png differ
diff --git a/src/assets/notice.png b/src/assets/notice.png
new file mode 100644
index 0000000000..9939a0197c
Binary files /dev/null and b/src/assets/notice.png differ
diff --git a/src/assets/p-a.png b/src/assets/p-a.png
new file mode 100644
index 0000000000..874f924715
Binary files /dev/null and b/src/assets/p-a.png differ
diff --git a/src/assets/pdf.png b/src/assets/pdf.png
new file mode 100644
index 0000000000..b636364fc0
Binary files /dev/null and b/src/assets/pdf.png differ
diff --git a/src/assets/proTitle.png b/src/assets/proTitle.png
new file mode 100644
index 0000000000..f2fc6b5d76
Binary files /dev/null and b/src/assets/proTitle.png differ
diff --git a/src/assets/question-icon.png b/src/assets/question-icon.png
new file mode 100644
index 0000000000..7847c777de
Binary files /dev/null and b/src/assets/question-icon.png differ
diff --git a/src/assets/tip-icon.png b/src/assets/tip-icon.png
new file mode 100644
index 0000000000..157ca8d613
Binary files /dev/null and b/src/assets/tip-icon.png differ
diff --git a/src/assets/treeCard.png b/src/assets/treeCard.png
new file mode 100644
index 0000000000..190577573f
Binary files /dev/null and b/src/assets/treeCard.png differ
diff --git a/src/assets/treeTop.png b/src/assets/treeTop.png
new file mode 100644
index 0000000000..0f0d70dc8b
Binary files /dev/null and b/src/assets/treeTop.png differ
diff --git a/src/assets/treeUser.png b/src/assets/treeUser.png
new file mode 100644
index 0000000000..b808e3d3ae
Binary files /dev/null and b/src/assets/treeUser.png differ
diff --git a/src/assets/userCenerHeader.png b/src/assets/userCenerHeader.png
new file mode 100644
index 0000000000..8bcc5e5a5b
Binary files /dev/null and b/src/assets/userCenerHeader.png differ
diff --git a/src/assets/userHeardImg.png b/src/assets/userHeardImg.png
new file mode 100644
index 0000000000..f73d81f726
Binary files /dev/null and b/src/assets/userHeardImg.png differ
diff --git a/src/assets/warn-1.png b/src/assets/warn-1.png
new file mode 100644
index 0000000000..6b88e244eb
Binary files /dev/null and b/src/assets/warn-1.png differ
diff --git a/src/assets/warn-2.png b/src/assets/warn-2.png
new file mode 100644
index 0000000000..9d582f8d4f
Binary files /dev/null and b/src/assets/warn-2.png differ
diff --git a/src/assets/warn-3.png b/src/assets/warn-3.png
new file mode 100644
index 0000000000..f6c2ca2306
Binary files /dev/null and b/src/assets/warn-3.png differ
diff --git a/src/assets/woman.png b/src/assets/woman.png
new file mode 100644
index 0000000000..334d6e736f
Binary files /dev/null and b/src/assets/woman.png differ
diff --git a/src/assets/zwhz.png b/src/assets/zwhz.png
new file mode 100644
index 0000000000..ca94bd69f5
Binary files /dev/null and b/src/assets/zwhz.png differ
diff --git a/src/components/Charts/Bar.vue b/src/components/Charts/Bar.vue
index 4482845330..98681300ea 100644
--- a/src/components/Charts/Bar.vue
+++ b/src/components/Charts/Bar.vue
@@ -2,7 +2,7 @@
   <div :style="{ padding: '0 0 32px 32px' }">
     <h4 :style="{ marginBottom: '20px' }">{{ title }}</h4>
     <v-chart
-      height="254"
+      height="224"
       :data="data"
       :forceFit="true"
       :padding="['auto', 'auto', '40', '50']">
diff --git a/src/components/Charts/MiniArea.vue b/src/components/Charts/MiniArea.vue
index 58fe92c7e7..1172ea6b10 100644
--- a/src/components/Charts/MiniArea.vue
+++ b/src/components/Charts/MiniArea.vue
@@ -2,8 +2,7 @@
   <div class="antv-chart-mini">
     <div class="chart-wrapper" :style="{ height: 46 }">
       <v-chart :force-fit="true" :height="height" :data="data" :padding="[36, 0, 18, 0]">
-        <v-tooltip />
-        <v-smooth-area position="x*y" />
+        <v-smooth-area position="x*本月访视" />
       </v-chart>
     </div>
   </div>
@@ -17,7 +16,7 @@ const beginDay = new Date().getTime()
 for (let i = 0; i < 10; i++) {
   data.push({
     x: moment(new Date(beginDay + 1000 * 60 * 60 * 24 * i)).format('YYYY-MM-DD'),
-    y: Math.round(Math.random() * 10)
+    '本月访视': Math.round(Math.random() * 10)
   })
 }
 
@@ -31,11 +30,6 @@ const tooltip = [
 const scale = [{
   dataKey: 'x',
   min: 2
-}, {
-  dataKey: 'y',
-  title: '时间',
-  min: 1,
-  max: 22
 }]
 
 export default {
diff --git a/src/components/Charts/MiniBar.vue b/src/components/Charts/MiniBar.vue
index beac404bfb..bb9d7ce694 100644
--- a/src/components/Charts/MiniBar.vue
+++ b/src/components/Charts/MiniBar.vue
@@ -2,8 +2,7 @@
   <div class="antv-chart-mini">
     <div class="chart-wrapper" :style="{ height: 46 }">
       <v-chart :force-fit="true" :height="height" :data="data" :padding="[36, 5, 18, 5]">
-        <v-tooltip />
-        <v-bar position="x*y" />
+        <v-bar position="x*本年患者" />
       </v-chart>
     </div>
   </div>
@@ -17,7 +16,7 @@ const beginDay = new Date().getTime()
 for (let i = 0; i < 10; i++) {
   data.push({
     x: moment(new Date(beginDay + 1000 * 60 * 60 * 24 * i)).format('YYYY-MM-DD'),
-    y: Math.round(Math.random() * 10)
+    本年患者: Math.round(Math.random() * 10)
   })
 }
 
@@ -33,7 +32,7 @@ const scale = [{
   dataKey: 'x',
   min: 2
 }, {
-  dataKey: 'y',
+  dataKey: '本年患者',
   title: '时间',
   min: 1,
   max: 30
diff --git a/src/components/Charts/MiniProgress.vue b/src/components/Charts/MiniProgress.vue
index e6913631c3..ae070cba76 100644
--- a/src/components/Charts/MiniProgress.vue
+++ b/src/components/Charts/MiniProgress.vue
@@ -15,8 +15,8 @@ export default {
   name: 'MiniProgress',
   props: {
     target: {
-      type: Number,
-      default: 0
+      type: String,
+      default: '0'
     },
     height: {
       type: String,
@@ -27,8 +27,8 @@ export default {
       default: '#13C2C2'
     },
     percentage: {
-      type: Number,
-      default: 0
+      type: String,
+      default: '0'
     }
   }
 }
diff --git a/src/components/Charts/Pie.vue b/src/components/Charts/Pie.vue
new file mode 100644
index 0000000000..65713c23ab
--- /dev/null
+++ b/src/components/Charts/Pie.vue
@@ -0,0 +1,171 @@
+<template>
+  <v-chart :forceFit="true" :height="175" :padding="padding" :data="pieData" :scale="scale">
+    <v-coord type="theta" :innerRadius="0.8" :radius="0.95"></v-coord>
+    <v-axis :show="true" />
+    <v-tooltip :showTitle="showTitle"></v-tooltip>
+    <v-legend :useHtml="true" position="right" :reactive="true" :width="250" :containerTpl="containerTplLegend" :itemTpl="itemTpl" :offset="offset"></v-legend>
+    <v-pie position="percent" color="item" :vStyle="pieStyle" />
+    <v-stack-interval position="percent" :color="color" ></v-stack-interval>
+  </v-chart>
+</template>
+
+<script>
+ import {getProvinceCompare}  from '@/api/home';
+const DataSet = require('@antv/data-set');
+
+const setStyle = () => {
+  const id = 'legend-html';
+  if (document.getElementById(id)) {
+    return;
+  }
+  const styleTxt = `
+        #canvas .g2-tooltip {
+        position:absolute;
+        visibility:hidden;
+        border-style:solid;
+        white-space:nowrap;
+        z-index:9;
+        transition:left 0.4s cubic-bezier(0.23, 1, 0.32, 1), top 0.4s cubic-bezier(0.23, 1, 0.32, 1);
+        background-color:rgb(255, 255, 255);
+        border-width:1px;
+        border-color: #999;
+        border-radius:4px;
+        color: #444;
+        font-style:normal;
+        font-variant:normal;
+        font-weight:normal;
+        font-stretch:normal;
+        font-size:14px;
+        font-family:sans-serif;
+        line-height:21px;
+        padding:5px;
+        }
+
+        #canvas .g2-tooltip-list {
+        margin: 5px ;
+        list-style-type:none;
+        padding:0;
+        }
+        #canvas .g2-legend {
+        top: 45%!important;
+        }
+        .g2-legend{
+            max-width: 220px!important;
+        }
+        .g2-legend-list{
+            list-style:none;
+            margin:0;
+            padding:0;
+        }
+        .g2-legend-list-item{
+            cursor:pointer;
+            font-size:14px;
+            margin-top:5px;
+        }
+    `;
+  const style = document.createElement('style');
+  style.setAttribute('id', id);
+  style.innerHTML = styleTxt;
+  document.getElementsByTagName('head')[0].appendChild(style);
+};
+setStyle();
+const data = [
+  {
+    country: 'Lithuania',
+    litres: 501.9
+  },
+  {
+    country: 'Czech',
+    litres: 301.9
+  },
+  {
+    country: 'Ireland',
+    litres: 201.1
+  },
+  {
+    country: 'Germany',
+    litres: 165.8
+  },
+  {
+    country: 'Australia',
+    litres: 139.9
+  },
+  {
+    country: 'Austria',
+    litres: 128.3
+  },
+  {
+    country: 'UK',
+    litres: 99
+  }
+];
+
+export default {
+  data() {
+    return {
+      pieData:{},
+      pieStyle: {
+        stroke: '#fff',
+        lineWidth: 1
+      },
+      padding: [0, 300, 0, 0],
+      offset: [15, 0],
+      showTitle: false,
+      scale: [
+        {
+          dataKey: 'percent',
+          min: 0,
+          formatter: '.0%'
+        }
+      ],
+      containerTplTooltip: `<div class="g2-tooltip"><ul class="g2-tooltip-list"></ul></div>`,
+      itemTplTooltip: '<li data-index={index}><span style="color:{color}">{name}:</span>{value}</li>',
+      containerTplLegend: `<div class="g2-legend"> <table class="g2-legend-list"></table> </div>`,
+      color: ['provinceName', ['#9760E3', '#3CA0FE', '#38CBCB', '#4FCB74', '#F9D339', '#F1647C']],
+    };
+  },
+  created(){
+    const that=this;
+     getProvinceCompare().then(res => {
+      const ds = new DataSet();
+      that.pieData  = ds
+        .createView()
+        .source(res.data.provinceCompare)
+        .transform({
+          type: 'percent',
+          field: 'numPatient',
+          dimension: 'provinceName',
+          as: 'percent'
+        });
+    });
+  },
+  methods:{
+    itemTpl(value, color, checked, index) {
+    const obj = this.pieData.rows[index];
+    const percent = (obj.percent * 100).toFixed(2) + '%';
+    checked = checked ? 'checked' : 'unChecked';
+    return (
+      '<tr class="g2-legend-list-item item-' +
+      index +
+      ' ' +
+      checked +
+      '" data-value="' +
+      value +
+      '" data-color=' +
+      color +
+      ' >' +
+      '<td style="width:180px;"><i class="g2-legend-marker" style="width:10px;height:10px;display:inline-block;margin-right:10px;background-color:' +
+      color +
+      ';"></i>' +
+      '<span class="g2-legend-text" style="color: #666">' +
+      value +
+      '</span></td>' +
+      '<td style="text-align: right">' +
+      percent +
+      '</td>' +
+      '</tr>'
+    );
+  }
+  }
+};
+</script>
diff --git a/src/components/Charts/RankList.vue b/src/components/Charts/RankList.vue
index afb56a1af1..4cd9626311 100644
--- a/src/components/Charts/RankList.vue
+++ b/src/components/Charts/RankList.vue
@@ -3,14 +3,13 @@
     <h4 class="title">{{ title }}</h4>
     <ul class="list">
       <li :key="index" v-for="(item, index) in list">
-        <span :class="index < 3 ? 'active' : null">{{ index + 1 }}</span>
-        <span>{{ item.name }}</span>
-        <span>{{ item.total }}</span>
+        <span>{{ index + 1 }}</span>
+        <span class="download" @click="download(item.id)">{{ item.name }}</span>
+        <span>{{ item.downloads }}</span>
       </li>
     </ul>
   </div>
 </template>
-
 <script>
 export default {
   name: 'RankList',
@@ -24,54 +23,68 @@ export default {
       type: Array,
       default: null
     }
+  },
+  data(){
+    return {
+      baseUrl: process.env.VUE_APP_API_BASE_URL
+    }
+  },
+  methods: {
+    download(id) {
+      window.open(this.baseUrl + '/index/downLoad?id=' + id)
+    }
   }
 }
 </script>
-
 <style lang="less" scoped>
+.rank {
+  padding: 0 32px 32px 72px;
 
-  .rank {
-    padding: 0 32px 32px 72px;
+  .list {
+    margin: 16px 0 0;
+    padding: 0;
+    list-style: none;
 
-    .list {
-      margin: 25px 0 0;
-      padding: 0;
-      list-style: none;
+    li {
+      margin-top: 16px;
 
-      li {
-        margin-top: 16px;
+      span {
+        color: rgba(0, 0, 0, .65);
+        font-size: 14px;
+        line-height: 22px;
 
-        span {
-          color: rgba(0, 0, 0, .65);
-          font-size: 14px;
-          line-height: 22px;
+        &.download {
+          cursor: pointer;
+          color: #39f;
+        }
+
+        &:first-child {
+          background-color: #f5f5f5;
+          border-radius: 20px;
+          display: inline-block;
+          font-size: 12px;
+          font-weight: 600;
+          margin-right: 24px;
+          height: 20px;
+          line-height: 20px;
+          width: 20px;
+          text-align: center;
+        }
 
-          &:first-child {
-            background-color: #f5f5f5;
-            border-radius: 20px;
-            display: inline-block;
-            font-size: 12px;
-            font-weight: 600;
-            margin-right: 24px;
-            height: 20px;
-            line-height: 20px;
-            width: 20px;
-            text-align: center;
-          }
-          &.active {
-            background-color: #314659;
-            color: #fff;
-          }
-          &:last-child {
-            float: right;
-          }
+        &.active {
+          background-color: #314659;
+          color: #fff;
+        }
+
+        &:last-child {
+          float: right;
         }
       }
     }
   }
+}
 
-  .mobile .rank {
-    padding: 0 32px 32px 32px;
-  }
-
-</style>
+.mobile .rank {
+  padding: 0 32px 32px 32px;
+}
+</style>
\ No newline at end of file
diff --git a/src/components/Editor/QuillEditor.vue b/src/components/Editor/QuillEditor.vue
index 731701c883..360a4f09b3 100644
--- a/src/components/Editor/QuillEditor.vue
+++ b/src/components/Editor/QuillEditor.vue
@@ -1,82 +1,57 @@
 <template>
-  <div :class="prefixCls">
-    <quill-editor
-      v-model="content"
-      ref="myQuillEditor"
-      :options="editorOption"
-      @blur="onEditorBlur($event)"
-      @focus="onEditorFocus($event)"
-      @ready="onEditorReady($event)"
-      @change="onEditorChange($event)">
-    </quill-editor>
-
-  </div>
+  <quill-editor ref="myQuillEditor" v-model="content" :options="editorOption"></quill-editor>
 </template>
 
 <script>
-import 'quill/dist/quill.core.css'
-import 'quill/dist/quill.snow.css'
-import 'quill/dist/quill.bubble.css'
-
-import { quillEditor } from 'vue-quill-editor'
-
-export default {
-  name: 'QuillEditor',
-  components: {
-    quillEditor
-  },
-  props: {
-    prefixCls: {
-      type: String,
-      default: 'ant-editor-quill'
+  import { quillEditor } from 'vue-quill-editor'
+  import 'quill/dist/quill.snow.css'
+  import quillConfig from '@/utils/quillConfig'
+  export default {
+    name: 'QuillEditor',
+    components: {
+      quillEditor
     },
-    // 表单校验用字段
-    // eslint-disable-next-line
-    value: {
-      type: String
-    }
-  },
-  data () {
-    return {
-      content: null,
-      editorOption: {
-        // some quill options
+    props: {
+      value: {
+        type: String
       }
-    }
-  },
-  methods: {
-    onEditorBlur (quill) {
-      console.log('editor blur!', quill)
     },
-    onEditorFocus (quill) {
-      console.log('editor focus!', quill)
+    data() {
+      return {
+        content: null,
+        editorOption: quillConfig
+      }
     },
-    onEditorReady (quill) {
-      console.log('editor ready!', quill)
+    watch: {
+      value(val) {
+        this.content = val
+      }
     },
-    onEditorChange ({ quill, html, text }) {
-      console.log('editor change!', quill, html, text)
-      this.$emit('change', html)
-    }
-  },
-  watch: {
-    value (val) {
-      this.content = val
+    computed: {
+      editor() {
+        return this.$refs.myQuillEditor.quill
+      }
+    },
+    methods: {
+      onEditorBlur(quill) {
+        console.log('editor blur!', quill)
+      },
+      onEditorFocus(quill) {
+        console.log('editor focus!', quill)
+      },
+      onEditorReady(quill) {
+        console.log('editor ready!', quill)
+      },
+      onEditorChange({ quill, html, text }) {
+        console.log('editor change!', quill, html, text)
+        this.$emit('change', html)
+      }
     }
   }
-}
 </script>
 
 <style lang="less" scoped>
-@import url('../index.less');
-
-/* 覆盖 quill 默认边框圆角为 ant 默认圆角,用于统一 ant 组件风格 */
-.ant-editor-quill {
-  /deep/ .ql-toolbar.ql-snow {
-    border-radius: @border-radius-base @border-radius-base 0 0;
-  }
-  /deep/ .ql-container.ql-snow {
-    border-radius: 0 0 @border-radius-base @border-radius-base;
+  .ql-editor {
+    height: 350px;
   }
-}
 </style>
diff --git a/src/components/GlobalHeader/GlobalHeader.vue b/src/components/GlobalHeader/GlobalHeader.vue
index f4490ec169..ecb238ec05 100644
--- a/src/components/GlobalHeader/GlobalHeader.vue
+++ b/src/components/GlobalHeader/GlobalHeader.vue
@@ -1,19 +1,19 @@
 <template>
   <transition name="showHeader">
     <div v-if="visible" class="header-animat">
-      <a-layout-header
-        v-if="visible"
-        :class="[fixedHeader && 'ant-header-fixedHeader', sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed', ]"
-        :style="{ padding: '0' }">
+      <a-layout-header v-if="visible" :class="[fixedHeader && 'ant-header-fixedHeader', sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed', ]" :style="{ padding: '0' }">
         <div v-if="mode === 'sidemenu'" class="header">
-          <a-icon v-if="device==='mobile'" class="trigger" :type="collapsed ? 'menu-fold' : 'menu-unfold'" @click="toggle"/>
-          <a-icon v-else class="trigger" :type="collapsed ? 'menu-unfold' : 'menu-fold'" @click="toggle"/>
-          <user-menu></user-menu>
+          <a-icon v-if="device==='mobile'" class="trigger" :type="collapsed ? 'menu-fold' : 'menu-unfold'" @click="toggle" />
+          <a-icon v-else class="trigger" :type="collapsed ? 'menu-unfold' : 'menu-fold'" @click="toggle" />
+          <span class="right">
+            <user-menu ></user-menu>
+            <header-notice ref="headerNotice" style="float: right; padding-top: 2px;margin-right: 16px;cursor: pointer;"></header-notice>
+          </span>
         </div>
         <div v-else :class="['top-nav-header-index', theme]">
           <div class="header-index-wide">
             <div class="header-index-left">
-              <logo class="top-nav-header" :show-title="device !== 'mobile'"/>
+              <logo class="top-nav-header" :show-title="device !== 'mobile'" />
               <s-menu v-if="device !== 'mobile'" mode="horizontal" :menu="menus" :theme="theme" />
               <a-icon v-else class="trigger" :type="collapsed ? 'menu-fold' : 'menu-unfold'" @click="toggle" />
             </div>
@@ -24,19 +24,21 @@
     </div>
   </transition>
 </template>
-
 <script>
 import UserMenu from '../tools/UserMenu'
+import HeaderNotice from '@/components/newsMessage/DropDownInfo.vue'
 import SMenu from '../Menu/'
 import Logo from '../tools/Logo'
 import { mixin } from '@/utils/mixin'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
 
 export default {
   name: 'GlobalHeader',
   components: {
     UserMenu,
     SMenu,
-    Logo
+    Logo,
+    HeaderNotice
   },
   mixins: [mixin],
   props: {
@@ -68,18 +70,19 @@ export default {
   data () {
     return {
       visible: true,
-      oldScrollTop: 0
+      oldScrollTop: 0,
+      displayAll: this.$ls.get(ACCESS_TOKEN).purviewType === 1 || false
     }
   },
   mounted () {
     document.addEventListener('scroll', this.handleScroll, { passive: true })
+    // this.$refs.HeaderNotice.fetchNotice()
   },
   methods: {
     handleScroll () {
       if (!this.autoHideHeader) {
         return
       }
-
       const scrollTop = document.body.scrollTop + document.documentElement.scrollTop
       if (!this.ticking) {
         this.ticking = true
@@ -98,6 +101,9 @@ export default {
     },
     toggle () {
       this.$emit('toggle')
+    },
+    jumpReport () {
+      this.$router.push('/report/index')
     }
   },
   beforeDestroy () {
@@ -105,21 +111,24 @@ export default {
   }
 }
 </script>
-
 <style lang="less">
 @import '../index.less';
 
-.header-animat{
+.header-animat {
   position: relative;
   z-index: @ant-global-header-zindex;
 }
+
 .showHeader-enter-active {
   transition: all 0.25s ease;
 }
+
 .showHeader-leave-active {
   transition: all 0.5s ease;
 }
-.showHeader-enter, .showHeader-leave-to {
+
+.showHeader-enter,
+.showHeader-leave-to {
   opacity: 0;
 }
 </style>
diff --git a/src/components/Menu/SideMenu.vue b/src/components/Menu/SideMenu.vue
index 62fb01d9e9..de34d30310 100644
--- a/src/components/Menu/SideMenu.vue
+++ b/src/components/Menu/SideMenu.vue
@@ -1,7 +1,7 @@
 <template>
   <a-layout-sider
     :class="['sider', isDesktop() ? null : 'shadow', theme, fixSiderbar ? 'ant-fixed-sidemenu' : null ]"
-    width="256px"
+    width="190px"
     :collapsible="collapsible"
     v-model="collapsed"
     :trigger="null">
@@ -59,3 +59,12 @@ export default {
   }
 }
 </script>
+<style leng="less">
+ /* .ant-layout-sider-children .ant-menu .ant-menu-item .anticon{
+	font-size: 14px;
+	} */
+  .ant-menu-root > .ant-menu-item .anticon,
+  .ant-menu-submenu-title .anticon {
+	  font-size: 20px!important;
+  }
+</style>
diff --git a/src/components/SettingDrawer/SettingDrawer.vue b/src/components/SettingDrawer/SettingDrawer.vue
index 52ed726a38..14c1efafe3 100644
--- a/src/components/SettingDrawer/SettingDrawer.vue
+++ b/src/components/SettingDrawer/SettingDrawer.vue
@@ -6,6 +6,7 @@
       @close="onClose"
       :closable="false"
       :visible="visible"
+      :handle="handle"
     >
       <div class="setting-drawer-index-content">
 
@@ -183,18 +184,15 @@ export default {
   mixins: [mixin, mixinDevice],
   data () {
     return {
-      visible: true,
-      colorList
+      visible: false,
+      colorList,
+      handle: <div/>
     }
   },
   watch: {
 
   },
   mounted () {
-    const vm = this
-    setTimeout(() => {
-      vm.visible = false
-    }, 16)
     updateTheme(this.primaryColor)
     if (this.colorWeak !== config.colorWeak) {
       updateColorWeak(this.colorWeak)
diff --git a/src/components/Table/index.js b/src/components/Table/index.js
index 591fe0898f..aad0aa5f44 100644
--- a/src/components/Table/index.js
+++ b/src/components/Table/index.js
@@ -2,7 +2,7 @@ import T from 'ant-design-vue/es/table/Table'
 import get from 'lodash.get'
 
 export default {
-  data () {
+  data() {
     return {
       needTotalList: [],
 
@@ -23,13 +23,21 @@ export default {
       type: Function,
       required: true
     },
+    pageSizeOptions: {
+        type: Array,
+        default: () => ['10', '15', '20', '30']
+    },
     pageNum: {
       type: Number,
       default: 1
     },
     pageSize: {
       type: Number,
-      default: 10
+      default: 20
+    },
+    showQuickJumper: {
+      type: Boolean,
+      default: true
     },
     showSizeChanger: {
       type: Boolean,
@@ -62,6 +70,15 @@ export default {
       type: String | Boolean,
       default: 'auto'
     },
+    scroll: {
+      type:Object,
+      default: function(){
+        return {
+          x: 'calc(1600px + 50%)',
+          y: window.screen.height - 368 + 'px'
+        }
+      }
+    },
     /**
      * enable page URI mode
      *
@@ -77,7 +94,7 @@ export default {
     }
   }),
   watch: {
-    'localPagination.current' (val) {
+    'localPagination.current'(val) {
       this.pageURI && this.$router.push({
         ...this.$route,
         name: this.$route.name,
@@ -86,28 +103,27 @@ export default {
         })
       })
     },
-    pageNum (val) {
+    pageNum(val) {
       Object.assign(this.localPagination, {
         current: val
       })
     },
-    pageSize (val) {
+    pageSize(val) {
       Object.assign(this.localPagination, {
         pageSize: val
       })
-    },
-    showSizeChanger (val) {
-      Object.assign(this.localPagination, {
-        showSizeChanger: val
-      })
     }
   },
-  created () {
-    const { pageNo } = this.$route.params
+  created() {
+    const {
+      pageNo
+    } = this.$route.params
     const localPageNum = this.pageURI && (pageNo && parseInt(pageNo)) || this.pageNum
     this.localPagination = ['auto', true].includes(this.showPagination) && Object.assign({}, this.localPagination, {
       current: localPageNum,
       pageSize: this.pageSize,
+      pageSizeOptions: this.pageSizeOptions,
+      showQuickJumper : this.showQuickJumper,
       showSizeChanger: this.showSizeChanger
     }) || false
     console.log('this.localPagination', this.localPagination)
@@ -120,34 +136,46 @@ export default {
      * 如果参数为 true, 则强制刷新到第一页
      * @param Boolean bool
      */
-    refresh (bool = false) {
+    refresh(bool = false, keyword) {
       bool && (this.localPagination = Object.assign({}, {
-        current: 1, pageSize: this.pageSize
+        current: 1,
+        pageSize: this.pageSize,
+        keyWord: keyword
       }))
       this.loadData()
     },
+    //添加搜索项
+    search(keyword) {
+      const pagination = Object.assign({
+        current: 1,
+        pageSize: this.pageSize
+      })
+      const filters = Object.assign({}, keyword)
+      this.loadData(pagination, filters)
+    },
     /**
      * 加载数据方法
      * @param {Object} pagination 分页选项器
      * @param {Object} filters 过滤条件
      * @param {Object} sorter 排序条件
      */
-    loadData (pagination, filters, sorter) {
+    loadData(pagination, filters, sorter) {
       this.localLoading = true
+      console.log("filters", filters)
       const parameter = Object.assign({
-        pageNo: (pagination && pagination.current) ||
-          this.showPagination && this.localPagination.current || this.pageNum,
-        pageSize: (pagination && pagination.pageSize) ||
-          this.showPagination && this.localPagination.pageSize || this.pageSize
-      },
-      (sorter && sorter.field && {
-        sortField: sorter.field
-      }) || {},
-      (sorter && sorter.order && {
-        sortOrder: sorter.order
-      }) || {}, {
-        ...filters
-      }
+          pageNumber: (pagination && pagination.current) ||
+            this.showPagination && this.localPagination.current || this.pageNum,
+          pageSize: (pagination && pagination.pageSize) ||
+            this.showPagination && this.localPagination.pageSize || this.pageSize
+        },
+        (sorter && sorter.field && {
+          sortField: sorter.field
+        }) || {},
+        (sorter && sorter.order && {
+          sortOrder: sorter.order
+        }) || {}, {
+          ...filters
+        }
       )
       console.log('parameter', parameter)
       const result = this.data(parameter)
@@ -156,9 +184,9 @@ export default {
       if ((typeof result === 'object' || typeof result === 'function') && typeof result.then === 'function') {
         result.then(r => {
           this.localPagination = this.showPagination && Object.assign({}, this.localPagination, {
-            current: r.pageNo, // 返回结果中的当前分页数
-            total: r.totalCount, // 返回结果中的总记录数
-            showSizeChanger: this.showSizeChanger,
+            current: r.current, // 返回结果中的当前分页数
+            total: r.total, // 返回结果中的总记录数
+            showTotal: total => `总计 ${total} 条`,
             pageSize: (pagination && pagination.pageSize) ||
               this.localPagination.pageSize
           }) || false
@@ -171,20 +199,20 @@ export default {
 
           // 这里用于判断接口是否有返回 r.totalCount 且 this.showPagination = true 且 pageNo 和 pageSize 存在 且 totalCount 小于等于 pageNo * pageSize 的大小
           // 当情况满足时,表示数据不满足分页大小,关闭 table 分页功能
-          try {
-            if ((['auto', true].includes(this.showPagination) && r.totalCount <= (r.pageNo * this.localPagination.pageSize))) {
-              this.localPagination.hideOnSinglePage = true
-            }
-          } catch (e) {
-            this.localPagination = false
-          }
+          // try {
+          //   if ((['auto', true].includes(this.showPagination) && r.total <= (r.current * this.localPagination.pageSize))) {
+          //     this.localPagination.hideOnSinglePage = true
+          //   }
+          // } catch (e) {
+          //   this.localPagination = false
+          // }
           console.log('loadData -> this.localPagination', this.localPagination)
           this.localDataSource = r.data // 返回结果中的数组数据
           this.localLoading = false
         })
       }
     },
-    initTotalList (columns) {
+    initTotalList(columns) {
       const totalList = []
       columns && columns instanceof Array && columns.forEach(column => {
         if (column.needTotal) {
@@ -196,12 +224,30 @@ export default {
       })
       return totalList
     },
+    selectAll() {
+      const data = this.localDataSource;
+      const selectedRows = this.selectedRows;
+      if(data.length === selectedRows.length){
+         return 
+      }else{
+              const index = [];
+        data.forEach(item => {
+          index.push(Number(item.patientId))
+        });
+        console.log('index', index);
+        console.log('data', data);
+        this.rowSelection.onChange(index, data)
+        // //    
+        this.updateSelect(index, data)
+      }
+    },
     /**
      * 用于更新已选中的列表数据 total 统计
      * @param selectedRowKeys
      * @param selectedRows
      */
-    updateSelect (selectedRowKeys, selectedRows) {
+
+    updateSelect(selectedRowKeys, selectedRows) {
       this.selectedRows = selectedRows
       this.selectedRowKeys = selectedRowKeys
       const list = this.needTotalList
@@ -218,7 +264,7 @@ export default {
     /**
      * 清空 table 已选中项
      */
-    clearSelected () {
+    clearSelected() {
       if (this.rowSelection) {
         this.rowSelection.onChange([], [])
         this.updateSelect([], [])
@@ -229,88 +275,109 @@ export default {
      * @param callback
      * @returns {*}
      */
-    renderClear (callback) {
+    renderClear(callback) {
       if (this.selectedRowKeys.length <= 0) return null
-      return (
-        <a style="margin-left: 24px" onClick={() => {
-          callback()
-          this.clearSelected()
-        }}>清空</a>
+      return ( <
+        a style = "margin-left: 24px"
+        onClick = {
+          () => {
+            callback()
+            this.clearSelected()
+          }
+        } > 清空 < /a>
       )
     },
-    renderAlert () {
+    renderAlert() {
       // 绘制统计列数据
       const needTotalItems = this.needTotalList.map((item) => {
-        return (<span style="margin-right: 12px">
-          {item.title}总计 <a style="font-weight: 600">{!item.customRender ? item.total : item.customRender(item.total)}</a>
-        </span>)
-      })
+          return ( < span style = "margin-right: 12px" > {
+              item.title
+            }
+            总计 < a style = "font-weight: 600" > {!item.customRender ? item.total : item.customRender(item.total)
+            } < /a> <
+            /span>)
+          })
 
-      // 绘制 清空 按钮
-      const clearItem = (typeof this.alert.clear === 'boolean' && this.alert.clear) ? (
-        this.renderClear(this.clearSelected)
-      ) : (this.alert !== null && typeof this.alert.clear === 'function') ? (
-        this.renderClear(this.alert.clear)
-      ) : null
+        // 绘制 清空 按钮
+        const clearItem = (typeof this.alert.clear === 'boolean' && this.alert.clear) ? (
+          this.renderClear(this.clearSelected)
+        ) : (this.alert !== null && typeof this.alert.clear === 'function') ? (
+          this.renderClear(this.alert.clear)
+        ) : null
 
-      // 绘制 alert 组件
-      return (
-        <a-alert showIcon={true} style="margin-bottom: 16px">
-          <template slot="message">
-            <span style="margin-right: 12px">已选择: <a style="font-weight: 600">{this.selectedRows.length}</a></span>
-            {needTotalItems}
-            {clearItem}
-          </template>
-        </a-alert>
-      )
-    }
-  },
+        // 绘制 alert 组件
+        if (this.alert.show) {
+          return ( <
+            a-alert showIcon = {
+              true
+            }
+            style = "margin-bottom: 16px" >
+            <
+            template slot = "message" >
+            <
+            span style = "margin-right: 12px" > 已选择: < a style = "font-weight: 600" > {
+              this.selectedRows.length
+            } < /a></span > {
+              needTotalItems
+            } {
+              clearItem
+            } <
+            /template> <
+            /a-alert>
+          )
+        }
+      }
+    },
 
-  render () {
-    const props = {}
-    const localKeys = Object.keys(this.$data)
-    const showAlert = (typeof this.alert === 'object' && this.alert !== null && this.alert.show) && typeof this.rowSelection.selectedRowKeys !== 'undefined' || this.alert
+    render() {
+      const props = {}
+      const localKeys = Object.keys(this.$data)
+      const showAlert = (typeof this.alert === 'object' && this.alert !== null && this.alert.show) && typeof this.rowSelection
+        .selectedRowKeys !== 'undefined' || this.alert
 
-    Object.keys(T.props).forEach(k => {
-      const localKey = `local${k.substring(0, 1).toUpperCase()}${k.substring(1)}`
-      if (localKeys.includes(localKey)) {
-        props[k] = this[localKey]
-        return props[k]
-      }
-      if (k === 'rowSelection') {
-        if (showAlert && this.rowSelection) {
-          // 如果需要使用alert,则重新绑定 rowSelection 事件
-          console.log('this.rowSelection', this.rowSelection)
-          props[k] = {
-            ...this.rowSelection,
-            selectedRows: this.selectedRows,
-            selectedRowKeys: this.selectedRowKeys,
-            onChange: (selectedRowKeys, selectedRows) => {
-              this.updateSelect(selectedRowKeys, selectedRows)
-              typeof this[k].onChange !== 'undefined' && this[k].onChange(selectedRowKeys, selectedRows)
+      Object.keys(T.props).forEach(k => {
+        const localKey = `local${k.substring(0, 1).toUpperCase()}${k.substring(1)}`
+        if (localKeys.includes(localKey)) {
+          props[k] = this[localKey]
+          return props[k]
+        }
+        if (k === 'rowSelection') {
+          if (showAlert && this.rowSelection) {
+            // 如果需要使用alert,则重新绑定 rowSelection 事件
+            console.log('this.rowSelection', this.rowSelection)
+            props[k] = {
+              ...this.rowSelection,
+              selectedRows: this.selectedRows,
+              selectedRowKeys: this.selectedRowKeys,
+              onChange: (selectedRowKeys, selectedRows) => {
+                this.updateSelect(selectedRowKeys, selectedRows)
+                typeof this[k].onChange !== 'undefined' && this[k].onChange(selectedRowKeys, selectedRows)
+              }
             }
+            return props[k]
+          } else if (!this.rowSelection) {
+            // 如果没打算开启 rowSelection 则清空默认的选择项
+            props[k] = null
+            return props[k]
           }
-          return props[k]
-        } else if (!this.rowSelection) {
-          // 如果没打算开启 rowSelection 则清空默认的选择项
-          props[k] = null
-          return props[k]
         }
-      }
-      this[k] && (props[k] = this[k])
-      return props[k]
-    })
-    const table = (
-      <a-table {...{ props, scopedSlots: { ...this.$scopedSlots } }} onChange={this.loadData}>
-        { Object.keys(this.$slots).map(name => (<template slot={name}>{this.$slots[name]}</template>)) }
-      </a-table>
-    )
+        this[k] && (props[k] = this[k])
+        return props[k]
+      })
+      console.log("props",props)
+      const table = ( <a-table { ...{ props,scopedSlots: { ...this.$scopedSlots} } }  onChange = { this.loadData } > {
+            Object.keys(this.$slots).map(name => ( < template slot = {name } > {this.$slots[name]
+                } < /template>)) } <
+                /a-table>
+              )
 
-    return (
-      <div class="table-wrapper">
-        { showAlert ? this.renderAlert() : null }
-        { table }
-      </div>
-    )
-  }
-}
+              return ( <
+                div class = "table-wrapper" > {
+                  showAlert ? this.renderAlert() : null
+                } {
+                  table
+                } <
+                /div>
+              )
+            }
+          }
diff --git a/src/components/Tree/Tree.jsx b/src/components/Tree/Tree.jsx
index e5a2a11391..67c725c1d7 100644
--- a/src/components/Tree/Tree.jsx
+++ b/src/components/Tree/Tree.jsx
@@ -1,8 +1,7 @@
 import { Menu, Icon, Input } from 'ant-design-vue'
-
+import _ from 'lodash'
 const { Item, ItemGroup, SubMenu } = Menu
 const { Search } = Input
-
 export default {
   name: 'Tree',
   props: {
@@ -17,24 +16,53 @@ export default {
     search: {
       type: Boolean,
       default: false
-    }
+    },
+    treeTitle: {
+      type: String,
+      default: ''
+    },
+    defaultSelectedKeys:{
+      type: Array,
+      default: () => []
+    },
   },
   created () {
-    this.localOpenKeys = this.openKeys.slice(0)
+    
+  },
+  activated() {
+    this.selectedKeys = this.defaultSelectedKeys
   },
   data () {
     return {
-      localOpenKeys: []
+      localOpenKeys: [],
+      selectedKeys:[]
     }
   },
   methods: {
     handlePlus (item) {
       this.$emit('add', item)
     },
+    clickItem(item){
+      this.selectedKeys=[item.key]
+      this.$emit('click', item)
+    },
     handleTitleClick (...args) {
       this.$emit('titleClick', { args })
     },
-
+    onOpenChange (openKeys) {
+      const latestOpenKey = openKeys.find(key => this.localOpenKeys.indexOf(key) === -1)
+      const dataSource=[];
+        _.each(this.dataSource,function(item) {
+          if(item.childList){
+            dataSource.push(item.basisMarkId)
+          }
+       }) 
+      if (dataSource.indexOf(latestOpenKey) === -1) {
+        this.localOpenKeys = openKeys
+      } else {
+        this.localOpenKeys = latestOpenKey ? [latestOpenKey] :[]
+      }
+    },
     renderSearch () {
       return (
         <Search
@@ -46,27 +74,34 @@ export default {
     renderIcon (icon) {
       return icon && (<Icon type={icon} />) || null
     },
+    renderTreeIcon(executeStatus){
+      if(!executeStatus) return (<i class="placeholderI"></i>)
+      if(executeStatus === 1) return (<Icon type="clock-circle" theme="filled" />)
+      if(executeStatus === 2) return (<Icon type="check-circle" theme="filled" />)
+    },
     renderMenuItem (item) {
       return (
-        <Item key={item.key}>
+        <Item key={item.basisMarkId}>
+          <div style="padding-left:20px;">
+          {this.renderTreeIcon(item.executeStatus)}
           { this.renderIcon(item.icon) }
-          { item.title }
-          <a class="btn" style="width: 20px;z-index:1300" {...{ on: { click: () => this.handlePlus(item) } }}><a-icon type="plus"/></a>
+          <span class="treeSubTitle">{ item.basisMarkName }</span>
+          </div>
         </Item>
       )
     },
     renderItem (item) {
-      return item.children ? this.renderSubItem(item, item.key) : this.renderMenuItem(item, item.key)
+      return item.childList ? this.renderSubItem(item, item.basisMarkId) : this.renderMenuItem(item, item.basisMarkId)
     },
     renderItemGroup (item) {
-      const childrenItems = item.children.map(o => {
-        return this.renderItem(o, o.key)
+      const childrenItems = item.childList.map(o => {
+        return this.renderItem(o, o.basisMarkId)
       })
 
       return (
-        <ItemGroup key={item.key}>
+        <ItemGroup key={item.basisMarkId}>
           <template slot="title">
-            <span>{ item.title }</span>
+            <span>{ item.basisMarkName }</span>
             <a-dropdown>
               <a class="btn"><a-icon type="ellipsis" /></a>
               <a-menu slot="overlay">
@@ -81,14 +116,16 @@ export default {
       )
     },
     renderSubItem (item, key) {
-      const childrenItems = item.children && item.children.map(o => {
-        return this.renderItem(o, o.key)
+      const childrenItems = item.childList && item.childList.map(o => {
+        return this.renderItem(o, o.basisMarkId)
       })
 
       const title = (
-        <span slot="title">
+        <span slot="title" style="padding-left:20px;">
+          {/*<Icon type="clock-circle" theme="filled" />*/}
+          {this.renderTreeIcon(item.executeStatus)}
           { this.renderIcon(item.icon) }
-          <span>{ item.title }</span>
+          <span class="treeSubTitle">{ item.basisMarkName }</span>
         </span>
       )
 
@@ -104,10 +141,41 @@ export default {
       )
     }
   },
+  watch:{
+    dataSource(newValue,old){
+       const  newData=[];
+       const that=this;
+       if(this.defaultSelectedKeys.length==0){
+         this.selectedKeys=[newValue[0].basisMarkId]
+         return  false
+       }
+       _.each(newValue,function(item){
+          newData.push(item.basisMarkId)
+       })
+      if(newData.indexOf(this.defaultSelectedKeys[0])>-1){
+          this.selectedKeys=this.defaultSelectedKeys;
+      }else{
+         _.each(newValue,function(item){
+           if(item.childList){
+             const childList=[]
+             _.each(item.childList,function(v){
+               childList.push(v.basisMarkId)
+             })
+             if(childList.indexOf(that.defaultSelectedKeys[0])>-1){
+                that.selectedKeys=that.defaultSelectedKeys;
+                that.localOpenKeys=[item.basisMarkId];
+                return false
+             }
+           }
+        })
+      }
+    }
+  },
   render () {
-    const { dataSource, search } = this.$props
+    const { dataSource, search, treeTitle } = this.$props
 
-    // this.localOpenKeys = openKeys.slice(0)
+   //  // this.localOpenKeys =this.openKeys.slice(0)
+   console.log("确定",this.localOpenKeys)
     const list = dataSource.map(item => {
       return this.renderItem(item)
     })
@@ -115,7 +183,8 @@ export default {
     return (
       <div class="tree-wrapper">
         { search ? this.renderSearch() : null }
-        <Menu mode="inline" class="custom-tree" {...{ on: { click: item => this.$emit('click', item), 'update:openKeys': val => { this.localOpenKeys = val } } }} openKeys={this.localOpenKeys}>
+        <div class="tree-title">{ treeTitle }</div>
+        <Menu mode="inline" inlineIndent={0} class="custom-tree"  {...{ on: { click: this.clickItem,openChange:this.onOpenChange } }} selectedKeys={this.selectedKeys} openKeys={this.localOpenKeys}>
           { list }
         </Menu>
       </div>
diff --git a/src/components/Tree/Tree2.jsx b/src/components/Tree/Tree2.jsx
new file mode 100644
index 0000000000..674b7b4299
--- /dev/null
+++ b/src/components/Tree/Tree2.jsx
@@ -0,0 +1,193 @@
+import { Menu, Icon, Input } from 'ant-design-vue'
+import _ from 'lodash'
+const { Item, ItemGroup, SubMenu } = Menu
+const { Search } = Input
+export default {
+  name: 'Tree2',
+  props: {
+    dataSource: {
+      type: Array,
+      required: true
+    },
+    openKeys: {
+      type: Array,
+      default: () => []
+    },
+    search: {
+      type: Boolean,
+      default: false
+    },
+    treeTitle: {
+      type: String,
+      default: ''
+    },
+    defaultSelectedKeys:{
+      type: Array,
+      default: () => []
+    },
+  },
+  created () {
+    
+  },
+  activated() {
+    this.selectedKeys = this.defaultSelectedKeys
+  },
+  data () {
+    return {
+      localOpenKeys: [],
+      selectedKeys:[]
+    }
+  },
+  methods: {
+    handlePlus (item) {
+      this.$emit('add', item)
+    },
+    clickItem(item){
+      this.selectedKeys=[item.key]
+      this.$emit('click', item)
+    },
+    handleTitleClick (...args) {
+      this.$emit('titleClick', { args })
+    },
+    onOpenChange (openKeys) {
+      const latestOpenKey = openKeys.find(key => this.localOpenKeys.indexOf(key) === -1)
+      const dataSource=[];
+        _.each(this.dataSource,function(item) {
+          if(item.childList){
+            dataSource.push(item.reportTypeId)
+          }
+       }) 
+      if (dataSource.indexOf(latestOpenKey) === -1) {
+        this.localOpenKeys = openKeys
+      } else {
+        this.localOpenKeys = latestOpenKey ? [latestOpenKey] :[]
+      }
+    },
+    renderSearch () {
+      return (
+        <Search
+          placeholder="input search text"
+          style="width: 100%; margin-bottom: 1rem"
+        />
+      )
+    },
+    renderIcon (icon) {
+      return icon && (<Icon type={icon} />) || null
+    },
+    renderTreeIcon(executeStatus){
+      if(!executeStatus) return (<i class="placeholderI"></i>)
+      if(executeStatus === 1) return (<Icon type="clock-circle" theme="filled" />)
+      if(executeStatus === 2) return (<Icon type="check-circle" theme="filled" />)
+    },
+    renderMenuItem (item) {
+      return (
+        <Item key={item.reportTypeId}>
+          <div style="padding-left:40px;">
+          {this.renderTreeIcon(item.executeStatus)}
+          { this.renderIcon(item.icon) }
+          <span class="treeSubTitle">{ item.reportTypeName }</span>
+          </div>
+        </Item>
+      )
+    },
+    renderItem (item) {
+      return item.childList ? this.renderSubItem(item, item.reportTypeId) : this.renderMenuItem(item, item.reportTypeId)
+    },
+    renderItemGroup (item) {
+      const childrenItems = item.childList.map(o => {
+        return this.renderItem(o, o.reportTypeId)
+      })
+
+      return (
+        <ItemGroup key={item.reportTypeId}>
+          <template slot="title">
+            <span>{ item.reportTypeName }</span>
+            <a-dropdown>
+              <a class="btn"><a-icon type="ellipsis" /></a>
+              <a-menu slot="overlay">
+                <a-menu-item key="1">新增</a-menu-item>
+                <a-menu-item key="2">合并</a-menu-item>
+                <a-menu-item key="3">移除</a-menu-item>
+              </a-menu>
+            </a-dropdown>
+          </template>
+          { childrenItems }
+        </ItemGroup>
+      )
+    },
+    renderSubItem (item, key) {
+      const childrenItems = item.childList && item.childList.map(o => {
+        return this.renderItem(o, o.reportTypeId)
+      })
+
+      const title = (
+        <span slot="title" style="padding-left:40px;">
+          {/*<Icon type="clock-circle" theme="filled" />*/}
+          {this.renderTreeIcon(item.executeStatus)}
+          { this.renderIcon(item.icon) }
+          <span class="treeSubTitle">{ item.reportTypeName }</span>
+        </span>
+      )
+
+      if (item.group) {
+        return this.renderItemGroup(item)
+      }
+      // titleClick={this.handleTitleClick(item)}
+      return (
+        <SubMenu key={key}>
+          { title }
+          { childrenItems }
+        </SubMenu>
+      )
+    }
+  },
+  watch:{
+    dataSource(newValue,old){
+       const  newData=[];
+       const that=this;
+       if(this.defaultSelectedKeys.length==0){
+         this.selectedKeys=[newValue[0].reportTypeId]
+         return  false
+       }
+       _.each(newValue,function(item){
+          newData.push(item.reportTypeId)
+       })
+      if(newData.indexOf(this.defaultSelectedKeys[0])>-1){
+          this.selectedKeys=this.defaultSelectedKeys;
+      }else{
+         _.each(newValue,function(item){
+           if(item.childList){
+             const childList=[]
+             _.each(item.childList,function(v){
+               childList.push(v.reportTypeId)
+             })
+             if(childList.indexOf(that.defaultSelectedKeys[0])>-1){
+                that.selectedKeys=that.defaultSelectedKeys;
+                that.localOpenKeys=[item.reportTypeId];
+                return false
+             }
+           }
+        })
+      }
+    }
+  },
+  render () {
+    const { dataSource, search, treeTitle } = this.$props
+
+   //  // this.localOpenKeys =this.openKeys.slice(0)
+   console.log("确定",this.localOpenKeys)
+    const list = dataSource.map(item => {
+      return this.renderItem(item)
+    })
+
+    return (
+      <div class="tree-wrapper">
+        { search ? this.renderSearch() : null }
+        <div class="tree-title">{ treeTitle }</div>
+        <Menu mode="inline" inlineIndent={0} class="custom-tree"  {...{ on: { click: this.clickItem,openChange:this.onOpenChange } }} selectedKeys={this.selectedKeys} openKeys={this.localOpenKeys}>
+          { list }
+        </Menu>
+      </div>
+    )
+  }
+}
diff --git a/src/components/_util/util.js b/src/components/_util/util.js
index dd33231f64..07af5c1681 100644
--- a/src/components/_util/util.js
+++ b/src/components/_util/util.js
@@ -2,6 +2,13 @@
  * components util
  */
 
+import { Icon } from 'ant-design-vue';
+
+export const MyIcon = Icon.createFromIconfontCN({
+  scriptUrl: '//at.alicdn.com/t/font_1349368_jc6uwyeext.js',
+})
+
+
 /**
  * 清理空值,对象
  * @param children
diff --git a/src/components/global.less b/src/components/global.less
index fb1124d02d..164561c60d 100644
--- a/src/components/global.less
+++ b/src/components/global.less
@@ -17,6 +17,7 @@ body {
   &.mobile,
   &.tablet {
     .ant-layout-content {
+      margin: 10px;
       .content {
         margin: 24px 0 0;
       }
@@ -289,6 +290,11 @@ body {
           float: right;
         }
       }
+      // .header-notice .headerNotice .ant-dropdown-trigger{
+      //   position: absolute;
+      //   right: 165px;
+      //   top: 3px;
+      // }
     }
 
     &.light {
@@ -355,7 +361,8 @@ body {
   box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
   position: relative;
   z-index: 10;
-  min-height: 100vh;
+  // min-height: 100vh;
+  height: 625px;
 
   .ant-layout-sider-children {
     overflow-y: hidden;
@@ -376,7 +383,8 @@ body {
     padding-left: 24px;
     overflow: hidden;
     line-height: 64px;
-    background: #002140;
+    // background: #818486;
+    background: #00284d;
     transition: all .3s;
 
     img,
@@ -388,17 +396,17 @@ body {
 
     img,
     svg {
-      height: 32px;
-      width: 32px;
+      height: 40px;
+      width: 46px;
     }
 
     h1 {
       color: #fff;
       font-size: 20px;
-      margin: 0 0 0 12px;
+      margin: 0;
+      margin-left: 10px;
       font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
       font-weight: 600;
-      vertical-align: middle;
     }
   }
 
@@ -488,3 +496,53 @@ body {
     }
   }
 }
+/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/  
+::-webkit-scrollbar  
+{  
+    width: 6px;  
+    height: 6px;  
+    background-color: #F5F5F5;  
+}  
+  
+/*定义滚动条轨道 内阴影+圆角*/  
+::-webkit-scrollbar-track  
+{  
+    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);  
+    border-radius: 10px;  
+    background-color: #FFF;  
+}  
+  
+/*定义滑块 内阴影+圆角*/  
+::-webkit-scrollbar-thumb  
+{  
+    border-radius: 10px;  
+    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);  
+    background-color: #AAA;  
+}
+
+/* 定义全局模态框样式 */
+.ant-modal-header {
+    background-color: #1890ff!important;
+}
+
+.ant-modal-title {
+    font-size: 20px!important;
+    color: #fff!important;
+}
+
+.ant-modal-close {
+    color: #fff!important;
+}
+
+.ant-modal-close-x {
+    font-size: 20px!important;
+}
+
+.ant-table-pagination.ant-pagination {
+    float: left!important;
+}
+.card-box .tip{
+  color: red;
+  font-weight: bold;
+  margin: 10px;
+}
\ No newline at end of file
diff --git a/src/components/index.js b/src/components/index.js
index 6004742a5e..7da0f74fd7 100644
--- a/src/components/index.js
+++ b/src/components/index.js
@@ -1,5 +1,6 @@
 // chart
 import Bar from '@/components/Charts/Bar'
+import Pie from '@/components/Charts/Pie'
 import ChartCard from '@/components/Charts/ChartCard'
 import Liquid from '@/components/Charts/Liquid'
 import MiniArea from '@/components/Charts/MiniArea'
@@ -28,10 +29,10 @@ import TagSelect from '@/components/TagSelect'
 import ExceptionPage from '@/components/Exception'
 import StandardFormRow from '@/components/StandardFormRow'
 import ArticleListContent from '@/components/ArticleListContent'
-
 export {
   AvatarList,
   Bar,
+  Pie,
   ChartCard,
   Liquid,
   MiniArea,
diff --git a/src/components/newsMessage/DropDownInfo.vue b/src/components/newsMessage/DropDownInfo.vue
new file mode 100644
index 0000000000..725f2bdbe9
--- /dev/null
+++ b/src/components/newsMessage/DropDownInfo.vue
@@ -0,0 +1,190 @@
+<template>
+  <a-dropdown :trigger="['click']" v-model="show">
+    <div slot="overlay">
+      <a-spin :spinning="loading">
+        <a-tabs class="dropdown-tabs" :style="{width: '350px'}">
+          <a-tab-pane tab="消息中心">
+            <a-list class="tab-pane" v-for="(item, index) in (showDisplay? unReadMessage : textList)" :key="index">
+              <div class="titleTime">
+                <img src="../../assets/notice.png" />
+                <span>{{ item.updatedDate | formDate }}</span>
+                <p>{{ item.content }}</p>
+              </div>
+            </a-list>
+            <div v-if="unReadMessage.length == 0? true : false" class="info">暂无新的消息</div>
+            <!-- <div @click="showDisplay = !showDisplay" class="show" v-if="unReadMessage.length > 3">
+              <span>
+                {{ !showDisplay? '展开' : '收起' }}
+              </span>
+            </div> -->
+            <button type="button" @click="homeToInfo()" class="btn" v-if="unReadMessage.length > 0">查看所有消息 >>></button>
+          </a-tab-pane>
+        </a-tabs>
+      </a-spin>
+    </div>
+    <span @click="fetchNotice" class="header-notice">
+      <a-badge class="notice-badge" :count="messageNum">
+        <a-icon :class="['header-notice-icon']" type="bell" />
+      </a-badge>
+    </span>
+  </a-dropdown>
+</template>
+
+<script>
+import { getUnReadAnnouncement } from '@/api/basis'
+import moment from 'moment'
+import { mapGetters } from 'vuex'
+export default {
+  name: 'HeaderNotice',
+  data () {
+    return {
+      loading: false,
+      show: false,
+      unReadMessage: [],
+      showDisplay: false
+    }
+  },
+  created () {
+    this.fetchNotice()
+  },
+  computed: {
+    ...mapGetters({
+      messageNum: 'messageNum'
+    }),
+    textList () {
+      if (this.showDisplay == false) {
+        let textList = []
+        if (this.unReadMessage.length > 3) {
+          for (var i = 0; i < 3; i++) {
+            textList.push(this.unReadMessage[i])
+          }
+        } else {
+          textList = this.unReadMessage
+        }
+        return textList
+      } else {
+        return this.unReadMessage
+      }
+    }
+  },
+  filters: {
+    formDate (date) {
+      return moment(date).format('YYYY-MM-DD HH:mm:ss')
+    }
+  },
+  methods: {
+    async fetchNotice () {
+      if (this.loading) {
+        this.loading = false
+        return
+      }
+      if (this.show) return
+      this.loading = true
+      const res = await getUnReadAnnouncement()
+      this.unReadMessage = res.data
+      this.$store.commit('TOGGLE_MESSAGE_NUM', res.data.length || '')
+      this.loading = false
+    },
+    homeToInfo () {
+      if(this.unReadMessage[0].type == 1){
+        this.$router.push({ name: 'base' })
+      }else{
+        this.$router.push({ name: 'branch' })
+      }
+      
+      this.show = false
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+  .header-notice{
+    display: inline-block;
+    transition: all 0.3s;
+    span {
+      vertical-align: initial;
+    }
+    .notice-badge{
+      color: inherit;
+      .header-notice-icon{
+        font-size: 16px;
+        padding: 4px;
+      }
+    }
+  }
+  .dropdown-tabs{
+    background-color: #fff;
+    box-shadow: 0 2px 8px #999;
+    border-radius: 4px;
+    position: absolute;
+    right: -100px;
+    .tab-pane{
+      padding: 0 24px 12px;
+      max-height: 200px;
+    }
+    .ant-tabs-ink-bar {
+      width: 0 !important;
+    }
+    .ant-tabs-tab{
+      color: #000 !important;
+      font-size: 16px !important;
+    }
+    .ant-list-item-meta-description {
+      overflow:hidden;
+      text-overflow:ellipsis;
+      display:-webkit-box;
+      -webkit-box-orient:vertical;
+      -webkit-line-clamp:2;
+    }
+    .info{
+      width: 100%;
+      height: 100px;
+      font-size: 16px;
+      text-align: center;
+    }
+    .titleTime{
+      width: 100%;
+      img{
+        width: 20px;
+        height: 20px;
+        margin-top: -3px;
+        margin-right: 10px;
+      }
+      span{
+        color: #999;
+      }
+      p{
+        margin-top: 10px;
+        overflow:hidden;
+        text-overflow:ellipsis;
+        display:-webkit-box;
+        -webkit-box-orient:vertical;
+        -webkit-line-clamp:2;
+      }
+    }
+  }
+  .btn{
+      width: 100%;
+      height: 42px;
+      border: unset;
+      background: #fff;
+      border-top: 1px solid #ccc;
+      color: #333;
+      cursor: pointer;
+    }
+    .show {
+      height: 20px;
+      text-align: center;
+      color: blue;
+      cursor: pointer;
+    }
+  .ant-badge{
+        color: #1890ff !important;
+    }
+  .ant-avatar-image{
+    width: 20px !important;
+    height: 20px !important;
+    margin-top: 2px !important;
+  }
+</style>
diff --git a/src/components/tools/Logo.vue b/src/components/tools/Logo.vue
index b6b21eacbf..c339d0588e 100644
--- a/src/components/tools/Logo.vue
+++ b/src/components/tools/Logo.vue
@@ -1,12 +1,14 @@
 <template>
   <div class="logo">
-    <router-link :to="{name:'dashboard'}">
-      <LogoSvg alt="logo" />
-      <h1 v-if="showTitle">{{ title }}</h1>
+    <router-link :to="{name:'Analysis'}">
+      <!--      <LogoSvg alt="logo" /> -->
+      <img src="~@/assets/logo.png" class="logoImg" alt="logoImg">
+      <h1 v-if="showTitle">
+        <img src="~@/assets/logowords.png" class="logowords" alt="">
+      </h1>
     </router-link>
   </div>
 </template>
-
 <script>
 import LogoSvg from '@/assets/logo.svg?inline'
 
@@ -18,7 +20,7 @@ export default {
   props: {
     title: {
       type: String,
-      default: 'Ant Design Pro',
+      default: '支扩中国',
       required: false
     },
     showTitle: {
@@ -29,3 +31,13 @@ export default {
   }
 }
 </script>
+<style>
+.logo {
+  padding-left: 15px !important;
+}
+
+.logo h1 .logowords {
+  width: 100px!important;
+  height: 36px!important;
+}
+</style>
\ No newline at end of file
diff --git a/src/components/tools/UserMenu.vue b/src/components/tools/UserMenu.vue
index 56ff2d4c10..69299fcc39 100644
--- a/src/components/tools/UserMenu.vue
+++ b/src/components/tools/UserMenu.vue
@@ -1,78 +1,76 @@
 <template>
   <div class="user-wrapper">
     <div class="content-box">
-      <a href="https://pro.loacg.com/docs/getting-started" target="_blank">
-        <span class="action">
-          <a-icon type="question-circle-o"></a-icon>
-        </span>
-      </a>
-      <notice-icon class="action"/>
       <a-dropdown>
         <span class="action ant-dropdown-link user-dropdown-menu">
-          <a-avatar class="avatar" size="small" :src="avatar()"/>
-          <span>{{ nickname() }}</span>
+          <a-avatar class="avatar" style="margin-top: 18px" size="small" icon="user" />
+          <span>{{userName}}</span>
         </span>
         <a-menu slot="overlay" class="user-dropdown-menu-wrapper">
-          <a-menu-item key="0">
-            <router-link :to="{ name: 'center' }">
-              <a-icon type="user"/>
-              <span>个人中心</span>
-            </router-link>
-          </a-menu-item>
-          <a-menu-item key="1">
-            <router-link :to="{ name: 'settings' }">
-              <a-icon type="setting"/>
-              <span>账户设置</span>
-            </router-link>
+          <a-menu-item key="0" @click="$refs.userCenterModal.showModal()">
+            <a-icon type="user" />
+            <span>个人中心</span>
           </a-menu-item>
-          <a-menu-item key="2" disabled>
-            <a-icon type="setting"/>
-            <span>测试</span>
+          <a-menu-item key="1" @click="$refs.changePassword.showModal()">
+            <a-icon type="setting" />
+            <span>修改密码</span>
           </a-menu-item>
-          <a-menu-divider/>
-          <a-menu-item key="3">
+          <a-menu-divider />
+          <a-menu-item key="2">
             <a href="javascript:;" @click="handleLogout">
-              <a-icon type="logout"/>
+              <a-icon type="logout" />
               <span>退出登录</span>
             </a>
           </a-menu-item>
         </a-menu>
       </a-dropdown>
     </div>
+    <user-center ref="userCenterModal"></user-center>
+    <change-password ref="changePassword"></change-password>
   </div>
 </template>
-
 <script>
 import NoticeIcon from '@/components/NoticeIcon'
 import { mapActions, mapGetters } from 'vuex'
-
+import userCenter from './userCenter'
+import changePassword from './changePassword'
 export default {
   name: 'UserMenu',
+  data() {
+    return {
+      userName: ''
+    }
+  },
+  created() {
+    this.userName = this.token.name
+  },
+  computed: {
+    ...mapGetters(['token'])
+  },
   components: {
-    NoticeIcon
+    NoticeIcon,
+    userCenter,
+    changePassword
   },
   methods: {
     ...mapActions(['Logout']),
-    ...mapGetters(['nickname', 'avatar']),
-    handleLogout () {
+    handleLogout() {
       const that = this
 
       this.$confirm({
         title: '提示',
-        content: '真的要注销登录吗 ?',
-        onOk () {
-          return that.Logout({}).then(() => {
-            window.location.reload()
-          }).catch(err => {
-            that.$message.error({
-              title: '错误',
-              description: err.message
-            })
+        content: '真的要退出登录吗 ?',
+        onOk() {
+          that.Logout().then(res => {
+            that.$message.success('退出成功')
+            that.$router.push({ name: 'login' })
           })
         },
-        onCancel () {
-        }
+        onCancel() {}
       })
+    },
+    userCenter() {
+      // thi.userCenterModal
     }
   }
 }
diff --git a/src/components/tools/changePassword.vue b/src/components/tools/changePassword.vue
new file mode 100644
index 0000000000..d6c58c536e
--- /dev/null
+++ b/src/components/tools/changePassword.vue
@@ -0,0 +1,147 @@
+<template>
+  <div>
+    <a-modal title="修改密码" :maskClosable="maskClosable" :visible="visible" @ok="handleOk" :confirmLoading="confirmLoading" @cancel="handleCancel">
+      <a-form :form="form" >
+        <a-form-item label="原密码" :label-col="{ span: 5 }" :wrapper-col="{ span: 19 }">
+          <a-input  type="password" v-decorator="['password', { rules: [{ required: true, validator: confirmPassword }] }]" />
+        </a-form-item>
+        <a-form-item label="新密码" :label-col="{ span: 5 }" :wrapper-col="{ span: 19 }">
+          <a-input type="password" v-decorator="['newPassword', { rules: [{ required: true,validator: confirmNewPassword }] }]" />
+        </a-form-item>
+        <a-form-item label="确认新密码" :label-col="{ span: 5 }" :wrapper-col="{ span: 19 }">
+            <a-input autocomplete="off" onfocus="this.type='password'" type="text" v-decorator="['confirmPassword', { rules: [{ required: true, validator: confirm }] }]" />
+        </a-form-item>
+        <!-- <a-form-item :wrapper-col="{ span: 12, offset: 5 }"><a-button type="primary" html-type="submit">Submit</a-button></a-form-item> -->
+      </a-form>
+    </a-modal>
+  </div>
+</template>
+<script>
+import { getDetailById, updatePwd, } from '@/api/login';
+import { mapGetters,mapActions } from 'vuex'
+import { log } from 'util';
+import { timeout } from 'q';
+
+export default {
+  data() {
+    return {
+      ModalText: 'Content of the ',
+      visible: false,
+      maskClosable: false,
+      confirmLoading:false,
+      destroyOnClose: false,
+      form: this.$form.createForm(this),
+      ModalText: {},
+      password: ''
+    };
+  },
+  created() {
+    this.getUDetailById(this.token.doctorId);
+  },
+  computed: {
+    ...mapGetters(['token'])
+  },
+  methods: {
+    ...mapActions(['Logout']),
+    getUDetailById(id) {
+      const Params = new URLSearchParams();
+      Params.append('doctorId', id);
+      getDetailById(Params).then(res => {
+        this.ModalText = res.data.doctor
+        this.password = res.data.doctor.password
+        if (this.password == 'zklm2020' || this.password == 'zklm2023' || this.password == 'zklm2024') {
+          this.visible = true;
+        }
+      });
+    },
+    showModal() {
+      this.visible = true;
+    },
+    confirmPassword(rule, value, callback){
+      if (!value || value == '') {
+        callback('请输入原密码');
+        return false;
+      }
+      if(this.form.getFieldValue('password') != this.ModalText.password){
+          callback('与原密码不相符,请重新确认');
+        return false;
+      }
+    },
+    confirmNewPassword(rule, value, callback){
+      if (!value || value == '') {
+        callback('请输入新密码');
+        return false;
+      }
+      if(this.form.getFieldValue('newPassword') === this.ModalText.password){
+          callback('与原密码相符,请重新确认');
+        return false;
+      }
+    },
+    confirm(rule, value, callback){
+      if (!value || value == '') {
+        callback('请输入确认新密码');
+        return false;
+      }
+      if(value!=this.form.getFieldValue('newPassword')){
+          callback('与新密码不相符,请重新确认');
+        return false;
+      }
+    },
+    checkPassword(){
+      if(!this.form.getFieldValue('password') || this.form.getFieldValue('password') == ''){
+        return false;
+      }
+      if(this.form.getFieldValue('password') != this.ModalText.password){
+        return false;
+      }
+      if (!this.form.getFieldValue('newPassword') || this.form.getFieldValue('newPassword') == '') {
+        return false;
+      }
+      if(this.form.getFieldValue('newPassword') === this.ModalText.password){
+        return false;
+      }
+      if (!this.form.getFieldValue('confirmPassword') || this.form.getFieldValue('confirmPassword') == '') {
+        return false;
+      }
+      if(this.form.getFieldValue('confirmPassword') != this.form.getFieldValue('newPassword')){
+        return false;
+      }
+      return;
+    },
+    handleOk(e) {
+      e.preventDefault();
+      this.form.validateFieldsAndScroll((err, values) => {
+        return false;
+      });
+      this.checkPassword();
+      const that = this;
+     
+      if (that.checkPassword() == false) {
+
+      }else{
+        // console.log("成功")
+        const Params = new URLSearchParams();
+        that.ModalText.password = that.form.getFieldValue('newPassword')
+        Params.append('doctor',JSON.stringify(that.ModalText));
+        updatePwd(Params).then(res => {
+          if(res.code == 0){
+            that.$message.success(res.msg);
+            that.visible = false;
+            that.Logout().then(res => {
+              that.$router.push({ name: 'login' })
+            })
+          }else{
+            that.$message.error(res.msg);
+          }
+        });
+      }
+    },
+    handleCancel(e) {
+      if (this.password == 'zklm2020' || this.password == 'zklm2023' || this.password == 'zklm2024') {
+        return false
+      }
+      this.visible = false;
+    }
+  }
+};
+</script>
diff --git a/src/components/tools/userCenter.vue b/src/components/tools/userCenter.vue
new file mode 100644
index 0000000000..e3416cd458
--- /dev/null
+++ b/src/components/tools/userCenter.vue
@@ -0,0 +1,100 @@
+<template>
+  <div>
+    <a-modal title="个人中心" :width="400" :maskClosable="maskClosable" :bodyStyle="bodyStyle" :visible="visible" :footer="null" :confirmLoading="confirmLoading" @cancel="handleCancel">
+      <div class="userCenter">
+        <img src="../../assets/userCenerHeader.png" alt="">
+        <h4 class="userName">{{ ModalText.name }}</h4>
+        <p class="userCenter"><span>所属分支中心:</span>{{ ModalText.centerName }}</p>
+        <p class="userAccount">
+          <a-icon type="user" /> <span>账号:</span>{{ ModalText.account }}</p>
+        <p class="userAccount">
+          <a-icon type="clock-circle" /><span>创建时间:</span> {{ ModalText.createTime|formDate }}</p>
+      </div>
+    </a-modal>
+  </div>
+</template>
+<script>
+import { getDetailById } from '@/api/login'
+import moment from 'moment'
+import { mapGetters } from 'vuex'
+import 'url-search-params-polyfill'
+export default {
+  data() {
+    return {
+      ModalText: {},
+      visible: false,
+      confirmLoading: false,
+      bodyStyle: {
+        height: '350px',
+      },
+      maskClosable: false
+    };
+  },
+  created() {
+    this.getUDetailById(this.token.doctorId)
+  },
+  computed: {
+    ...mapGetters(['token'])
+  },
+  // mounted: {
+  //   this.getUDetailById(1);
+  // },
+  filters: {
+    formDate(date) {
+      return moment(date).format('YYYY-MM-DD');
+    }
+  },
+  methods: {
+    getUDetailById(id) {
+      const params = new URLSearchParams()
+      params.append('doctorId', id);
+      getDetailById(params).then(res => {
+        this.ModalText = res.data.doctor
+      });
+    },
+    showModal() {
+      this.visible = true;
+    },
+    handleCancel(e) {
+      console.log('Clicked cancel button');
+      this.visible = false;
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.userCenter {
+  text-align: center;
+
+  img {
+    width: 110px;
+  }
+
+  h4 {
+    font-weight: normal;
+    font-size: 20px;
+    margin-top: 10px;
+  }
+
+  p {
+    span {
+      color: #AEAEAE
+    }
+
+    .anticon {
+      margin-right: 10px;
+      font-size: 20px;
+    }
+  }
+
+  .userCenter {
+    font-size: 14px;
+    border-bottom: 1px dashed #eee;
+    padding-bottom: 20px;
+  }
+
+  .userAccount {
+    text-align: left
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/config/defaultSettings.js b/src/config/defaultSettings.js
index 267999790b..254d134534 100644
--- a/src/config/defaultSettings.js
+++ b/src/config/defaultSettings.js
@@ -1,18 +1,3 @@
-/**
- * 项目默认配置项
- * primaryColor - 默认主题色, 如果修改颜色不生效,请清理 localStorage
- * navTheme - sidebar theme ['dark', 'light'] 两种主题
- * colorWeak - 色盲模式
- * layout - 整体布局方式 ['sidemenu', 'topmenu'] 两种布局
- * fixedHeader - 固定 Header : boolean
- * fixSiderbar - 固定左侧菜单栏 : boolean
- * autoHideHeader - 向下滚动时,隐藏 Header : boolean
- * contentWidth - 内容区布局: 流式 |  固定
- *
- * storageOptions: {} - Vue-ls 插件配置项 (localStorage/sessionStorage)
- *
- */
-
 export default {
   primaryColor: '#52C41A', // primary color of ant design
   navTheme: 'dark', // theme for nav menu
diff --git a/src/config/router.config.js b/src/config/router.config.js
index 386390bed8..3389add3c1 100644
--- a/src/config/router.config.js
+++ b/src/config/router.config.js
@@ -1,326 +1,588 @@
-// eslint-disable-next-line
-import { UserLayout, BasicLayout, RouteView, BlankLayout, PageView } from '@/layouts'
-import { bxAnaalyse } from '@/core/icons'
-
-export const asyncRouterMap = [
-
-  {
+import { UserLayout, BasicLayout, RouteView, /*BlankLayout,*/ PageView } from '@/layouts'
+import { bxAnaalyse, baogao, bingli, fangshi, ruzhu, zhanghao, home, jixing, blzysq, blzysh, wxyhbd, wenjuan, hzbgsy, huodongquan, jkzs, myzj, webconfig,wx } from '@/core/icons'
+export const asyncRouterMap = [{
     path: '/',
     name: 'index',
     component: BasicLayout,
-    meta: { title: '首页' },
-    redirect: '/dashboard/workplace',
+    meta: { title: '首页', permission: ['center', 'group'] },
+    redirect: '/dashboard/analysis',
     children: [
       // dashboard
       {
-        path: '/dashboard',
-        name: 'dashboard',
-        redirect: '/dashboard/workplace',
+        path: '/dashboard/analysis',
+        name: 'Analysis',
+        component: () => import('@/views/dashboard/Analysis'),
+        meta: { title: '首页', keepAlive: true, icon: home, permission: ['center', 'group'] }
+      },
+      {
+        path: '/patient',
         component: RouteView,
-        meta: { title: '仪表盘', keepAlive: true, icon: bxAnaalyse, permission: [ 'dashboard' ] },
-        children: [
-          {
-            path: '/dashboard/analysis',
-            name: 'Analysis',
-            component: () => import('@/views/dashboard/Analysis'),
-            meta: { title: '分析页', keepAlive: false, permission: [ 'dashboard' ] }
-          },
-          // 外部链接
-          {
-            path: 'https://www.baidu.com/',
-            name: 'Monitor',
-            meta: { title: '监控页(外部)', target: '_blank' }
+        redirect: '/patient/list',
+        meta: { title: '病历管理', keepAlive: true, icon: wxyhbd, permission: ['center', 'group'] },
+        children: [{
+            path: '/patient/list',
+            name: 'patientList',
+            component: () => import('@/views/patient/list'),
+            meta: { title: '患者管理', keepAlive: false, icon: wxyhbd, permission: ['center', 'group'] }
+          }, {
+            path: '/list/index',
+            name: 'list',
+            component: () => import('@/views/list/TableList'),
+            meta: { title: '基线管理', keepAlive: true, icon: bingli, permission: ['center', 'group'] }
+          }, {
+            path: '/acute/index',
+            name: 'acute',
+            component: () => import('@/views/acute/TableList'),
+            meta: { title: '急性加重信息', keepAlive: true, icon: jixing, permission: ['center', 'group'] }
+          }, {
+            path: '/task/index',
+            name: 'Task',
+            component: () => import('@/views/task/index'),
+            meta: { title: '访视信息', keepAlive: true, icon: fangshi, permission: ['center', 'group'] }
+          }, {
+            path: '/caseTransfer/index',
+            name: 'CaseTransfer',
+            component: () => import('@/views/caseTransfer/index'),
+            meta: { title: '病历转移申请', keepAlive: true, icon: blzysq, permission: ['center', 'group'] }
           },
           {
-            path: '/dashboard/workplace',
-            name: 'Workplace',
-            component: () => import('@/views/dashboard/Workplace'),
-            meta: { title: '工作台', keepAlive: true, permission: [ 'dashboard' ] }
+            path: '/caseTransfer/review',
+            name: 'caseTransferReview',
+            component: () => import('@/views/caseTransfer/review'),
+            meta: { title: '病历转移审核', keepAlive: true, icon: blzysh, permission: ['center', 'group'] }
           }
         ]
       },
-
-      // forms
       {
-        path: '/form',
-        redirect: '/form/base-form',
-        component: PageView,
-        meta: { title: '表单页', icon: 'form', permission: [ 'form' ] },
-        children: [
-          {
-            path: '/form/base-form',
-            name: 'BaseForm',
-            component: () => import('@/views/form/BasicForm'),
-            meta: { title: '基础表单', keepAlive: true, permission: [ 'form' ] }
-          },
+        path: '/wx',
+        component: RouteView,
+        redirect: 'wx/userGroup',
+        meta: { title: '微信管理', keepAlive: true, icon: wx, permission: ['center', 'group'] },
+        children: [{
+              path: '/wx/userGroup',
+              name: 'wxUserGroup',
+              component: () => import('@/views/wx/userGroup'),
+              meta: { title: '患者注册信息', keepAlive: true, icon: wxyhbd, isBack: false, permission: ['center', 'group'] }
+        },
+        {
+          path: 'wx/messageReply',
+          name: 'wxMessageReply',
+          component: () => import('@/views/wx/messageReply'),
+          meta: { title: '患者留言管理', keepAlive: true, icon: hzbgsy, isBack: false, permission: ['center', 'group'] }
+        },
+          // {
+          //   path: '/wx/userBind',
+          //   name: 'wxUserBind',
+          //   component: () => import('@/views/wx/userBind'),
+          //   meta: { title: '微信用户绑定', keepAlive: true, icon: wxyhbd, isBack: false, permission: ['center', 'group'] }
+          // },
           {
-            path: '/form/step-form',
-            name: 'StepForm',
-            component: () => import('@/views/form/stepForm/StepForm'),
-            meta: { title: '分步表单', keepAlive: true, permission: [ 'form' ] }
+            path: '/wx/questionReview',
+            name: 'wxQuestionReview',
+            component: () => import('@/views/wx/questionReview'),
+            meta: { title: '微信问卷审阅', keepAlive: true, icon: wenjuan, isBack: false, permission: ['center', 'group'] }
+          }, {
+            path: '/wx/patientReportReview',
+            name: 'wxPatientReportReview',
+            component: () => import('@/views/wx/patientReportReview'),
+            meta: { title: '患者报告审阅', keepAlive: true, icon: hzbgsy, isBack: false, permission: ['center', 'group'] }
           },
           {
-            path: '/form/advanced-form',
-            name: 'AdvanceForm',
-            component: () => import('@/views/form/advancedForm/AdvancedForm'),
-            meta: { title: '高级表单', keepAlive: true, permission: [ 'form' ] }
+            path: '/wx/ticketRegister',
+            name: 'wxTicketRegister',
+            component: () => import('@/views/wx/ticketRegister'),
+            meta: { title: '活动券登记', keepAlive: true, icon: huodongquan, isBack: false, permission: ['center', 'group'] }
           }
         ]
       },
-
-      // list
-      {
-        path: '/list',
-        name: 'list',
-        component: PageView,
-        redirect: '/list/table-list',
-        meta: { title: '列表页', icon: 'table', permission: [ 'table' ] },
-        children: [
-          {
-            path: '/list/table-list/:pageNo([1-9]\\d*)?',
-            name: 'TableListWrapper',
-            hideChildrenInMenu: true, // 强制显示 MenuItem 而不是 SubMenu
-            component: () => import('@/views/list/TableList'),
-            meta: { title: '查询表格', keepAlive: true, permission: [ 'table' ] }
+      {
+        path: '/report',
+        component: RouteView,
+        redirect: '/report/index',
+        meta: { title: '报表管理', keepAlive: true, icon: baogao, permission: ['center', 'group'] },
+        children: [{
+            path: '/report/index',
+            name: 'report',
+            component: () => import('@/views/report/index'),
+            meta: { title: '数据统计', keepAlive: true, icon: baogao, isBack: false, permission: ['center', 'group'] }
+          }, {
+            path: '/reportApply/index',
+            name: 'reportApply',
+            component: () => import('@/views/reportApply/index'),
+            meta: { title: '申请开通报表', keepAlive: true, icon: blzysh, isBack: false, permission: ['center', 'group'] }
           },
           {
-            path: '/list/basic-list',
-            name: 'BasicList',
-            component: () => import('@/views/list/StandardList'),
-            meta: { title: '标准列表', keepAlive: true, permission: [ 'table' ] }
+            path: '/score/list',
+            name: 'scoreList',
+            component: () => import('@/views/score/list'),
+            meta: { title: '支扩评分报表', keepAlive: true, icon: baogao, isBack: false, permission: ['center', 'group'] }
           },
           {
-            path: '/list/card',
-            name: 'CardList',
-            component: () => import('@/views/list/CardList'),
-            meta: { title: '卡片列表', keepAlive: true, permission: [ 'table' ] }
+            path: '/reportApply/review',
+            name: 'reportReview',
+            component: () => import('@/views/reportApply/review'),
+            meta: { title: '开通报表审核', keepAlive: true, icon: blzysh, isBack: false, permission: ['center', 'group'] }
           },
           {
-            path: '/list/search',
-            name: 'SearchList',
-            component: () => import('@/views/list/search/SearchLayout'),
-            redirect: '/list/search/article',
-            meta: { title: '搜索列表', keepAlive: true, permission: [ 'table' ] },
-            children: [
-              {
-                path: '/list/search/article',
-                name: 'SearchArticles',
-                component: () => import('../views/list/search/Article'),
-                meta: { title: '搜索列表(文章)', permission: [ 'table' ] }
-              },
-              {
-                path: '/list/search/project',
-                name: 'SearchProjects',
-                component: () => import('../views/list/search/Projects'),
-                meta: { title: '搜索列表(项目)', permission: [ 'table' ] }
-              },
-              {
-                path: '/list/search/application',
-                name: 'SearchApplications',
-                component: () => import('../views/list/search/Applications'),
-                meta: { title: '搜索列表(应用)', permission: [ 'table' ] }
-              }
-            ]
-          }
-        ]
-      },
-
-      // profile
-      {
-        path: '/profile',
-        name: 'profile',
-        component: RouteView,
-        redirect: '/profile/basic',
-        meta: { title: '详情页', icon: 'profile', permission: [ 'profile' ] },
-        children: [
-          {
-            path: '/profile/basic',
-            name: 'ProfileBasic',
-            component: () => import('@/views/profile/basic/Index'),
-            meta: { title: '基础详情页', permission: [ 'profile' ] }
+            path: '/reportApply/ethics',
+            name: 'reportEthics',
+            component: () => import('@/views/reportApply/ethics'),
+            meta: { title: '伦理批件统计', keepAlive: true, icon: blzysh, isBack: false, permission: ['center', 'group'] }
           },
           {
-            path: '/profile/advanced',
-            name: 'ProfileAdvanced',
-            component: () => import('@/views/profile/advanced/Advanced'),
-            meta: { title: '高级详情页', permission: [ 'profile' ] }
-          }
-        ]
-      },
-
-      // result
-      {
-        path: '/result',
-        name: 'result',
-        component: PageView,
-        redirect: '/result/success',
-        meta: { title: '结果页', icon: 'check-circle-o', permission: [ 'result' ] },
-        children: [
-          {
-            path: '/result/success',
-            name: 'ResultSuccess',
-            component: () => import(/* webpackChunkName: "result" */ '@/views/result/Success'),
-            meta: { title: '成功', keepAlive: false, hiddenHeaderContent: true, permission: [ 'result' ] }
+            path: '/reportApply/statistics',
+            name: 'statistics',
+            component: () => import('@/views/reportApply/statistics'),
+            meta: { title: '患者录入统计', keepAlive: true, icon: blzysh, isBack: false, permission: ['center', 'group'] }
           },
           {
-            path: '/result/fail',
-            name: 'ResultFail',
-            component: () => import(/* webpackChunkName: "result" */ '@/views/result/Error'),
-            meta: { title: '失败', keepAlive: false, hiddenHeaderContent: true, permission: [ 'result' ] }
-          }
-        ]
-      },
-
-      // Exception
-      {
-        path: '/exception',
-        name: 'exception',
-        component: RouteView,
-        redirect: '/exception/403',
-        meta: { title: '异常页', icon: 'warning', permission: [ 'exception' ] },
-        children: [
+            path: '/reportApply/iconJx',
+            name: 'iconJx',
+            component: () => import('@/views/reportApply/iconJx'),
+            meta: { title: 'ICON基线统计', keepAlive: true, icon: blzysh, isBack: false, permission: ['center', 'group'] }
+          },
           {
-            path: '/exception/403',
-            name: 'Exception403',
-            component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/403'),
-            meta: { title: '403', permission: [ 'exception' ] }
+            path: '/reportApply/iconCg',
+            name: 'iconCg',
+            component: () => import('@/views/reportApply/iconCg'),
+            meta: { title: 'ICON常规统计', keepAlive: true, icon: blzysh, isBack: false, permission: ['center', 'group'] }
           },
           {
-            path: '/exception/404',
-            name: 'Exception404',
-            component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404'),
-            meta: { title: '404', permission: [ 'exception' ] }
+            path: '/reportApply/iconJxjzq',
+            name: 'iconJxjzq',
+            component: () => import('@/views/reportApply/iconJxjzq'),
+            meta: { title: 'ICON加重统计', keepAlive: true, icon: blzysh, isBack: false, permission: ['center', 'group'] }
           },
           {
-            path: '/exception/500',
-            name: 'Exception500',
-            component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/500'),
-            meta: { title: '500', permission: [ 'exception' ] }
+            path: '/reportApply/iconData',
+            name: 'iconData',
+            component: () => import('@/views/reportApply/iconData'),
+            meta: { title: 'ICON数据统计', keepAlive: true, icon: blzysh, isBack: false, permission: ['center', 'group'] }
           }
         ]
       },
-
-      // account
       {
-        path: '/account',
+        path: '/message',
         component: RouteView,
-        redirect: '/account/center',
-        name: 'account',
-        meta: { title: '个人页', icon: 'user', keepAlive: true, permission: [ 'user' ] },
-        children: [
-          {
-            path: '/account/center',
-            name: 'center',
-            component: () => import('@/views/account/center/Index'),
-            meta: { title: '个人中心', keepAlive: true, permission: [ 'user' ] }
-          },
-          {
-            path: '/account/settings',
-            name: 'settings',
-            component: () => import('@/views/account/settings/Index'),
-            meta: { title: '个人设置', hideHeader: true, permission: [ 'user' ] },
-            redirect: '/account/settings/base',
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: '/account/settings/base',
-                name: 'BaseSettings',
-                component: () => import('@/views/account/settings/BaseSetting'),
-                meta: { title: '基本设置', hidden: true, permission: [ 'user' ] }
-              },
-              {
-                path: '/account/settings/security',
-                name: 'SecuritySettings',
-                component: () => import('@/views/account/settings/Security'),
-                meta: { title: '安全设置', hidden: true, keepAlive: true, permission: [ 'user' ] }
-              },
-              {
-                path: '/account/settings/custom',
-                name: 'CustomSettings',
-                component: () => import('@/views/account/settings/Custom'),
-                meta: { title: '个性化设置', hidden: true, keepAlive: true, permission: [ 'user' ] }
-              },
-              {
-                path: '/account/settings/binding',
-                name: 'BindingSettings',
-                component: () => import('@/views/account/settings/Binding'),
-                meta: { title: '账户绑定', hidden: true, keepAlive: true, permission: [ 'user' ] }
-              },
-              {
-                path: '/account/settings/notification',
-                name: 'NotificationSettings',
-                component: () => import('@/views/account/settings/Notification'),
-                meta: { title: '新消息通知', hidden: true, keepAlive: true, permission: [ 'user' ] }
-              }
-            ]
-          }
-        ]
+        redirect: '/message/base',
+        meta: { title: '消息中心', keepAlive: true, icon: wxyhbd, permission: ['center', 'group'] },
+        children: [{
+          path: '/message/base',
+          name: 'base',
+          component: () => import('@/views/message/base'),
+          meta: { title: '总部消息', keepAlive: true, icon: wxyhbd, permission: ['center', 'group'] }
+        },{
+          path: '/message/branch',
+          name: 'branch',
+          component: () => import('@/views/message/branch'),
+          meta: { title: '分支消息', keepAlive: true, icon: wxyhbd, permission: ['center', 'group'] }
+        }]
+      },
+      {
+        path: '/list/basis/:id(\\d*)',
+        name: 'basis',
+        hidden: true,
+        hideChildrenInMenu: true, // 强制显示 MenuItem 而不是 SubMenu
+        component: () => import('@/views/account/center/Index'),
+        meta: { permission: ['center', 'group'] }
+      },
+      {
+        path: '/jxjzq/:id(\\d*)',
+        name: 'jxjzq',
+        hidden: true,
+        hideChildrenInMenu: true, // 强制显示 MenuItem 而不是 SubMenu
+        component: () => import('@/views/account/center/jxjzq'),
+        meta: { permission: ['center', 'group'] }
+      },
+      {
+        path: '/icon/jxjzq/:id(\\d*)',
+        name: 'iconJxjzq',
+        hidden: true,
+        hideChildrenInMenu: true, // 强制显示 MenuItem 而不是 SubMenu
+        component: () => import('@/views/icon/jxjzq'),
+        meta: { permission: ['center', 'group'] }
+      },
+      {
+        path: '/icon/task/:id(\\d*)',
+        name: 'iconTask',
+        hidden: true,
+        hideChildrenInMenu: true, // 强制显示 MenuItem 而不是 SubMenu
+        component: () => import('@/views/icon/task'),
+        meta: { permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/1',
+        name: 'mask1',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-1'),
+        meta: { maskId: 1, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/2',
+        name: 'mask2',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-2'),
+        meta: { maskId: 2, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/5',
+        name: 'mask5',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-5'),
+        meta: { maskId: 5, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/6',
+        name: 'mask6',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-6'),
+        meta: { maskId: 6, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/7',
+        name: 'mask7',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-7'),
+        meta: { maskId: 7, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/8',
+        name: 'mask8',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-8'),
+        meta: { maskId: 8, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/9',
+        name: 'mask9',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-9'),
+        meta: { maskId: 9, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/10',
+        name: 'mask10',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-10'),
+        meta: { maskId: 10, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/4',
+        name: 'mask4',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-4'),
+        meta: { maskId: 4, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/67',
+        name: 'mask1',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-1'),
+        meta: { maskId: 67, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/68',
+        name: 'mask2',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-2'),
+        meta: { maskId: 68, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/71',
+        name: 'mask5',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-5'),
+        meta: { maskId: 71, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/72',
+        name: 'mask6',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-6'),
+        meta: { maskId: 72, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/73',
+        name: 'mask7',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-7'),
+        meta: { maskId: 73, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/74',
+        name: 'mask8',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-8'),
+        meta: { maskId: 74, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/75',
+        name: 'mask9',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-9'),
+        meta: { maskId: 75, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/76',
+        name: 'mask10',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-10'),
+        meta: { maskId: 76, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/basis/:id(\\d+)/70',
+        name: 'mask4',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/components/mask-4'),
+        meta: { maskId: 70, permission: ['center', 'group'] }
+      },
+      {
+        path: '/basis/question/:id(\\d+)/:qid(\\d+)',
+        name: 'BasisQuestion',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/account/center/question'),
+        meta: { permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/task/:id(\\d*)',
+        name: 'taskTotal',
+        hidden: true,
+        hideChildrenInMenu: true, // 强制显示 MenuItem 而不是 SubMenu
+        component: () => import('@/views/task/total'),
+        meta: { permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/task/:id(\\d+)/11',
+        name: 'task11',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/task/components/mask-11'),
+        meta: { maskId: 11, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/task/:id(\\d+)/14',
+        name: 'task14',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/task/components/mask-14'),
+        meta: { maskId: 14, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/task/:id(\\d+)/15',
+        name: 'task15',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/task/components/mask-15'),
+        meta: { maskId: 15, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/task/:id(\\d+)/19',
+        name: 'task19',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/task/components/mask-19'),
+        meta: { maskId: 19, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/task/:id(\\d+)/20',
+        name: 'task20',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/task/components/mask-20'),
+        meta: { maskId: 20, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/task/:id(\\d+)/21',
+        name: 'task21',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/task/components/mask-21'),
+        meta: { maskId: 21, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/task/:id(\\d+)/22',
+        name: 'task22',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/task/components/mask-22'),
+        meta: { maskId: 22, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/task/:id(\\d+)/23',
+        name: 'task23',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/task/components/mask-23'),
+        meta: { maskId: 23, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/task/:id(\\d+)/24',
+        name: 'task24',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/task/components/mask-24'),
+        meta: { maskId: 24, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/task/:id(\\d+)/17',
+        name: 'task17',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/task/components/mask-17'),
+        meta: { maskId: 17, permission: ['center', 'group'] }
+      },
+      {
+        path: '/list/task/:id(\\d+)/18',
+        name: 'task18',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/task/components/mask-18'),
+        meta: { maskId: 18, permission: ['center', 'group'] }
+      },
+      {
+        path: '/gallery/index',
+        name: 'Gallery',
+        component: () => import('@/views/gallery/index'),
+        meta: { title: '报告采集', keepAlive: true, icon: baogao, isBack: false, permission: ['center', 'group'] }
+      },
+      {
+        path: '/group/index',
+        name: 'Group',
+        component: () => import('@/views/group/index'),
+        meta: { title: '入组管理', keepAlive: true, icon: ruzhu, isBack: false, permission: ['center', 'group'] }
+      },
+      {
+        path: '/gallery/execute/:id(\\d+)/53',
+        name: 'Exec53',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/gallery/components/mask-53'),
+        meta: { maskId: 53, permission: ['center', 'group'] }
+      },
+      {
+        path: '/gallery/execute/:id(\\d+)/51',
+        name: 'Exec51',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/gallery/components/mask-51'),
+        meta: { maskId: 51, permission: ['center', 'group'] }
+      },
+      {
+        path: '/gallery/execute/:id(\\d+)/52',
+        name: 'Exec52',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/gallery/components/mask-52'),
+        meta: { maskId: 52, permission: ['center', 'group'] }
+      },
+      {
+        path: '/gallery/execute/:id(\\d+)/54',
+        name: 'Exec54',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/gallery/components/mask-54'),
+        meta: { maskId: 54, permission: ['center', 'group'] }
+      },
+      {
+        path: '/gallery/execute/:id(\\d+)',
+        name: 'galleryExec',
+        hidden: true,
+        hideChildrenInMenu: true,
+        component: () => import('@/views/gallery/execute'),
+        meta: { permission: ['center', 'group'] }
       },
 
-      // other
-      {
-        path: '/other',
-        name: 'otherPage',
-        component: PageView,
-        meta: { title: '其他组件', icon: 'slack', permission: [ 'dashboard' ] },
-        redirect: '/other/icon-selector',
-        children: [
-          {
-            path: '/other/icon-selector',
-            name: 'TestIconSelect',
-            component: () => import('@/views/other/IconSelectorView'),
-            meta: { title: 'IconSelector', icon: 'tool', keepAlive: true, permission: [ 'dashboard' ] }
-          },
-          {
-            path: '/other/list',
-            component: RouteView,
-            meta: { title: '业务布局', icon: 'layout', permission: [ 'support' ] },
-            redirect: '/other/list/tree-list',
-            children: [
-              {
-                path: '/other/list/tree-list',
-                name: 'TreeList',
-                component: () => import('@/views/other/TreeList'),
-                meta: { title: '树目录表格', keepAlive: true }
-              },
-              {
-                path: '/other/list/edit-table',
-                name: 'EditList',
-                component: () => import('@/views/other/TableInnerEditList'),
-                meta: { title: '内联编辑表格', keepAlive: true }
-              },
-              {
-                path: '/other/list/user-list',
-                name: 'UserList',
-                component: () => import('@/views/other/UserList'),
-                meta: { title: '用户列表', keepAlive: true }
-              },
-              {
-                path: '/other/list/role-list',
-                name: 'RoleList',
-                component: () => import('@/views/other/RoleList'),
-                meta: { title: '角色列表', keepAlive: true }
-              },
-              {
-                path: '/other/list/system-role',
-                name: 'SystemRole',
-                component: () => import('@/views/role/RoleList'),
-                meta: { title: '角色列表2', keepAlive: true }
-              },
-              {
-                path: '/other/list/permission-list',
-                name: 'PermissionList',
-                component: () => import('@/views/other/PermissionList'),
-                meta: { title: '权限列表', keepAlive: true }
-              }
-            ]
-          }
-        ]
-      }
+
+      {
+        path: '/wx/questionDetail/:id(\\d*)',
+        name: 'wxQuestionDetail',
+        hidden: true,
+        hideChildrenInMenu: true, // 强制显示 MenuItem 而不是 SubMenu
+        component: () => import('@/views/wx/questionDetail'),
+        meta: { permission: ['center', 'group'] }
+      },
+      {
+        path: '/wx/article',
+        name: 'wxArticle',
+        component: () => import('@/views/wx/article'),
+        meta: { title: '微信文章', keepAlive: true, icon: jkzs, isBack: false, permission: ['group'] }
+      },
+      {
+        path: '/gw/article',
+        name: 'gwArticle',
+        component: () => import('@/views/gw/article'),
+        meta: { title: '官网文章', keepAlive: true, icon: jkzs, isBack: false, permission: ['group'] }
+      },
+      {
+        path: '/wx/famousDoctor',
+        name: 'famousDoctor',
+        component: () => import('@/views/wx/famousDoctor'),
+        meta: { title: '名医专家', keepAlive: true, icon: myzj, isBack: false, permission: ['group'] }
+      },
+      {
+        path: '/gw/pageConfigure',
+        name: 'pageConfigure',
+        component: () => import('@/views/gw/pageConfigure'),
+        meta: { title: '官网首页配置', keepAlive: true, icon: webconfig, isBack: false, permission: ['group'] }
+      },
+      {
+        path: '/gallery/detail/:id(\\d*)',
+        name: 'collectDetail',
+        hidden: true,
+        hideChildrenInMenu: true, // 强制显示 MenuItem 而不是 SubMenu
+        component: () => import('@/views/account/center/collect'),
+        meta: { permission: ['center', 'group'] }
+      },
+      {
+        path: '/group/addProject',
+        name: 'addProject',
+        hidden: true,
+        component: () => import('@/views/group/addProject'),
+        meta: { hiddenHeaderContent: true, hidden: true }
+      },
+      {
+        path: '/center/list',
+        name: 'centerList',
+        component: () => import('@/views/center/list'),
+        meta: { title: '中心管理', keepAlive: true, icon: wxyhbd, isBack: false, permission: ['center', 'group'] }
+      },
+      {
+        path: '/role/list',
+        name: 'roleList',
+        component: () => import('@/views/role/list'),
+        meta: { title: '角色管理', keepAlive: true, icon: wxyhbd, isBack: false, permission: ['center', 'group'] }
+      },
+      {
+        path: '/user/list',
+        name: 'userList',
+        component: () => import('@/views/user/list'),
+        meta: { title: '用户管理', keepAlive: true, icon: wxyhbd, isBack: false, permission: ['center', 'group'] }
+      },
     ]
   },
   {
-    path: '*', redirect: '/404', hidden: true
+    path: '*',
+    redirect: '/404',
+    hidden: true
   }
 ]
 
@@ -328,32 +590,31 @@ export const asyncRouterMap = [
  * 基础路由
  * @type { *[] }
  */
-export const constantRouterMap = [
-  {
+export const constantRouterMap = [{
     path: '/user',
     component: UserLayout,
     redirect: '/user/login',
     hidden: true,
-    children: [
-      {
+    children: [{
         path: 'login',
         name: 'login',
-        component: () => import(/* webpackChunkName: "user" */ '@/views/user/Login')
+        meta: { title: '登录' },
+        component: () => import( /* webpackChunkName: "user" */ '@/views/user/Login')
       },
       {
         path: 'register',
         name: 'register',
-        component: () => import(/* webpackChunkName: "user" */ '@/views/user/Register')
+        component: () => import( /* webpackChunkName: "user" */ '@/views/user/Register')
       },
       {
         path: 'register-result',
         name: 'registerResult',
-        component: () => import(/* webpackChunkName: "user" */ '@/views/user/RegisterResult')
+        component: () => import( /* webpackChunkName: "user" */ '@/views/user/RegisterResult')
       }
     ]
   },
 
-  {
+  /*{
     path: '/test',
     component: BlankLayout,
     redirect: '/test/home',
@@ -364,11 +625,11 @@ export const constantRouterMap = [
         component: () => import('@/views/Home')
       }
     ]
-  },
+  },*/
 
   {
     path: '/404',
-    component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404')
+    component: () => import( /* webpackChunkName: "fail" */ '@/views/exception/404')
   }
 
-]
+]
\ No newline at end of file
diff --git a/src/core/icons.js b/src/core/icons.js
index 46b726163d..60b871cb57 100644
--- a/src/core/icons.js
+++ b/src/core/icons.js
@@ -7,5 +7,24 @@
  * 所有图标均从这里加载,方便管理
  */
 import bxAnaalyse from '@/assets/icons/bx-analyse.svg?inline' // path to your '*.svg?inline' file.
+import baogao from '@/assets/icons/baogao.svg?inline' // path to your '*.svg?inline' file.
+import bingli from '@/assets/icons/bingli.svg?inline' // path to your '*.svg?inline' file
+import fangshi from '@/assets/icons/fangshi.svg?inline' // path to your '*.svg?inline' file
+import ruzhu from '@/assets/icons/ruzhu.svg?inline' // path to your '*.svg?inline' file
+import zhanghao from '@/assets/icons/zhanghao.svg?inline' // path to your '*.svg?inline' file
+import home from '@/assets/icons/home.svg?inline' // path to your '*.svg?inline' file.
+import jixing from '@/assets/icons/jixing.svg?inline' // path to your '*.svg?inline' file.
+import blzysq from '@/assets/icons/blzysq.svg?inline' // path to your '*.svg?inline' file.
+import blzysh from '@/assets/icons/blzysh.svg?inline' // path to your '*.svg?inline' file.
+import wxyhbd from '@/assets/icons/wxyhbd.svg?inline' // path to your '*.svg?inline' file.
+import wenjuan from '@/assets/icons/wenjuan.svg?inline' // path to your '*.svg?inline' file
+import hzbgsy from '@/assets/icons/hzbgsy.svg?inline' // path to your '*.svg?inline' file.
+import huodongquan from '@/assets/icons/huodongquan.svg?inline' // path to your '*.svg?inline' file.
+import jkzs from '@/assets/icons/jkzs.svg?inline' // path to your '*.svg?inline' file.
+import myzj from '@/assets/icons/myzj.svg?inline' // path to your '*.svg?inline' file.
+import webconfig from '@/assets/icons/webconfig.svg?inline' // path to your '*.svg?inline' file.
+import wx from '@/assets/icons/wx.svg?inline' // path to your '*.svg?inline' file.
 
-export { bxAnaalyse }
+export { 
+  bxAnaalyse,baogao,bingli,fangshi,ruzhu,zhanghao,home,jixing,blzysq,blzysh,wxyhbd,wenjuan,hzbgsy,huodongquan,jkzs,myzj,webconfig,wx
+}
diff --git a/src/layouts/BasicLayout.vue b/src/layouts/BasicLayout.vue
index 7cbf42118f..8a2014028e 100644
--- a/src/layouts/BasicLayout.vue
+++ b/src/layouts/BasicLayout.vue
@@ -28,7 +28,7 @@
       :collapsible="true"
     ></side-menu>
 
-    <a-layout :class="[layoutMode, `content-width-${contentWidth}`]" :style="{ paddingLeft: contentPaddingLeft, minHeight: '100vh' }">
+    <a-layout :class="[layoutMode, `content-width-${contentWidth}`]" :style="{ paddingLeft: contentPaddingLeft, minHeight: '100vh', height: '100vh' }">
       <!-- layout header -->
       <global-header
         :mode="layoutMode"
@@ -40,20 +40,24 @@
       />
 
       <!-- layout content -->
-      <a-layout-content :style="{ height: '100%', margin: '24px 24px 0', paddingTop: fixedHeader ? '64px' : '0' }">
+      <a-layout-content :style="{ overflowY:'auto',overflowX:'hidden', margin: '10px 10px 0', paddingTop: fixedHeader ? '64px' : '0' }">
         <multi-tab v-if="multiTab"></multi-tab>
-        <transition name="page-transition">
-          <route-view />
-        </transition>
+        <!-- <transition name="page-transition"> -->
+          <!-- <route-view /> -->
+          <keep-alive >
+            <router-view v-if="$route.meta.keepAlive"></router-view>
+          </keep-alive>
+          <router-view v-if="!$route.meta.keepAlive"></router-view>
+        <!-- </transition> -->
       </a-layout-content>
 
       <!-- layout footer -->
-      <a-layout-footer>
+<!--       <a-layout-footer>
         <global-footer />
-      </a-layout-footer>
+      </a-layout-footer> -->
 
       <!-- Setting Drawer (show in development mode) -->
-      <setting-drawer v-if="!production"></setting-drawer>
+      <!-- <setting-drawer v-if="!production"></setting-drawer> -->
     </a-layout>
   </a-layout>
 
@@ -65,29 +69,31 @@ import { mapState, mapActions } from 'vuex'
 import { mixin, mixinDevice } from '@/utils/mixin'
 import config from '@/config/defaultSettings'
 
-import RouteView from './RouteView'
+// import RouteView from './RouteView'
 import MultiTab from '@/components/MultiTab'
 import SideMenu from '@/components/Menu/SideMenu'
 import GlobalHeader from '@/components/GlobalHeader'
-import GlobalFooter from '@/components/GlobalFooter'
-import SettingDrawer from '@/components/SettingDrawer'
+// import GlobalFooter from '@/components/GlobalFooter'
+// import SettingDrawer from '@/components/SettingDrawer'
+// import { asyncRouterMap } from '@/config/router.config.js'
 
 export default {
   name: 'BasicLayout',
   mixins: [mixin, mixinDevice],
   components: {
-    RouteView,
+    // RouteView,
     MultiTab,
     SideMenu,
     GlobalHeader,
-    GlobalFooter,
-    SettingDrawer
+    // GlobalFooter,
+    // SettingDrawer
   },
   data () {
     return {
-      production: config.production,
+    //   production: config.production,
       collapsed: false,
-      menus: []
+      menus: [],
+      height:(window.screen.height-368)+"px"
     }
   },
   computed: {
@@ -106,11 +112,19 @@ export default {
     }
   },
   watch: {
+      $route (to,from) {
+        if(to.meta.title) {
+            this.collapsed = false
+        }else {
+            this.collapsed = true
+        }
+      },
     sidebarOpened (val) {
       this.collapsed = !val
     }
   },
   created () {
+    // this.menus = asyncRouterMap.find((item) => item.path === '/').children
     this.menus = this.mainMenu.find(item => item.path === '/').children
     this.collapsed = !this.sidebarOpened
   },
@@ -126,7 +140,7 @@ export default {
     }
   },
   methods: {
-    ...mapActions(['setSidebar']),
+    ...mapActions(['CloseSidebar','setSidebar']),
     toggle () {
       this.collapsed = !this.collapsed
       this.setSidebar(!this.collapsed)
@@ -178,4 +192,31 @@ export default {
   -webkit-transform: scale(1.1);
   transform: scale(1.1);
 }
+.ant-layout-sider{
+  min-height: 100vh;
+}
+.slide-right-enter-active,
+.slide-right-leave-active,
+.slide-left-enter-active,
+.slide-left-leave-active {
+  will-change: transform;
+  transition: all 500ms;
+  position: absolute;
+}
+.slide-right-enter {
+  opacity: 0;
+  transform: translate3d(-100%, 0, 0);
+}
+.slide-right-leave-active {
+  opacity: 0;
+  transform: translate3d(100%, 0, 0);
+}
+.slide-left-enter {
+  opacity: 0;
+  transform: translate3d(100%, 0, 0);
+}
+.slide-left-leave-active {
+  opacity: 0;
+  transform: translate3d(-100%, 0, 0);
+}
 </style>
diff --git a/src/layouts/UserLayout.vue b/src/layouts/UserLayout.vue
index f318e8a560..6a9f0f45ca 100644
--- a/src/layouts/UserLayout.vue
+++ b/src/layouts/UserLayout.vue
@@ -4,25 +4,31 @@
       <div class="top">
         <div class="header">
           <a href="/">
-            <img src="~@/assets/logo.svg" class="logo" alt="logo">
-            <span class="title">Ant Design</span>
+            <img src="~@/assets/logo.png" class="logo" alt="logo">
+            <span class="title">支气管扩张症临床诊治与研究联盟</span>
           </a>
         </div>
-        <div class="desc">
-          Ant Design 是西湖区最具影响力的 Web 设计规范
-        </div>
       </div>
 
       <route-view></route-view>
 
       <div class="footer">
-        <div class="links">
-          <a href="_self">帮助</a>
-          <a href="_self">隐私</a>
-          <a href="_self">条款</a>
-        </div>
         <div class="copyright">
-          Copyright &copy; 2018 白鹭学园技术组出品
+          <span style="margin-right: 10px;">
+            &copy;支气管扩张症临床诊治与研究联盟
+          </span>
+          <a href="http://beian.miit.gov.cn/" target="_blank" style="margin-right: 10px;">
+             苏ICP备15031540号-4
+          </a>
+          <span style="margin-right: 10px;">
+            备案号:32010602010785
+          </span>
+          <span style="margin-right: 10px;">
+            当前版本:{{version}}
+          </span>
+          <span>
+             技术支持:南京德益康信息科技有限公司
+          </span>
         </div>
       </div>
     </div>
@@ -30,6 +36,7 @@
 </template>
 
 <script>
+import Vue from 'vue'
 import RouteView from './RouteView'
 import { mixinDevice } from '@/utils/mixin'
 
@@ -38,7 +45,9 @@ export default {
   components: { RouteView },
   mixins: [mixinDevice],
   data () {
-    return {}
+    return {
+      version: Vue.ls.get('version') || '1.0.1'
+    }
   },
   mounted () {
     document.body.classList.add('userLayout')
@@ -65,9 +74,9 @@ export default {
     .container {
       width: 100%;
       min-height: 100%;
-      background: #f0f2f5 url(~@/assets/background.svg) no-repeat 50%;
+      background: #f0f2f5 url(~@/assets/loginBg.jpg) no-repeat 50%;
       background-size: 100%;
-      padding: 110px 0 144px;
+      padding: 210px 0 144px;
       position: relative;
 
       a {
@@ -80,7 +89,8 @@ export default {
         .header {
           height: 44px;
           line-height: 44px;
-
+          margin-bottom: 50px;
+          color:#8A8A8A;
           .badge {
             position: absolute;
             display: inline-block;
diff --git a/src/layouts/index.js b/src/layouts/index.js
index 1d62d6c0c1..cff758c2c3 100644
--- a/src/layouts/index.js
+++ b/src/layouts/index.js
@@ -1,7 +1,7 @@
 import UserLayout from './UserLayout'
-import BlankLayout from './BlankLayout'
+// import BlankLayout from './BlankLayout'
 import BasicLayout from './BasicLayout'
 import RouteView from './RouteView'
 import PageView from './PageView'
 
-export { UserLayout, BasicLayout, BlankLayout, RouteView, PageView }
+export { UserLayout, BasicLayout, /*BlankLayout,*/ RouteView, PageView }
diff --git a/src/main.js b/src/main.js
index 0055d797d3..1406468e86 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,28 +1,44 @@
-// ie polyfill
-import '@babel/polyfill'
-
-import Vue from 'vue'
-import App from './App.vue'
-import router from './router'
-import store from './store/'
-import { VueAxios } from './utils/request'
-
-// mock
-import './mock'
-
-import bootstrap from './core/bootstrap'
-import './core/use'
-import './permission' // permission control
-import './utils/filter' // global filter
-
-Vue.config.productionTip = false
-
-// mount axios Vue.$http and this.$http
-Vue.use(VueAxios)
-
-new Vue({
-  router,
-  store,
-  created: bootstrap,
-  render: h => h(App)
-}).$mount('#app')
+// ie polyfill
+import '@babel/polyfill'
+
+import Vue from 'vue'
+import App from './App.vue'
+import router from './router'
+import store from './store/'
+import { VueAxios } from './utils/request'
+import { ArrowsAltOutlined } from '@ant-design/icons'
+
+//在main.js中引入
+import Viewer from 'v-viewer'
+import 'viewerjs/dist/viewer.css'
+
+//Vue.use(Viewer) 默认配置写法
+Vue.use(Viewer, {
+    defaultOptions: {
+        zIndex: 9999,
+        toolbar: true
+}})
+
+// mock
+import './mock'
+
+import bootstrap from './core/bootstrap'
+import './core/use'
+import './permission' // permission control
+import './utils/filter' // global filter
+
+Vue.config.productionTip = false
+const project={
+  projectId:'',
+  doctorId:''
+}
+Vue.prototype.project = project
+// mount axios Vue.$http and this.$http
+Vue.use(VueAxios)
+
+new Vue({
+  router,
+  store,
+  created: bootstrap,
+  render: h => h(App)
+}).$mount('#app')
diff --git a/src/mock/Trend/Trend.vue b/src/mock/Trend/Trend.vue
new file mode 100644
index 0000000000..526e1cc690
--- /dev/null
+++ b/src/mock/Trend/Trend.vue
@@ -0,0 +1,41 @@
+<template>
+  <div :class="[prefixCls, reverseColor && 'reverse-color' ]">
+    <span>
+      <slot name="term"></slot>
+      <span class="item-text">
+        <slot></slot>
+      </span>
+    </span>
+    <span :class="[flag]"><a-icon :type="`caret-${flag}`"/></span>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'Trend',
+  props: {
+    prefixCls: {
+      type: String,
+      default: 'ant-pro-trend'
+    },
+    /**
+       * 上升下降标识:up|down
+       */
+    flag: {
+      type: String,
+      required: true
+    },
+    /**
+       * 颜色反转
+       */
+    reverseColor: {
+      type: Boolean,
+      default: false
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+  @import "index";
+</style>
diff --git a/src/mock/Trend/index.js b/src/mock/Trend/index.js
new file mode 100644
index 0000000000..9f14228060
--- /dev/null
+++ b/src/mock/Trend/index.js
@@ -0,0 +1,3 @@
+import Trend from './Trend.vue'
+
+export default Trend
diff --git a/src/mock/Trend/index.less b/src/mock/Trend/index.less
new file mode 100644
index 0000000000..8a3d24cfb5
--- /dev/null
+++ b/src/mock/Trend/index.less
@@ -0,0 +1,42 @@
+@import "../index";
+
+@trend-prefix-cls: ~"@{ant-pro-prefix}-trend";
+
+.@{trend-prefix-cls} {
+  display: inline-block;
+  font-size: @font-size-base;
+  line-height: 22px;
+
+  .up,
+  .down {
+    margin-left: 4px;
+    position: relative;
+    top: 1px;
+
+    i {
+      font-size: 12px;
+      transform: scale(0.83);
+    }
+  }
+
+  .item-text {
+    display: inline-block;
+    margin-left: 8px;
+    color: rgba(0,0,0,.85);
+  }
+
+  .up {
+    color: @red-6;
+  }
+  .down {
+    color: @green-6;
+    top: -1px;
+  }
+
+  &.reverse-color .up {
+    color: @green-6;
+  }
+  &.reverse-color .down {
+    color: @red-6;
+  }
+}
\ No newline at end of file
diff --git a/src/mock/Trend/index.md b/src/mock/Trend/index.md
new file mode 100644
index 0000000000..8881f0e1a2
--- /dev/null
+++ b/src/mock/Trend/index.md
@@ -0,0 +1,45 @@
+# Trend 趋势标记
+
+趋势符号,标记上升和下降趋势。通常用绿色代表“好”,红色代表“不好”,股票涨跌场景除外。
+
+
+
+引用方式:
+
+```javascript
+import Trend from '@/components/Trend'
+
+export default {
+    components: {
+        Trend
+    }
+}
+```
+
+
+
+## 代码演示  [demo](https://pro.loacg.com/test/home)
+
+```html
+<trend flag="up">5%</trend>
+```
+或
+```html
+<trend flag="up">
+    <span slot="term">工资</span>
+    5%
+</trend>
+```
+或
+```html
+<trend flag="up" term="工资">5%</trend>
+```
+
+
+## API
+
+| 参数      | 说明                                      | 类型         | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| flag | 上升下降标识:`up|down` | string | - |
+| reverseColor | 颜色反转 | Boolean | false |
+
diff --git a/src/mock/index.js b/src/mock/index.js
index 98824aed0e..f68097bb0c 100644
--- a/src/mock/index.js
+++ b/src/mock/index.js
@@ -11,6 +11,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.VUE_APP_PREVIEW === 'tr
   require('./services/other')
   require('./services/tagCloud')
   require('./services/article')
+  require('./services/element')
 
   Mock.setup({
     timeout: 800 // setter delay time
diff --git a/src/mock/services/element.js b/src/mock/services/element.js
new file mode 100644
index 0000000000..c85a982475
--- /dev/null
+++ b/src/mock/services/element.js
@@ -0,0 +1,695 @@
+import Mock from 'mockjs2'
+import { builder, getQueryParameters } from '../util'
+
+
+const list = () => {
+  return builder({
+    'second': [
+      {
+      "level": 1,
+      "answers": [
+        {
+          "basisAnswerId": 12,
+          "patientBasisMarkId": 1,
+          "elementNumValue": 1,
+          "basisElementId": 1
+        }
+      ],
+      "simple": 1,
+      "questionName": "留全血",
+      "sort": 1,
+      "type": 1,
+      "isRadio": 0,
+      "isShow": 0,
+      "basisElementId": 1,
+      "hasChild": -1,
+      "showType": 0,
+      "isWrite": -1
+    },
+    {
+      "level": 1,
+      "answers": [
+        {
+          "basisAnswerId": 13,
+          "patientBasisMarkId": 1,
+          "elementNumValue": -1,
+          "basisElementId": 2
+        }
+      ],
+      "simple": 1,
+      "questionName": "留血清",
+      "sort": 2,
+      "type": 1,
+      "isRadio": 0,
+      "isShow": 0,
+      "basisElementId": 2,
+      "hasChild": -1,
+      "showType": 0,
+      "isWrite": -1
+    },
+    {
+      "level": 1,
+      "answers": [
+        {
+          "basisAnswerId": 14,
+          "elementTextValue": "2019-01-01",
+          "patientBasisMarkId": 1,
+          "basisElementId": 3
+        }
+      ],
+      "simple": -1,
+      "questionName": "患者支扩确诊时间",
+      "sort": 3,
+      "type": 1,
+      "isRadio": 0,
+      "isShow": 0,
+      "basisElementId": 3,
+      "hasChild": -1,
+      "showType": 0,
+      "isWrite": 1
+    },
+    {
+      "level": 1,
+      "answers": [],
+      "childList": [
+        {
+          "level": 2,
+          "answers": [
+            {
+              "basisAnswerId": 15,
+              "patientBasisMarkId": 1,
+              "elementNumValue": 1,
+              "basisElementId": 5
+            }
+          ],
+          "simple": -1,
+          "questionName": "咳嗽",
+          "sort": 1,
+          "type": 2,
+          "isRadio": 0,
+          "parentId": 4,
+          "isShow": 0,
+          "basisElementId": 5,
+          "hasChild": -1,
+          "showType": 0,
+          "isWrite": -1
+        },
+        {
+          "level": 2,
+          "answers": [
+            {
+              "basisAnswerId": 16,
+              "elementTextValue": "100",
+              "patientBasisMarkId": 1,
+              "elementNumValue": 1,
+              "basisElementId": 6
+            }
+          ],
+          "simple": -1,
+          "questionName": "咳痰",
+          "sort": 1,
+          "type": 2,
+          "isRadio": 0,
+          "parentId": 4,
+          "isShow": 0,
+          "childEleName": "",
+          "unit": "ml/日",
+          "basisElementId": 6,
+          "hasChild": -1,
+          "showType": 0,
+          "isWrite": 1
+        },
+        {
+          "level": 2,
+          "answers": [],
+          "simple": -1,
+          "questionName": "痰血",
+          "sort": 1,
+          "type": 2,
+          "isRadio": 0,
+          "parentId": 4,
+          "isShow": 0,
+          "childEleName": "",
+          "unit": "",
+          "basisElementId": 7,
+          "hasChild": -1,
+          "showType": 0,
+          "isWrite": -1
+        },
+        {
+          "level": 2,
+          "answers": [],
+          "simple": -1,
+          "questionName": "咯血",
+          "sort": 1,
+          "type": 2,
+          "isRadio": 0,
+          "parentId": 4,
+          "isShow": 0,
+          "childEleName": "",
+          "unit": "ml/日",
+          "basisElementId": 8,
+          "hasChild": -1,
+          "showType": 0,
+          "isWrite": 1
+        }
+      ],
+      "simple": -1,
+      "questionName": "主要临床症状:有无下列症状:(多选,勾选)",
+      "sort": 4,
+      "type": 1,
+      "isRadio": -1,
+      "isShow": 0,
+      "basisElementId": 4,
+      "hasChild": 1,
+      "showType": 1,
+      "isWrite": -1
+    }
+    ],
+    'seven': [
+      {
+      "basisElementId": 9,
+      "childEleName": "",
+      "childList": [
+        {
+          "basisElementId": 10,
+          "childEleName": "",
+          "childList": [
+            {
+              "basisElementId": 11,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 10,
+              "questionName": "升高",
+              "showType": 0,
+              "simple": -1,
+              "sort": 1,
+              "type": 2,
+              "unit": ""
+            },
+            {
+              "basisElementId": 12,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 10,
+              "questionName": "正常",
+              "showType": 0,
+              "simple": -1,
+              "sort": 2,
+              "type": 2,
+              "unit": ""
+            },
+            {
+              "basisElementId": 13,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 10,
+              "questionName": "未测",
+              "showType": 0,
+              "simple": -1,
+              "sort": 3,
+              "type": 2,
+              "unit": ""
+            }
+          ],
+          "hasChild": 1,
+          "isRadio": 1,
+          "isShow": 0,
+          "isWrite": 1,
+          "level": 2,
+          "parentId": 9,
+          "questionName": "血嗜酸里细胞绝对值",
+          "showType": 1,
+          "simple": -1,
+          "sort": 1,
+          "type": 1,
+          "unit": "*10^9/L"
+        },
+        {
+          "basisElementId": 14,
+          "childEleName": "",
+          "childList": [
+            {
+              "basisElementId": 15,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 14,
+              "questionName": "升高",
+              "showType": 0,
+              "simple": -1,
+              "sort": 1,
+              "type": 2,
+              "unit": ""
+            },
+            {
+              "basisElementId": 16,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 14,
+              "questionName": "正常",
+              "showType": 0,
+              "simple": -1,
+              "sort": 1,
+              "type": 2,
+              "unit": ""
+            },
+            {
+              "basisElementId": 17,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 14,
+              "questionName": "未测",
+              "showType": 0,
+              "simple": -1,
+              "sort": 2,
+              "type": 2,
+              "unit": ""
+            }
+          ],
+          "hasChild": 1,
+          "isRadio": 1,
+          "isShow": 0,
+          "isWrite": 1,
+          "level": 2,
+          "parentId": 9,
+          "questionName": "血总IgE",
+          "showType": 1,
+          "simple": -1,
+          "sort": 2,
+          "type": 1,
+          "unit": "IU/mL"
+        },
+        {
+          "basisElementId": 18,
+          "childEleName": "",
+          "childList": [
+            {
+              "basisElementId": 19,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 18,
+              "questionName": "升高",
+              "showType": 0,
+              "simple": -1,
+              "sort": 1,
+              "type": 2,
+              "unit": ""
+            },
+            {
+              "basisElementId": 20,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 18,
+              "questionName": "正常",
+              "showType": 0,
+              "simple": -1,
+              "sort": 2,
+              "type": 2,
+              "unit": ""
+            }
+          ],
+          "hasChild": 1,
+          "isRadio": 1,
+          "isShow": 0,
+          "isWrite": 1,
+          "level": 2,
+          "parentId": 9,
+          "questionName": "曲霉特异IgE",
+          "showType": 1,
+          "simple": -1,
+          "sort": 3,
+          "type": 1,
+          "unit": "IU/mL"
+        },
+        {
+          "basisElementId": 21,
+          "childEleName": "",
+          "childList": [
+            {
+              "basisElementId": 22,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 21,
+              "questionName": "升高",
+              "showType": 0,
+              "simple": -1,
+              "sort": 1,
+              "type": 2,
+              "unit": ""
+            },
+            {
+              "basisElementId": 23,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 21,
+              "questionName": "正常",
+              "showType": 0,
+              "simple": -1,
+              "sort": 2,
+              "type": 2,
+              "unit": ""
+            },
+            {
+              "basisElementId": 24,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 21,
+              "questionName": "未测",
+              "showType": 0,
+              "simple": -1,
+              "sort": 3,
+              "type": 2,
+              "unit": ""
+            }
+          ],
+          "hasChild": 1,
+          "isRadio": 1,
+          "isShow": 0,
+          "isWrite": 1,
+          "level": 2,
+          "parentId": 9,
+          "questionName": "曲霉特异IgG",
+          "showType": 1,
+          "simple": -1,
+          "sort": 4,
+          "type": 1,
+          "unit": "IU/mL"
+        },
+        {
+          "basisElementId": 25,
+          "childEleName": "",
+          "childList": [
+            {
+              "basisElementId": 26,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 25,
+              "questionName": "阳性",
+              "showType": 0,
+              "simple": -1,
+              "sort": 1,
+              "type": 2,
+              "unit": ""
+            },
+            {
+              "basisElementId": 27,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 25,
+              "questionName": "正常",
+              "showType": 0,
+              "simple": -1,
+              "sort": 2,
+              "type": 2,
+              "unit": ""
+            },
+            {
+              "basisElementId": 28,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 25,
+              "questionName": "未测",
+              "showType": 0,
+              "simple": -1,
+              "sort": 3,
+              "type": 2,
+              "unit": ""
+            }
+          ],
+          "hasChild": 1,
+          "isRadio": 1,
+          "isShow": 0,
+          "isWrite": -1,
+          "level": 2,
+          "parentId": 9,
+          "questionName": "曲霉皮肤点刺试验",
+          "showType": 1,
+          "simple": -1,
+          "sort": 5,
+          "type": 1,
+          "unit": ""
+        },
+        {
+          "basisElementId": 29,
+          "childEleName": "",
+          "childList": [
+            {
+              "basisElementId": 30,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 29,
+              "questionName": "有",
+              "showType": 0,
+              "simple": -1,
+              "sort": 1,
+              "type": 2,
+              "unit": ""
+            },
+            {
+              "basisElementId": 31,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 29,
+              "questionName": "无",
+              "showType": 0,
+              "simple": -1,
+              "sort": 2,
+              "type": 2,
+              "unit": ""
+            },
+            {
+              "basisElementId": 32,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 29,
+              "questionName": "未测",
+              "showType": 0,
+              "simple": -1,
+              "sort": 3,
+              "type": 2,
+              "unit": ""
+            }
+          ],
+          "hasChild": 1,
+          "isRadio": 1,
+          "isShow": 0,
+          "isWrite": -1,
+          "level": 2,
+          "parentId": 9,
+          "questionName": "胸部CT有无中心性支扩",
+          "showType": 1,
+          "simple": -1,
+          "sort": 6,
+          "type": 1,
+          "unit": ""
+        }
+      ],
+      "hasChild": 1,
+      "isRadio": 0,
+      "isShow": 1,
+      "isWrite": -1,
+      "level": 1,
+      "questionName": "ABPA",
+      "showType": 2,
+      "simple": 1,
+      "sort": 1,
+      "type": 1
+    }
+    ],
+    'ten': [
+    {
+      "basisElementId": 33,
+      "childEleName": "",
+      "childList": [
+        {
+          "basisElementId": 34,
+          "childEleName": "",
+          "childList": [
+            {
+              "basisElementId": 35,
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 34,
+              "questionName": "阿奇霉素",
+              "showType": 1,
+              "simple": -1,
+              "sort": 1,
+              "type": 2
+            },
+            {
+              "basisElementId": 36,
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 34,
+              "questionName": "克拉霉素",
+              "showType": 0,
+              "simple": -1,
+              "sort": 2,
+              "type": 2
+            },
+            {
+              "basisElementId": 37,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 34,
+              "questionName": "红霉素",
+              "showType": 0,
+              "simple": -1,
+              "sort": 3,
+              "type": 2,
+              "unit": ""
+            },
+            {
+              "basisElementId": 38,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": -1,
+              "level": 3,
+              "parentId": 34,
+              "questionName": "青霉素",
+              "showType": 0,
+              "simple": -1,
+              "sort": 4,
+              "type": 2,
+              "unit": ""
+            },
+            {
+              "basisElementId": 39,
+              "childEleName": "",
+              "hasChild": -1,
+              "isRadio": 0,
+              "isShow": 0,
+              "isWrite": 1,
+              "level": 3,
+              "parentId": 34,
+              "questionName": "其他",
+              "showType": 0,
+              "simple": -1,
+              "sort": 5,
+              "type": 2,
+              "unit": ""
+            }
+          ],
+          "hasChild": 1,
+          "isRadio": 1,
+          "isShow": 0,
+          "isWrite": -1,
+          "level": 2,
+          "parentId": 33,
+          "questionName": "周期性抗生素治疗",
+          "showType": 1,
+          "simple": -1,
+          "sort": 1,
+          "type": 1
+        },
+        {
+          "basisElementId": 40,
+          "hasChild": -1,
+          "isRadio": 0,
+          "isShow": 0,
+          "isWrite": 1,
+          "level": 2,
+          "parentId": 33,
+          "questionName": "吸入/雾化抗生素药物名称:",
+          "showType": 0,
+          "simple": -1,
+          "sort": 2,
+          "type": 1
+        }
+      ],
+      "hasChild": 1,
+      "isRadio": -1,
+      "isShow": 1,
+      "isWrite": -1,
+      "level": 1,
+      "questionName": "有规律的呼吸疾病药物治疗",
+      "showType": 2,
+      "simple": 1,
+      "sort": 1,
+      "type": 1
+    }
+    ]
+  })
+}
+
+Mock.mock(/\/element\/list/, 'get', list)
diff --git a/src/mock/services/manage.js b/src/mock/services/manage.js
index 10181ece26..e1bfaadf7d 100644
--- a/src/mock/services/manage.js
+++ b/src/mock/services/manage.js
@@ -22,6 +22,21 @@ const serverList = (options) => {
       description: '这是一段描述',
       callNo: Mock.mock('@integer(1, 999)'),
       status: Mock.mock('@integer(0, 3)'),
+      pros:[
+        {
+          id:1,
+          name:'基线',
+          percent:100,
+        },{
+          id:2,
+          name:"访视",
+          percent:40
+        },{
+          id:3,
+          name:"访视",
+          percent:0
+          }
+      ],
       updatedAt: Mock.mock('@datetime'),
       editable: false
     })
diff --git a/src/mock/services/other.js b/src/mock/services/other.js
index 83a5792992..c66e21533f 100644
--- a/src/mock/services/other.js
+++ b/src/mock/services/other.js
@@ -2,82 +2,55 @@ import Mock from 'mockjs2'
 import { builder } from '../util'
 
 const orgTree = () => {
-  return builder([{
-    'key': 'key-01',
-    'title': '研发中心',
-    'icon': 'mail',
-    'children': [{
-      'key': 'key-01-01',
-      'title': '后端组',
-      'icon': null,
-      'group': true,
-      children: [{
-        'key': 'key-01-01-01',
-        'title': 'JAVA',
-        'icon': null
-      },
-      {
-        'key': 'key-01-01-02',
-        'title': 'PHP',
-        'icon': null
-      },
-      {
-        'key': 'key-01-01-03',
-        'title': 'Golang',
-        'icon': null
-      }
-      ]
-    }, {
-      'key': 'key-01-02',
-      'title': '前端组',
-      'icon': null,
-      'group': true,
-      children: [{
-        'key': 'key-01-02-01',
-        'title': 'React',
-        'icon': null
-      },
-      {
-        'key': 'key-01-02-02',
-        'title': 'Vue',
-        'icon': null
-      },
-      {
-        'key': 'key-01-02-03',
-        'title': 'Angular',
-        'icon': null
-      }
-      ]
-    }]
-  }, {
-    'key': 'key-02',
-    'title': '财务部',
-    'icon': 'dollar',
-    'children': [{
-      'key': 'key-02-01',
-      'title': '会计核算',
-      'icon': null
-    }, {
-      'key': 'key-02-02',
-      'title': '成本控制',
-      'icon': null
-    }, {
-      'key': 'key-02-03',
-      'title': '内部控制',
-      'icon': null,
-      'children': [{
-        'key': 'key-02-03-01',
-        'title': '财务制度建设',
-        'icon': null
-      },
-      {
-        'key': 'key-02-03-02',
-        'title': '会计核算',
-        'icon': null
-      }
-      ]
-    }]
-  }])
+  return builder([
+    {
+        "title": "支扩病史资料",
+        "percentage": "100%",
+        "key": "key-01"
+    },
+    {
+        "title": "体格检查",
+        "percentage": "40%",
+        "key": "key-02"
+    },
+    {
+        "title": "辅助检查",
+        "percentage": "",
+        "key": "key-03",
+        "children": [
+            {
+                "title": "胸部影像学",
+                "percentage": "20%",
+                "key": "key-03-01"
+            },
+            {
+                "title": "病原微生物检查",
+                "percentage": "",
+                "key": "key-03-02"
+            },
+            {
+                "title": "病因学相关检查",
+                "percentage": "",
+                "key": "key-03-03"
+            },
+            {
+                "title": "肺功能相关检查",
+                "percentage": "",
+                "key": "key-03-04"
+            },
+            {
+                "title": "心脏彩超",
+                "percentage": "",
+                "key": "key-03-05"
+            },
+            {
+                "title": "心脏彩超",
+                "percentage": "",
+                "key": "key-03-06"
+            }
+        ]
+    }
+])
 }
 
 const role = () => {
diff --git a/src/mock/services/user.js b/src/mock/services/user.js
index 6f25223b5b..5baa1a52aa 100644
--- a/src/mock/services/user.js
+++ b/src/mock/services/user.js
@@ -3,23 +3,6 @@ import { builder } from '../util'
 
 const info = (options) => {
   console.log('options', options)
-  const userInfo = {
-    'id': '4291d7da9005377ec9aec4a71ea837f',
-    'name': '天野远子',
-    'username': 'admin',
-    'password': '',
-    'avatar': '/avatar2.jpg',
-    'status': 1,
-    'telephone': '',
-    'lastLoginIp': '27.154.74.117',
-    'lastLoginTime': 1534837621348,
-    'creatorId': 'admin',
-    'createTime': 1497160610259,
-    'merchantCode': 'TLif2btpzg079h15bk',
-    'deleted': 0,
-    'roleId': 'admin',
-    'role': {}
-  }
   // role
   const roleObj = {
     'id': 'admin',
diff --git a/src/permission.js b/src/permission.js
index cdd178353f..50183df0be 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -10,50 +10,91 @@ import { ACCESS_TOKEN } from '@/store/mutation-types'
 
 NProgress.configure({ showSpinner: false }) // NProgress Configuration
 
-const whiteList = ['login', 'register', 'registerResult'] // no redirect whitelist
+const whiteList = ['login', 'register', 'registerResult', 'Workplace'] // no redirect whitelist
 
 router.beforeEach((to, from, next) => {
   NProgress.start() // start progress bar
   to.meta && (typeof to.meta.title !== 'undefined' && setDocumentTitle(`${to.meta.title} - ${domTitle}`))
-  if (Vue.ls.get(ACCESS_TOKEN)) {
+  if (Vue.ls.get(ACCESS_TOKEN)) { // 如果已登录,则有token
     /* has token */
-    if (to.path === '/user/login') {
-      next({ path: '/dashboard/workplace' })
+    if (to.path === '/user/login') { // 如果没有点击退出登录却返回了登录页,则重定向回首页
+      next({ path: '/dashboard/analysis' })
       NProgress.done()
     } else {
       if (store.getters.roles.length === 0) {
-        store
-          .dispatch('GetInfo')
-          .then(res => {
-            const roles = res.result && res.result.role
-            store.dispatch('GenerateRoutes', { roles }).then(() => {
-              // 根据roles权限生成可访问的路由表
-              // 动态添加可访问路由表
-              router.addRoutes(store.getters.addRouters)
-              const redirect = decodeURIComponent(from.query.redirect || to.path)
-              if (to.path === redirect) {
-                // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
-                next({ ...to, replace: true })
-              } else {
-                // 跳转到目的路由
-                next({ path: redirect })
-              }
-            })
+        let permissionList = Vue.ls.get(ACCESS_TOKEN).permissionList;
+        const arr = []
+        permissionList.forEach(item => {
+          arr.push(item.name)
+        })
+        store.dispatch('GetInfo', arr).then(res => {
+          store.dispatch('RenderRoutes', arr).then(() => {
+            router.addRoutes(store.getters.addRouters)
+            const redirect = decodeURIComponent(from.query.redirect || to.path)
+            if (to.path === redirect) {
+              // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
+              next({ ...to, replace: true })
+            } else {
+              // 跳转到目的路由
+              next({ path: redirect })
+            }
           })
-          .catch(() => {
-            notification.error({
-              message: '错误',
-              description: '请求用户信息失败,请重试'
-            })
-            store.dispatch('Logout').then(() => {
-              next({ path: '/user/login', query: { redirect: to.fullPath } })
-            })
+        })
+        .catch(() => {
+          notification.error({
+            message: '错误',
+            description: '请求用户信息失败,请重试'
           })
+          store.dispatch('Logout').then(() => {
+            next({ path: '/user/login', query: { redirect: to.fullPath } })
+          })
+        })
       } else {
         next()
       }
+    //   if (store.getters.roles.length === 0) {
+    //     var role = typeof Vue.ls.get(ACCESS_TOKEN).centerId !== 'undefined' ? ['center'] : ['group']
+    //     store
+    //       .dispatch('GetInfo', role)
+    //       .then(res => {
+    //         store.dispatch('GenerateRoutes', role).then(() => {
+    //           // 根据roles权限生成可访问的路由表
+    //           // 动态添加可访问路由表
+    //           router.addRoutes(store.getters.addRouters)
+    //           const redirect = decodeURIComponent(from.query.redirect || to.path)
+    //           if (to.path === redirect) {
+    //             // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
+    //             next({
+    //               ...to,
+    //               replace: true
+    //             })
+    //           } else {
+    //             // 跳转到目的路由
+    //             next({
+    //               path: redirect
+    //             })
+    //           }
+    //         })
+    //       })
+    //       .catch(() => {
+    //         notification.error({
+    //           message: '错误',
+    //           description: '请求用户信息失败,请重试'
+    //         })
+    //         store.dispatch('Logout').then(() => {
+    //           next({
+    //             path: '/user/login',
+    //             query: {
+    //               redirect: to.fullPath
+    //             }
+    //           })
+    //         })
+    //       })
+    //   } else {
+    //     next()
+    //   }
     }
-  } else {
+  } else { // 否则退出登录,清除token
     if (whiteList.includes(to.name)) {
       // 在免登录白名单,直接进入
       next()
@@ -66,4 +107,4 @@ router.beforeEach((to, from, next) => {
 
 router.afterEach(() => {
   NProgress.done() // finish progress bar
-})
+})
\ No newline at end of file
diff --git a/src/router/index.js b/src/router/index.js
index f0ba074d12..3c0bd7320a 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -1,6 +1,6 @@
 import Vue from 'vue'
 import Router from 'vue-router'
-import { constantRouterMap } from '@/config/router.config'
+import { constantRouterMap  } from '@/config/router.config'
 
 Vue.use(Router)
 
diff --git a/src/store/getters.js b/src/store/getters.js
index 8805d33a49..a82236c5c2 100644
--- a/src/store/getters.js
+++ b/src/store/getters.js
@@ -9,7 +9,8 @@ const getters = {
   roles: state => state.user.roles,
   userInfo: state => state.user.info,
   addRouters: state => state.permission.addRouters,
-  multiTab: state => state.app.multiTab
+  multiTab: state => state.app.multiTab,
+  messageNum: state => state.app.messageNum
 }
 
 export default getters
diff --git a/src/store/modules/app.js b/src/store/modules/app.js
index 373a97ebf3..fd45227a58 100644
--- a/src/store/modules/app.js
+++ b/src/store/modules/app.js
@@ -9,7 +9,8 @@ import {
   DEFAULT_FIXED_SIDEMENU,
   DEFAULT_FIXED_HEADER_HIDDEN,
   DEFAULT_CONTENT_WIDTH_TYPE,
-  DEFAULT_MULTI_TAB
+  DEFAULT_MULTI_TAB,
+  DEFAULT_MESSAGE_NUM
 } from '@/store/mutation-types'
 
 const app = {
@@ -24,7 +25,8 @@ const app = {
     autoHideHeader: false,
     color: null,
     weak: false,
-    multiTab: true
+    multiTab: true,
+    messageNum: ''
   },
   mutations: {
     SET_SIDEBAR_TYPE: (state, type) => {
@@ -74,6 +76,10 @@ const app = {
     TOGGLE_MULTI_TAB: (state, bool) => {
       Vue.ls.set(DEFAULT_MULTI_TAB, bool)
       state.multiTab = bool
+    },
+    TOGGLE_MESSAGE_NUM: (state, num) => {
+      Vue.ls.set(DEFAULT_MESSAGE_NUM, num)
+      state.messageNum = num
     }
   },
   actions: {
@@ -115,6 +121,9 @@ const app = {
     },
     ToggleMultiTab ({ commit }, bool) {
       commit('TOGGLE_MULTI_TAB', bool)
+    },
+    ToggleMessageNum ({ commit }, num) {
+      commit('TOGGLE_MESSAGE_NUM', num)
     }
   }
 }
diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js
index bb39b02427..8e5172241e 100644
--- a/src/store/modules/permission.js
+++ b/src/store/modules/permission.js
@@ -1,4 +1,4 @@
-import { asyncRouterMap, constantRouterMap } from '@/config/router.config'
+import { asyncRouterMap, /*constantRouterMap*/ } from '@/config/router.config'
 
 /**
  * 过滤账户是否拥有某一个权限,并将菜单从加载列表移除
@@ -30,8 +30,8 @@ function hasPermission (permission, route) {
  */
 // eslint-disable-next-line
 function hasRole(roles, route) {
-  if (route.meta && route.meta.roles) {
-    return route.meta.roles.includes(roles.id)
+  if (route.meta && route.meta.permission) {
+    return route.meta.permission.includes(roles)
   } else {
     return true
   }
@@ -39,7 +39,7 @@ function hasRole(roles, route) {
 
 function filterAsyncRouter (routerMap, roles) {
   const accessedRouters = routerMap.filter(route => {
-    if (hasPermission(roles.permissionList, route)) {
+    if (hasPermission(roles, route)) {
       if (route.children && route.children.length) {
         route.children = filterAsyncRouter(route.children, roles)
       }
@@ -52,20 +52,26 @@ function filterAsyncRouter (routerMap, roles) {
 
 const permission = {
   state: {
-    routers: constantRouterMap,
+    // routers: constantRouterMap,
     addRouters: []
   },
   mutations: {
     SET_ROUTERS: (state, routers) => {
       state.addRouters = routers
-      state.routers = constantRouterMap.concat(routers)
+    //   state.routers = constantRouterMap.concat(routers)
     }
   },
   actions: {
+    RenderRoutes ({ commit }, data) {
+      return new Promise(resolve => {
+        const accessedRouters = filterRoute(asyncRouterMap, data)
+        commit('SET_ROUTERS', accessedRouters)
+        resolve()
+      })
+    },
     GenerateRoutes ({ commit }, data) {
       return new Promise(resolve => {
-        const { roles } = data
-        const accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
+        const accessedRouters = filterAsyncRouter(asyncRouterMap, data)
         commit('SET_ROUTERS', accessedRouters)
         resolve()
       })
@@ -73,4 +79,42 @@ const permission = {
   }
 }
 
+function hasMetaTitle(route, arr) {
+  if (route.meta && route.meta.title) {
+    return arr.some(role => route.meta.title === role )
+    // if(arr.includes(route.meta.title)) {
+    //     return true
+    // }
+    // return false
+  } else {
+    return true
+  }
+}
+
+function filterRoute(routeMap, arr) {
+  const res = []
+  routeMap.forEach(route => {
+    const tmp = { ...route }
+    if (hasMetaTitle(tmp, arr)) {
+      if (tmp.children) {
+        tmp.children = filterRoute(tmp.children, arr) // 闭包查找所有该roles下的路由
+      }
+      res.push(tmp)
+    }
+  })
+  return res
+
+  // let accessedRouters = routeMap.filter(route => {
+  //     if (hasMetaTitle(route, arr)) {
+  //         if(route.children) {
+  //             route.children = filterRoute(route.children, arr)
+  //         }
+  //         return true
+  //     }
+  //     return false
+  // })
+  // return accessedRouters
+}
+
+
 export default permission
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index c3f998888b..6f00d3a66b 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -34,59 +34,41 @@ const user = {
 
   actions: {
     // 登录
-    Login ({ commit }, userInfo) {
+    Login({ commit }, userInfo) {
+      // console.log('login enter')
       return new Promise((resolve, reject) => {
+        // console.log('login promise')
         login(userInfo).then(response => {
-          const result = response.result
-          Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000)
-          commit('SET_TOKEN', result.token)
-          resolve()
-        }).catch(error => {
-          reject(error)
+          if(!response.data){
+            reject(response)
+          }else{
+            const result = response.data
+            Vue.ls.set(ACCESS_TOKEN, result, 2 * 60 * 60 * 1000) //2小时过期
+            commit('SET_TOKEN', result)
+            resolve()
+          }         
+        }).catch(err => {
+          reject(err)
         })
       })
     },
 
     // 获取用户信息
-    GetInfo ({ commit }) {
+    GetInfo({ commit } ,role) {
       return new Promise((resolve, reject) => {
-        getInfo().then(response => {
-          const result = response.result
-
-          if (result.role && result.role.permissions.length > 0) {
-            const role = result.role
-            role.permissions = result.role.permissions
-            role.permissions.map(per => {
-              if (per.actionEntitySet != null && per.actionEntitySet.length > 0) {
-                const action = per.actionEntitySet.map(action => { return action.action })
-                per.actionList = action
-              }
-            })
-            role.permissionList = role.permissions.map(permission => { return permission.permissionId })
-            commit('SET_ROLES', result.role)
-            commit('SET_INFO', result)
-          } else {
-            reject(new Error('getInfo: roles must be a non-null array !'))
-          }
-
-          commit('SET_NAME', { name: result.name, welcome: welcome() })
-          commit('SET_AVATAR', result.avatar)
-
-          resolve(response)
-        }).catch(error => {
-          reject(error)
-        })
+        commit('SET_ROLES', role)
+        resolve()
       })
     },
 
     // 登出
-    Logout ({ commit, state }) {
+    Logout({ commit }) {
       return new Promise((resolve) => {
         commit('SET_TOKEN', '')
         commit('SET_ROLES', [])
         Vue.ls.remove(ACCESS_TOKEN)
 
-        logout(state.token).then(() => {
+        logout().then(() => {
           resolve()
         }).catch(() => {
           resolve()
@@ -97,4 +79,4 @@ const user = {
   }
 }
 
-export default user
+export default user
\ No newline at end of file
diff --git a/src/store/mutation-types.js b/src/store/mutation-types.js
index 2cf2dbb9f0..9e14149eb2 100644
--- a/src/store/mutation-types.js
+++ b/src/store/mutation-types.js
@@ -9,6 +9,8 @@ export const DEFAULT_FIXED_SIDEMENU = 'DEFAULT_FIXED_SIDEMENU'
 export const DEFAULT_FIXED_HEADER_HIDDEN = 'DEFAULT_FIXED_HEADER_HIDDEN'
 export const DEFAULT_CONTENT_WIDTH_TYPE = 'DEFAULT_CONTENT_WIDTH_TYPE'
 export const DEFAULT_MULTI_TAB = 'DEFAULT_MULTI_TAB'
+export const ROLE_TYPE = 'ROLE_TYPE'
+export const DEFAULT_MESSAGE_NUM = 'DEFAULT_MESSAGE_NUM'
 
 export const CONTENT_WIDTH_TYPE = {
   Fluid: 'Fluid',
diff --git a/src/utils/domUtil.js b/src/utils/domUtil.js
index 83cc556f08..b876bd441e 100644
--- a/src/utils/domUtil.js
+++ b/src/utils/domUtil.js
@@ -16,4 +16,4 @@ export const setDocumentTitle = function (title) {
   }
 }
 
-export const domTitle = 'Ant Design Pro'
+export const domTitle = '支扩中国'
diff --git a/src/utils/quill-video.js b/src/utils/quill-video.js
new file mode 100644
index 0000000000..74901df93a
--- /dev/null
+++ b/src/utils/quill-video.js
@@ -0,0 +1,49 @@
+import { Quill } from 'vue-quill-editor'
+const BlockEmbed = Quill.import('blots/block/embed')
+const Link = Quill.import('formats/link')
+const ATTRIBUTES = ['height','width']
+class Video extends BlockEmbed {
+	static create (value) {
+		let node = super.create()
+		node.setAttribute('controls','controls')
+		node.setAttribute('playsinline', 'true')
+		node.setAttribute('webkit-playsinline', 'true')
+		node.setAttribute('type', 'video/*')
+		node.setAttribute('src', this.sanitize(value))
+		return node
+	}
+	static formats (domNode) {
+		return ATTRIBUTES.reduce((formats, attribute) => {
+			if(domNode.hasAttribute(attribute)) {
+				formats[attribute] = domNode.getAttribute(attribute)
+			}
+			return formats
+		}, {})
+	}
+	static sanitize (url) {
+		return Link.sanitize(url)
+	}
+	static value (domNode) {
+		return domNode.getAttribute('src')
+	}
+	format (name, value) {
+		if(ATTRIBUTES.indexOf(name) > -1) {
+			if(value) {
+				this.domNode.setAttribute(name, value)
+			} else {
+				this.domNode.removeAttribute(name)
+			}
+		} else {
+			super.format(name, value)
+		}
+	}
+	html() {
+		const { video } = this.value()
+		return `<a href="${video}" rel="external nofollow">${video}</a>`
+	}
+}
+
+Video.blotName = 'video'
+Video.className = 'ql-video'
+Video.tagName = 'video'
+export default Video
\ No newline at end of file
diff --git a/src/utils/quillConfig.js b/src/utils/quillConfig.js
new file mode 100644
index 0000000000..1c788695b4
--- /dev/null
+++ b/src/utils/quillConfig.js
@@ -0,0 +1,180 @@
+/*富文本编辑图片上传配置*/
+const uploadConfig = {
+  action: process.env.VUE_APP_API_UPLOAD_URL, // 必填参数 图片上传地址
+  attachsPrefix: process.env.VUE_APP_API_VIEW_PIC_URL,
+  methods: 'POST', // 必填参数 图片上传方式
+  name: 'file', // 必填参数 文件的参数名
+  token: '', // 可选参数 如果需要token验证,假设你的token有存放在sessionStorage
+  size: 1024, // 可选参数   图片大小,单位为Kb, 1M = 1024Kb
+  accept: 'image/png, image/jpeg', // 可选 可上传的图片格式
+  acceptVideo: 'video/*'
+};
+
+// toolbar工具栏的工具选项(默认展示全部)
+const toolbarOptions = [
+  ['bold', 'italic', 'underline', 'strike'], // toggled buttons
+  ['blockquote', 'code-block'],
+  [{
+    'header': 1
+  }, {
+    'header': 2
+  }], // custom button values
+  [{
+    'list': 'ordered'
+  }, {
+    'list': 'bullet'
+  }],
+  [{
+    'script': 'sub'
+  }, {
+    'script': 'super'
+  }], // superscript/subscript
+  [{
+    'indent': '-1'
+  }, {
+    'indent': '+1'
+  }], // outdent/indent
+  [{
+    'direction': 'rtl'
+  }], // text direction
+
+  [{
+    'size': ['small', false, 'large', 'huge']
+  }], // custom dropdown
+  [{
+    'header': [1, 2, 3, 4, 5, 6, false]
+  }],
+
+  [{
+    'color': []
+  }, {
+    'background': []
+  }], // dropdown with defaults from theme
+  [{
+    'font': []
+  }],
+  [{
+    'align': []
+  }],
+  ['clean'], // remove formatting button
+  ['link', 'image', 'video']
+]
+const handlers = {
+  image: function image() {
+    var self = this;
+
+    var fileInput = this.container.querySelector('input.ql-image[type=file]');
+    if (fileInput === null) {
+      fileInput = document.createElement('input');
+      fileInput.setAttribute('type', 'file');
+      // 设置图片参数名
+      if (uploadConfig.name) {
+        fileInput.setAttribute('name', uploadConfig.name);
+      }
+      // 可设置上传图片的格式
+      fileInput.setAttribute('accept', uploadConfig.accept);
+      fileInput.classList.add('ql-image');
+      // 监听选择文件
+      fileInput.addEventListener('change', function () {
+        // 创建formData
+        var formData = new FormData();
+        formData.append(uploadConfig.name, fileInput.files[0]);
+        // 如果需要token且存在token
+        if (uploadConfig.token) {
+          formData.append('token', uploadConfig.token)
+        }
+        // 图片上传
+        var xhr = new XMLHttpRequest();
+        xhr.open(uploadConfig.methods, uploadConfig.action, true);
+        // 上传数据成功,会触发
+        xhr.onload = function (e) {
+          if (xhr.status === 200) {
+            var res = JSON.parse(xhr.responseText);
+            let length = self.quill.getSelection(true).index;
+            //这里很重要,你图片上传成功后,img的src需要在这里添加,res.path就是你服务器返回的图片链接。            
+            self.quill.insertEmbed(length, 'image', uploadConfig.attachsPrefix + res.fileName);
+            self.quill.setSelection(length + 1)
+          }
+          fileInput.value = ''
+        };
+        // 开始上传数据
+        xhr.upload.onloadstart = function (e) {
+          fileInput.value = ''
+        };
+        // 当发生网络异常的时候会触发,如果上传数据的过程还未结束
+        xhr.upload.onerror = function (e) {};
+        // 上传数据完成(成功或者失败)时会触发
+        xhr.upload.onloadend = function (e) {
+          // console.log('上传结束')
+        };
+        xhr.send(formData)
+      });
+      debugger
+      this.container.appendChild(fileInput);
+    }
+    fileInput.click();
+  },
+  video: function video() {
+    var self = this;
+
+    var fileInput = this.container.querySelector('input.ql-video[type=file]');
+    if (fileInput === null) {
+      fileInput = document.createElement('input');
+      fileInput.setAttribute('type', 'file');
+      // 设置图片参数名
+      if (uploadConfig.name) {
+        fileInput.setAttribute('name', uploadConfig.name);
+      }
+      // 可设置上传图片的格式
+      fileInput.setAttribute('accept', uploadConfig.acceptVideo);
+      fileInput.classList.add('ql-video');
+      // 监听选择文件
+      fileInput.addEventListener('change', function () {
+        // 创建formData
+        var formData = new FormData();
+        formData.append(uploadConfig.name, fileInput.files[0]);
+        // 如果需要token且存在token
+        if (uploadConfig.token) {
+          formData.append('token', uploadConfig.token)
+        }
+        // 视频上传
+        var xhr = new XMLHttpRequest();
+        xhr.open(uploadConfig.methods, uploadConfig.action, true);
+        // 上传数据成功,会触发
+        xhr.onload = function (e) {
+          if (xhr.status === 200) {
+            var res = JSON.parse(xhr.responseText);
+            let length = self.quill.getSelection(true).index;
+            //这里很重要,你视频上传成功后,img的src需要在这里添加,res.path就是你服务器返回的图片链接。            
+            self.quill.insertEmbed(length, 'video', uploadConfig.attachsPrefix + res.fileName);
+            self.quill.setSelection(length + 1)
+          }
+          fileInput.value = ''
+        };
+        // 开始上传数据
+        xhr.upload.onloadstart = function (e) {
+          fileInput.value = ''
+        };
+        // 当发生网络异常的时候会触发,如果上传数据的过程还未结束
+        xhr.upload.onerror = function (e) {};
+        // 上传数据完成(成功或者失败)时会触发
+        xhr.upload.onloadend = function (e) {
+          // console.log('上传结束')
+        };
+        xhr.send(formData)
+      });
+      this.container.appendChild(fileInput);
+    }
+    fileInput.click();
+  }
+};
+
+export default {
+  placeholder: '请输入内容',
+  modules: {
+    toolbar: {
+      container: toolbarOptions, // 工具栏选项
+      handlers: handlers // 事件重写
+    }
+  }
+};
\ No newline at end of file
diff --git a/src/utils/request.js b/src/utils/request.js
index 8d23f9b217..e98a3f6cb2 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -6,9 +6,14 @@ import { VueAxios } from './axios'
 import { ACCESS_TOKEN } from '@/store/mutation-types'
 
 // 创建 axios 实例
+console.log(process.env.NODE_ENV)
+console.log(process.env.NODE_ENV === 'production')
+console.log(process.env.NODE_ENV === 'production' ? '' : '/api')
 const service = axios.create({
-  baseURL: process.env.VUE_APP_API_BASE_URL, // api base_url
-  timeout: 6000 // 请求超时时间
+  baseURL: process.env.NODE_ENV === 'production' ? 'http://www.chinabronchiectasis.com/' : '/api', // api base_url
+  // baseURL: process.env.NODE_ENV === 'production' ? 'http://61.132.50.163:9997/' : '/api',
+  // baseURL: process.env.NODE_ENV === 'production' ? 'http://172.16.1.21:9997/' : '/api',
+  timeout: 20000 // 请求超时时间
 })
 
 const err = (error) => {
@@ -41,9 +46,9 @@ const err = (error) => {
 // request interceptor
 service.interceptors.request.use(config => {
   const token = Vue.ls.get(ACCESS_TOKEN)
-  if (token) {
-    config.headers['Access-Token'] = token // 让每个请求携带自定义 token 请根据实际情况自行修改
-  }
+  if (!token) return config
+  config.headers.Authorization = token.doctorId
+  // config.params ? config.params.append('tokenId', token.doctorId) : config.data.append('tokenId', token.doctorId)
   return config
 }, err)
 
diff --git a/src/views/Home.vue b/src/views/Home.vue
index f67c95f5b1..bf93e1c2ff 100644
--- a/src/views/Home.vue
+++ b/src/views/Home.vue
@@ -11,37 +11,9 @@
 
     <a-divider> 正常 </a-divider>
 
-    <a-card>
-
-      <trend flag="up" style="margin-right: 16px;">
-        <span slot="term">工资</span>
-        5%
-      </trend>
-      <trend flag="up" style="margin-right: 16px;">
-        <span slot="term">工作量</span>
-        50%
-      </trend>
-      <trend flag="down">
-        <span slot="term">身体状态</span>
-        50%
-      </trend>
-
-    </a-card>
 
     <a-divider> 颜色反转 </a-divider>
 
-    <a-card style="margin-bottom: 3rem">
-
-      <trend flag="up" :reverse-color="true" style="margin-right: 16px;">
-        <span slot="term">工资</span>
-        5%
-      </trend>
-      <trend flag="down" :reverse-color="true" style="margin-right: 16px;">
-        <span slot="term">工作量</span>
-        50%
-      </trend>
-
-    </a-card>
 
     <h2># AvatarList 组件 </h2>
 
@@ -145,7 +117,7 @@
 <script>
 // @ is an alias to /src
 
-import Trend from '@/components/Trend'
+// import Trend from '@/components/Trend'
 import AvatarList from '@/components/AvatarList'
 import CountDown from '@/components/CountDown/CountDown'
 import Ellipsis from '@/components/Ellipsis'
@@ -164,7 +136,7 @@ export default {
     NumberInfo,
     Ellipsis,
     CountDown,
-    Trend,
+    // Trend,
     AvatarList,
     AvatarListItem,
     TagSelect,
diff --git a/src/views/MessageNotification/component/createdForm.vue b/src/views/MessageNotification/component/createdForm.vue
new file mode 100644
index 0000000000..bb4bc7d307
--- /dev/null
+++ b/src/views/MessageNotification/component/createdForm.vue
@@ -0,0 +1,127 @@
+<template>
+  <a-modal
+    :title="options.title"
+    :width="800"
+    :bodyStyle="bodyStyle"
+    :maskClosable="maskClosable"
+    :destroyOnClose="destroyOnClose"
+    :centered="centered"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleSubmit"
+    @cancel="handleCancel"
+  >
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item label="标题" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input placeholder="请输入标题" v-decorator="['title', isIdCardNo]" />
+        </a-form-item>
+        <a-form-item label="发送内容" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input type="textarea" rows="6" v-decorator="['content', requiredRule]" />
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+import { saveOrUpdateData } from '@/api/message'
+export default {
+  data () {
+    return {
+      options: {},
+      residences: [],
+      nationList: [],
+      professionList: [],
+      censusList: [],
+      baseUrl: process.env.VUE_APP_API_BASE_URL,
+      maskClosable: false,
+      payTypeList: [],
+      isShowPat: false,
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 3 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 20 }
+      },
+      visible: false,
+      confirmLoading: false,
+      centered: true,
+      destroyOnClose: true,
+      bodyStyle: {
+        height: '300px',
+        overflow: 'auto'
+      },
+      form: this.$form.createForm(this),
+      requiredRule: { rules: [{ required: true, message: '该选项必填!' }] },
+      isIdCardNo: { rules: [{ required: true, message: '该选项必填!' }] },
+      announcementId: ''
+    }
+  },
+  created () {},
+  methods: {
+    add () {
+      this.options.title = '新建消息'
+      this.announcementId = ''
+      this.visible = true
+    },
+    edit (value) {
+      this.options.title = '编辑消息'
+      this.announcementId = value.announcementId
+      setTimeout(() => {
+        this.form.setFieldsValue({
+          title: value.title,
+          content: value.content
+        })
+      }, 0)
+      this.visible = true
+    },
+    handleSubmit () {
+      if (!this.confirmLoading) {
+        this.confirmLoading = true
+        this.form.validateFieldsAndScroll((errors, fieldsValue) => {
+          const that = this
+          if (errors) {
+            this.confirmLoading = false
+            return
+          }
+          const values = {
+            ...fieldsValue,
+            announcementId: this.announcementId
+          }
+          saveOrUpdateData(values).then((res) => {
+            that.visible = false
+            that.confirmLoading = false
+            that.$message.success(res.msg)
+            that.$emit('ok', values)
+          })
+        })
+      }
+    },
+    handleCancel () {
+      this.visible = false
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/ .ant-form-item:last-child {
+  margin-bottom: 0;
+}
+
+/deep/ .aaa .ant-form-item-label {
+  position: relative;
+  left: -18px;
+}
+
+.aaa .ant-form-item-children > i {
+  position: absolute !important;
+  left: -22px !important;
+  top: 4px;
+}
+input,
+textarea {
+    outline: none;
+}
+</style>
diff --git a/src/views/MessageNotification/component/newsDetail.vue b/src/views/MessageNotification/component/newsDetail.vue
new file mode 100644
index 0000000000..5c2e33ddd4
--- /dev/null
+++ b/src/views/MessageNotification/component/newsDetail.vue
@@ -0,0 +1,151 @@
+<template>
+  <a-modal
+    title="消息详情"
+    :width="600"
+    :bodyStyle="bodyStyle"
+    :maskClosable="maskClosable"
+    :destroyOnClose="destroyOnClose"
+    :centered="centered"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    :footer="null"
+    @cancel="handleCancel"
+  >
+    <a-spin :spinning="confirmLoading">
+      <!-- <a-form :form="form">
+        <a-form-item label="标题" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input placeholder="请输入标题" v-decorator="['title', isIdCardNo]" />
+        </a-form-item>
+        <a-form-item label="发送内容" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input type="textarea" rows="6" v-decorator="['content', requiredRule]" />
+        </a-form-item>
+      </a-form> -->
+      <!-- publish.isCreator == 1? (publish.stauts == 1? false : (publish.unReadCount == 0? '已阅读' : '待阅读') ) : publish.unReadCount -->
+      <div class="sdd">
+        <span v-if="publish.updatedDate? true : false">发布时间: <span>{{ publish.updatedDate | formDate }}</span></span>
+        <span v-if="publish.publisher? true : false">发布人: <span>{{ publish.publisher }}</span></span>
+        <span v-if="publish.isCreator == 1? true : false" class="publishStatus">
+          <span v-if="publish.unReadCount == 0? false : (publish.status == 1? true : false)" style="margin-right: 5px">待阅读:</span>
+          <span style="margin-right: 0">{{ publish.status == 1? (publish.type == 1? publish.unReadCount : (publish.unReadCount == 0? '已阅读' : '待阅读')) : '未发布' }}</span>
+        </span>
+      </div>
+      <div class="cdd">
+        <p>{{ publish.content }}</p>
+      </div>
+      <div class="ndd">
+        <a-button v-if="publish.isCreator == 1? false : true" :disabled="status == 2? true : false" type="primary" @click="readStatusBtn()">{{ status == 2? '已阅读' : '确认' }}</a-button>
+      </div>
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+import { detailData, isReadDetail } from '@/api/message'
+import { getUnReadAnnouncement } from '@/api/basis'
+import moment from 'moment'
+export default {
+  data () {
+    return {
+      publish: [],
+      status: undefined,
+      announcementId: undefined,
+      maskClosable: false,
+      payTypeList: [],
+      isShowPat: false,
+      visible: false,
+      confirmLoading: false,
+      centered: true,
+      destroyOnClose: true,
+      bodyStyle: {
+        height: '300px',
+        overflow: 'auto'
+      },
+      form: this.$form.createForm(this)
+    }
+  },
+  created () {},
+  filters: {
+    formDate (date) {
+      return moment(date).format('YYYY-MM-DD')
+    }
+  },
+  methods: {
+    show (value) {
+      this.visible = true
+      this.confirmLoading = true
+      detailData(value.announcementId).then(res => {
+        this.publish = res.data
+        this.status = res.data.readStatus
+        this.announcementId = res.data.announcementId
+        this.confirmLoading = false
+      })
+    },
+    async readStatusBtn () {
+      var that = this
+      if (this.status == 1) {
+        this.status = 2
+        const res = await isReadDetail(this.announcementId)
+        that.$message.success(res.msg)
+        const { data } = await getUnReadAnnouncement()
+        this.$store.commit('TOGGLE_MESSAGE_NUM', data.length || '')
+      }
+    },
+    handleCancel () {
+      this.visible = false
+      this.$emit('ok')
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/ .ant-form-item:last-child {
+  margin-bottom: 0;
+}
+.sdd {
+    position: relative;
+    font-size: 16px;
+    color: #000;
+    height: 50px;
+    border-bottom: 1px solid #cfcfcf;
+}
+.sdd span {
+    margin-right: 30px;
+}
+.cdd {
+    margin-top: 20px;
+}
+.ndd {
+    text-align: right;
+    margin-top: 40px;
+}
+.publishStatus {
+    position: absolute;
+    top: 0;
+    right: 0;
+    font-size: 14px;
+    color: #999;
+}
+.btn {
+    background: #409eff;
+    border: unset;
+    color: #fff;
+    padding: 5px;
+    border-radius: 5px;
+}
+.btn-disabled {
+    background: #909399;
+    border: unset;
+    color: #fff;
+    padding: 5px;
+    border-radius: 5px;
+}
+/deep/ .aaa .ant-form-item-label {
+  position: relative;
+  left: -18px;
+}
+
+.aaa .ant-form-item-children > i {
+  position: absolute !important;
+  left: -22px !important;
+  top: 4px;
+}
+</style>
diff --git a/src/views/MessageNotification/newsView.vue b/src/views/MessageNotification/newsView.vue
new file mode 100644
index 0000000000..147b0c3108
--- /dev/null
+++ b/src/views/MessageNotification/newsView.vue
@@ -0,0 +1,342 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索标题" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch(0)">全部消息</p>
+                    <p @click="tableSearch(1)">已创建消息</p>
+                    <p @click="tableSearch(2)">已接收消息</p>
+                    <p @click="tableSearch(3)">待阅读消息</p>
+                    <p @click="tableSearch(4)">已阅读消息</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="标题">
+                        <a-input v-model.trim="queryParam.title" />
+                      </a-form-item>
+                      <a-form-item label="发布人">
+                        <a-input v-model.trim="queryParam.publisher" />
+                      </a-form-item>
+                      <a-form-item label="发布时间" style="margin-bottom:0;">
+                        <a-range-picker @change="changeTime" style="width: 100%" :value="dateArr" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right; margin-bottom: 0; margin-top: 15px">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+          <a-col :md="11" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="$refs.createModal.add()">新建</a-button>
+          </a-col>
+          <a-col :md="1" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="$refs.table.refresh()">刷新</a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table
+      class="table-fix"
+      ref="table"
+      :scroll="scroll"
+      size="small"
+      rowKey="wxPatientId"
+      :columns="columns"
+      :data="loadData"
+      :alert="options.alert"
+      :rowSelection="options.rowSelection"
+    >
+      <template slot="overFlow" slot-scope="text, record">
+        <div style="overflow: hidden; white-space: nowrap; text-overflow: ellipsis;max-width: 600px">
+          {{ record.content }}
+        </div>
+      </template>
+      <span slot="status" slot-scope="text">{{ text | statusFilter}}</span>
+      <span slot="operation" slot-scope="text, record">
+        <template>
+          <a style="margin-right: 5px" v-if="record.status == 0? true : (record.status == 2? true : false)" @click="addorEditMessage(record)">编辑</a>
+          <a style="margin-right: 5px" v-if="record.status == 1? false : true" @click="handleReview(record)">发布</a>
+          <a style="margin-right: 5px" v-if="record.isCreator == 1? (record.status == 1? true : false) : false" @click="withdraw(record)">撤回</a>
+          <a style="margin-right: 5px" @click="newsDetailView(record)">详情</a>
+          <a style="margin-right: 5px" v-if="record.status == 0? true : (record.status == 2? true : false)" @click="del(record)">删除</a>
+        </template>
+      </span>
+    </s-table>
+    <created-form ref="createModal" @ok="handleOk"></created-form>
+    <news-detail ref="newsDetail" @ok="handleOk"></news-detail>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { STable } from '@/components'
+import { getMessageList, withdrawData, publishData, deleteData } from '@/api/message'
+import CreatedForm from './component/createdForm.vue'
+import NewsDetail from './component/newsDetail.vue'
+import $ from 'jquery'
+export default {
+  components: {
+    STable,
+    CreatedForm,
+    NewsDetail
+  },
+  data () {
+    return {
+      dateArr: [],
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      scroll: false,
+      dataEchoInfo: {},
+      loadData: (parameter) => {
+        return getMessageList(Object.assign(parameter, this.queryParam)).then((res) => {
+          return res
+        })
+      },
+      form: this.$form.createForm(this),
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      columns: [
+        {
+          title: '发布标题',
+          dataIndex: 'title',
+          width: '120px'
+        },
+        {
+          title: '发布时间',
+          dataIndex: 'updatedDate',
+          width: '80px',
+          customRender: (updatedDate) => (updatedDate) ? moment(updatedDate).format('YYYY-MM-DD') : ''
+        },
+        {
+          title: '发布人',
+          dataIndex: 'publisher',
+          width: '100px'
+        },
+        {
+          title: '消息来源',
+          dataIndex: 'typeName',
+          width: '100px'
+        },
+        {
+          title: '阅读状态',
+          dataIndex: 'status',
+          width: '100px',
+          scopedSlots: {
+            customRender: 'status'
+          }
+        },
+        {
+          title: '消息内容',
+          dataIndex: 'content',
+          width: '600px',
+          // render: text => <div dataIndex={text}>{text}</div>
+          //   ellipsis: true
+          scopedSlots: { customRender: 'overFlow' }
+        },
+        {
+          title: '操作',
+          dataIndex: 'operation',
+          scopedSlots: { customRender: 'operation' },
+          width: '100px'
+        }
+      ]
+    }
+  },
+  created () {
+    this.scroll = {
+      y: window.screen.height - 368 + 'px'
+    }
+  },
+  mounted () {
+    var that = this
+    $(document).on('click', function (e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if (
+        $(e.target).closest('.tableSearch').length == 0 &&
+        $(e.target).closest('.ant-calendar').length == 0 &&
+        $(e.target).closest('.ant-calendar-year-panel-table').length === 0 &&
+        $(e.target).closest('.ant-calendar-month-panel-table').length === 0
+      ) {
+        that.advanced = false
+      }
+    })
+  },
+  filters: {
+    statusFilter(status) {
+      if(status === 0)
+        return '未阅'
+      else
+        return '已阅'
+    }
+  },
+  methods: {
+    onSelectChange (selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    },
+    handleOk () {
+      this.$refs.table.refresh()
+    },
+    clearForm () {
+      this.queryParam = {}
+      this.dateArr = []
+    },
+    tableSearch (type) {
+      this.queryParam.queryType = type
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    refreshTable () {
+      this.advanced = false
+      this.$refs.table.refresh()
+    },
+    changeTime (time) {
+      this.dateArr = time
+      this.queryParam.publishTimeStart = moment(time[0]).format('YYYY-MM-DD 00:00:00')
+      this.queryParam.publishTimeEnd = moment(time[1]).format('YYYY-MM-DD 23:59:59')
+    },
+    // 编辑
+    addorEditMessage (record) {
+      this.$refs.createModal.edit(record)
+    },
+    newsDetailView (record) {
+      this.$refs.newsDetail.show(record)
+    },
+    // 发布
+    async handleReview (recode) {
+      const that = this
+      this.$confirm({
+        title: '是否要发布这条消息?',
+        onOk () {
+          publishData(recode.announcementId).then(res => {
+            if (res.code === 0) {
+              that.$message.success('发布成功')
+              that.$refs.table.refresh()
+            } else {
+              that.$message.error(res.msg)
+            }
+          })
+        },
+        onCancel () {}
+      })
+    },
+    // 撤回
+    withdraw (record) {
+      const that = this
+      this.$confirm({
+        title: '是否要撤回这条消息?',
+        onOk () {
+          withdrawData(record.announcementId).then(res => {
+            if (res && res.code === 0) {
+              that.$message.success('撤回成功')
+              that.$refs.table.refresh()
+            } else {
+              that.$message.error(res && res.msg)
+            }
+          })
+        },
+        onCancel () {}
+      })
+    },
+    // 删除
+    del (record) {
+      const that = this
+      this.$confirm({
+        title: '是否要删除这条消息?',
+        onOk () {
+          deleteData(record.announcementId).then(res => {
+            if (res.code === 0) {
+              that.$message.success('删除成功')
+              that.$refs.table.refresh()
+            } else {
+              that.$message.error(res && res.msg)
+            }
+          })
+        },
+        onCancel () {}
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+.table-fix {
+  table-layout:fixed;
+}
+.ant-table-tbody > tr > td {
+    max-height: 40px;
+    overflow:hidden;
+    white-space:nowrap;
+    text-overflow:ellipsis;
+    cursor: pointer;
+}
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item > .ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+</style>
diff --git a/src/views/account/ContactForm.vue b/src/views/account/ContactForm.vue
new file mode 100644
index 0000000000..2d94bb2ed0
--- /dev/null
+++ b/src/views/account/ContactForm.vue
@@ -0,0 +1,102 @@
+<template>
+  <a-modal :title="options.title" :width="400" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :destroyOnClose="destroyOnClose" :centered="centered" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <div style="color: red; margin-bottom: 10px; text-align: center; font-size: 17px;">请务必确保填写数据的真实性和准确性</div>
+      <a-form :form="form">
+        <a-form-item label="提交人" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['submitName', requiredRule]" />
+        </a-form-item>
+        <a-form-item label="联系电话" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['submitTelephone', { rules: [ { required: true, validator: phoneValid }] }]" />
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+import moment from 'moment';
+import _ from 'lodash';
+export default {
+  data() {
+    return {
+      options: {},
+      residences: [],
+      nationList: [],
+      professionList: [],
+      censusList: [],
+      baseUrl: process.env.VUE_APP_API_BASE_URL,
+      maskClosable: false,
+      payTypeList: [],
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 7 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 15 }
+      },
+      agrWrapperCol: {
+        xs: {
+          span: 24,
+          offset: 0
+        },
+        sm: {
+          span: 18,
+          offset: 6
+        }
+      },
+      visible: false,
+      confirmLoading: false,
+      centered: true,
+      destroyOnClose: true,
+      bodyStyle: {
+        height: '200px',
+        overflow: 'auto'
+      },
+      form: this.$form.createForm(this),
+      requiredRule: { rules: [{ required: true, message: '该选项必填!' }] },
+      patientId: undefined
+    };
+  },
+  methods: {
+    phoneValid(rule, value, callback) {
+      if (!value) {
+        callback('该选项必填!')
+        return
+      } else if (!/^\d{11}$/.test(value)) {
+        callback('请输入正确的手机号!')
+        return
+      }
+      callback()
+    },
+    add() {
+      this.options.title = '填写提交信息'
+      this.visible = true
+    },
+    handleSubmit() {
+      this.confirmLoading = true
+      this.form.validateFieldsAndScroll((errors, fieldsValue) => {
+        const that = this;
+        if (errors) {
+          this.confirmLoading = false
+          return
+        }
+        const values = {
+          ...fieldsValue
+        };
+        that.visible = false
+        that.confirmLoading = false
+        that.$emit('ok', values);
+      });
+    },
+    handleCancel() {
+      this.visible = false
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+/deep/ .ant-form-item:last-child {
+  margin-bottom: 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/account/center/Index.vue b/src/views/account/center/Index.vue
index afa4fe2ef6..7117111bc1 100644
--- a/src/views/account/center/Index.vue
+++ b/src/views/account/center/Index.vue
@@ -1,288 +1,415 @@
-<template>
-  <div class="page-header-index-wide page-header-wrapper-grid-content-main">
-    <a-row :gutter="24">
-      <a-col :md="24" :lg="7">
-        <a-card :bordered="false">
-          <div class="account-center-avatarHolder">
-            <div class="avatar">
-              <img :src="avatar()">
-            </div>
-            <div class="username">{{ nickname() }}</div>
-            <div class="bio">海纳百川,有容乃大</div>
-          </div>
-          <div class="account-center-detail">
-            <p>
-              <i class="title"></i>交互专家
-            </p>
-            <p>
-              <i class="group"></i>蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED
-            </p>
-            <p>
-              <i class="address"></i>
-              <span>浙江省</span>
-              <span>杭州市</span>
-            </p>
-          </div>
-          <a-divider/>
-
-          <div class="account-center-tags">
-            <div class="tagsTitle">标签</div>
-            <div>
-              <template v-for="(tag, index) in tags">
-                <a-tooltip v-if="tag.length > 20" :key="tag" :title="tag">
-                  <a-tag
-                    :key="tag"
-                    :closable="index !== 0"
-                    :afterClose="() => handleTagClose(tag)"
-                  >{{ `${tag.slice(0, 20)}...` }}</a-tag>
-                </a-tooltip>
-                <a-tag
-                  v-else
-                  :key="tag"
-                  :closable="index !== 0"
-                  :afterClose="() => handleTagClose(tag)"
-                >{{ tag }}</a-tag>
-              </template>
-              <a-input
-                v-if="tagInputVisible"
-                ref="tagInput"
-                type="text"
-                size="small"
-                :style="{ width: '78px' }"
-                :value="tagInputValue"
-                @change="handleInputChange"
-                @blur="handleTagInputConfirm"
-                @keyup.enter="handleTagInputConfirm"
-              />
-              <a-tag v-else @click="showTagInput" style="background: #fff; borderStyle: dashed;">
-                <a-icon type="plus"/>New Tag
-              </a-tag>
-            </div>
-          </div>
-          <a-divider :dashed="true"/>
-
-          <div class="account-center-team">
-            <div class="teamTitle">团队</div>
-            <a-spin :spinning="teamSpinning">
-              <div class="members">
-                <a-row>
-                  <a-col :span="12" v-for="(item, index) in teams" :key="index">
-                    <a>
-                      <a-avatar size="small" :src="item.avatar"/>
-                      <span class="member">{{ item.name }}</span>
-                    </a>
-                  </a-col>
-                </a-row>
-              </div>
-            </a-spin>
-          </div>
-        </a-card>
-      </a-col>
-      <a-col :md="24" :lg="17">
-        <a-card
-          style="width:100%"
-          :bordered="false"
-          :tabList="tabListNoTitle"
-          :activeTabKey="noTitleKey"
-          @tabChange="key => handleTabChange(key, 'noTitleKey')"
-        >
-          <article-page v-if="noTitleKey === 'article'"></article-page>
-          <app-page v-else-if="noTitleKey === 'app'"></app-page>
-          <project-page v-else-if="noTitleKey === 'project'"></project-page>
-        </a-card>
-      </a-col>
-    </a-row>
-  </div>
-</template>
-
-<script>
-import { PageView, RouteView } from '@/layouts'
-import { AppPage, ArticlePage, ProjectPage } from './page'
-
-import { mapGetters } from 'vuex'
-
-export default {
-  components: {
-    RouteView,
-    PageView,
-    AppPage,
-    ArticlePage,
-    ProjectPage
-  },
-  data () {
-    return {
-      tags: ['很有想法的', '专注设计', '辣~', '大长腿', '川妹子', '海纳百川'],
-
-      tagInputVisible: false,
-      tagInputValue: '',
-
-      teams: [],
-      teamSpinning: true,
-
-      tabListNoTitle: [
-        {
-          key: 'article',
-          tab: '文章(8)'
-        },
-        {
-          key: 'app',
-          tab: '应用(8)'
-        },
-        {
-          key: 'project',
-          tab: '项目(8)'
-        }
-      ],
-      noTitleKey: 'app'
-    }
-  },
-  mounted () {
-    this.getTeams()
-  },
-  methods: {
-    ...mapGetters(['nickname', 'avatar']),
-
-    getTeams () {
-      this.$http.get('/workplace/teams').then(res => {
-        this.teams = res.result
-        this.teamSpinning = false
-      })
-    },
-
-    handleTabChange (key, type) {
-      this[type] = key
-    },
-
-    handleTagClose (removeTag) {
-      const tags = this.tags.filter(tag => tag !== removeTag)
-      this.tags = tags
-    },
-
-    showTagInput () {
-      this.tagInputVisible = true
-      this.$nextTick(() => {
-        this.$refs.tagInput.focus()
-      })
-    },
-
-    handleInputChange (e) {
-      this.tagInputValue = e.target.value
-    },
-
-    handleTagInputConfirm () {
-      const inputValue = this.tagInputValue
-      let tags = this.tags
-      if (inputValue && !tags.includes(inputValue)) {
-        tags = [...tags, inputValue]
-      }
-
-      Object.assign(this, {
-        tags,
-        tagInputVisible: false,
-        tagInputValue: ''
-      })
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-.page-header-wrapper-grid-content-main {
-  width: 100%;
-  height: 100%;
-  min-height: 100%;
-  transition: 0.3s;
-
-  .account-center-avatarHolder {
-    text-align: center;
-    margin-bottom: 24px;
-
-    & > .avatar {
-      margin: 0 auto;
-      width: 104px;
-      height: 104px;
-      margin-bottom: 20px;
-      border-radius: 50%;
-      overflow: hidden;
-      img {
-        height: 100%;
-        width: 100%;
-      }
-    }
-
-    .username {
-      color: rgba(0, 0, 0, 0.85);
-      font-size: 20px;
-      line-height: 28px;
-      font-weight: 500;
-      margin-bottom: 4px;
-    }
-  }
-
-  .account-center-detail {
-    p {
-      margin-bottom: 8px;
-      padding-left: 26px;
-      position: relative;
-    }
-
-    i {
-      position: absolute;
-      height: 14px;
-      width: 14px;
-      left: 0;
-      top: 4px;
-      background: url(https://gw.alipayobjects.com/zos/rmsportal/pBjWzVAHnOOtAUvZmZfy.svg);
-    }
-
-    .title {
-      background-position: 0 0;
-    }
-    .group {
-      background-position: 0 -22px;
-    }
-    .address {
-      background-position: 0 -44px;
-    }
-  }
-
-  .account-center-tags {
-    .ant-tag {
-      margin-bottom: 8px;
-    }
-  }
-
-  .account-center-team {
-    .members {
-      a {
-        display: block;
-        margin: 12px 0;
-        line-height: 24px;
-        height: 24px;
-        .member {
-          font-size: 14px;
-          color: rgba(0, 0, 0, 0.65);
-          line-height: 24px;
-          max-width: 100px;
-          vertical-align: top;
-          margin-left: 12px;
-          transition: all 0.3s;
-          display: inline-block;
-        }
-        &:hover {
-          span {
-            color: #1890ff;
-          }
-        }
-      }
-    }
-  }
-
-  .tagsTitle,
-  .teamTitle {
-    font-weight: 500;
-    color: rgba(0, 0, 0, 0.85);
-    margin-bottom: 12px;
-  }
-}
-</style>
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="4" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <!-- 支扩病史资料 -->
+        </a-col>
+      </a-row>
+    </a-card>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import { mapActions } from 'vuex'
+import { getPatientBasis } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import moment from 'moment'
+
+export default {
+  name: 'basis',
+  components: {
+    STree,
+    MyIcon
+  },
+  data() {
+    return {
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      baselineFormStyle: {
+        // height: '444px',
+      },
+      title: '基线',
+      openKeys: [],
+      defaultSelectedKeys: [],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      patientBasisId: this.$route.params.id
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.basisMaskId = that.orgTree[0].basisMarkId
+        // that.getElementsAnswer()
+        that.defaultSelectedKeys = [that.basisMaskId]
+        that.$router.replace('/list/basis/' + that.patientBasisId + '/' + that.basisMaskId)
+      })
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo{
+  height:calc(100% - 10px);
+}
+/deep/ .card-box{
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+.ant-row.ant-form-item:hover{
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker{
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle{
+    color: #FFF;
+  }
+}
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle{
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover, .ant-menu-item-active, .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open, .ant-menu-submenu-active, .ant-menu-submenu-title:hover{
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle{
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle{
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline.ant-menu-submenu-open {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/account/center/collect.vue b/src/views/account/center/collect.vue
new file mode 100644
index 0000000000..397938986c
--- /dev/null
+++ b/src/views/account/center/collect.vue
@@ -0,0 +1,1115 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+     <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;">
+           <a-row :gutter="30" style="line-height: 34px;">
+       <a-col :md="1" :sm="4"><a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" /></a-col>
+       <a-col :md="4" :sm="20" class="UserNameCard">
+         <my-icon type="iconshoufangzhe_huaban" />
+         受访者:{{ patient.name }}
+       </a-col>
+       <a-col :md="6" :sm="24" class="UserNameCard">   
+       <my-icon type="iconshenfenzheng_huaban" />
+         {{ patient.card }}
+       </a-col>
+       <a-col :md="13" :sm="24" style="fontSize: 18px;textAlign: right;">创建时间:{{ patient.createDate | moment }}</a-col>
+     </a-row>
+    </a-card>
+    <a-card :bordered="false" :bodyStyle="bodyStyle" style="margin-top: 10px;padding-left: 0">
+     <a-row :gutter="8">
+       <a-col :span="5" :style="baselineInfoStyle">
+        <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+        </s-tree>
+       </a-col>
+       <a-col :span="19">
+         <div style="overflow: hidden;">
+           <a-button class="btn fr" @click="save">保存</a-button>
+         </div>
+         <div class="baselineForm" :style="baselineFormStyle">
+              <a-form :form="form">
+                <!-- 基线或访视 -->
+                <a-form-item v-for="(qu1, index) in list" :key="index" :label="[qu1.sort + '.' + qu1.questionName]" :labelCol="qu1.type === 0 ? labelColVer : labelColHor" :wrapperCol="qu1.type === 0 ? wrapperVer : wrapperHor">
+                    <a-radio-group v-if="qu1.simple === 1" :name="qu1.basisElementCopyId+''" v-model="qu1.basisElementId">
+                      <a-radio :value="1">是</a-radio>
+                      <a-radio :value="-1">否</a-radio>
+                    </a-radio-group>
+                    <a-radio-group v-if="qu1.simple === 2" :name="qu1.basisElementCopyId+''" :defaultValue="qu1.reportResultList && qu1.reportResultList.length && qu1.reportResultList[0].elementNumValue">
+                      <a-radio :value="1">有</a-radio>
+                      <a-radio :value="-1">无</a-radio>
+                    </a-radio-group>
+                    <!-- <br v-if="qu1.simple > 0"> -->
+                    <a-input :name="qu1.basisElementCopyId+''" v-if="qu1.simple < 0 && qu1.isWrite > 0 && qu1.event === 'compute'" :defaultValue="qu1.reportResultList && qu1.reportResultList.length && qu1.reportResultList[0].elementTextValue" style="width: 240px" :addonAfter="qu1.unit" @blur="compute(qu1.computeElement)" />
+                    <a-input :name="qu1.basisElementCopyId+''" v-if="qu1.simple < 0 && qu1.isWrite > 0 && !qu1.event && typeof qu1.computeElement !== 'undefined' && qu1.computeElement === 0" :defaultValue="qu1.reportResultList && qu1.reportResultList.length && qu1.reportResultList[0].elementTextValue" style="width: 240px" :addonAfter="qu1.unit"  v-model="computeMap[qu1.basisElementCopyId]" />
+                    <a-input :name="qu1.basisElementCopyId+''" v-if="qu1.simple < 0 && qu1.isWrite > 0 && !qu1.event && typeof qu1.computeElement === 'undefined'" :defaultValue="qu1.reportResultList && qu1.reportResultList.length && qu1.reportResultList[0].elementTextValue" style="width: 240px" :addonAfter="qu1.unit" />
+                    <a-date-picker :name="qu1.basisElementCopyId+''" v-if="qu1.simple < 0 && qu1.isWrite > 0 && qu1.event === 'showDate' && (!qu1.reportResultList || qu1.reportResultList.length === 0 || qu1.reportResultList[0].elementTextValue === '')" />
+                    <a-date-picker :name="qu1.basisElementCopyId+''" v-if="qu1.simple < 0 && qu1.isWrite > 0 && qu1.event === 'showDate' && (qu1.reportResultList && qu1.reportResultList.length && qu1.reportResultList[0].elementTextValue)" :defaultValue="moment(qu1.reportResultList[0].elementTextValue)" />
+                    <a-checkbox-group v-if="qu1.hasChild > 0 && qu1.isRadio < 0 && (qu1.logicValue <= 0 || (qu1.logicValue > 0 && qu1.basisElementId === 1))" v-model="qu1.elementId">
+                      <a-checkbox  v-if="op.event!=='showList'" v-for="(op,index) in qu1.childList" :key="index" :value="op.basisElementCopyId" :name="qu1.basisElementCopyId+''">{{op.questionName}}</a-checkbox>
+                    </a-checkbox-group>
+                    <div v-if="qu1.hasChild > 0 && qu1.isRadio > 0">
+                      <a-radio-group :name="qu1.basisElementCopyId+''" v-model="qu1.basisElementId">
+                        <a-radio v-for="(op,index) in qu1.childList" :key="index" :value="op.basisElementCopyId">{{op.questionName}}</a-radio>
+                      </a-radio-group>
+                      <div v-for="(sub, index) in qu1.childList" v-if="sub.hasChild > 0">
+                        <a-row v-if="sub.isRadio > 0 && sub.logicValue > 0 && qu1.basisElementId === sub.basisElementCopyId">
+                          <a-radio-group :name="sub.basisElementCopyId+''" v-model="sub.basisElementId">
+                            <a-radio v-for="(third,index) in sub.childList" :key="index" :value="third.basisElementCopyId">{{third.questionName}}</a-radio>
+                          </a-radio-group>
+                        </a-row>
+                        <a-row v-for="(third, index) in sub.childList" v-if="sub.isRadio === 0 && (sub.logicValue <= 0 || (sub.logicValue > 0 && qu1.basisElementId === sub.basisElementCopyId))">
+                          <a-col :span="6">({{third.sort}}) {{third.questionName}}</a-col>
+                          <!-- <br> -->
+                          <a-col :span="18">
+                            <a-col :span="6" v-if="third.simple > 0 && third.isRadio < 0">
+                              <a-radio-group v-if="third.simple === 1" :name="third.basisElementCopyId+''" v-model="third.basisElementId">
+                                  <a-radio :value="1">是</a-radio>
+                                  <a-radio :value="-1">否</a-radio>
+                                </a-radio-group>
+                                <a-radio-group v-if="third.simple === 2" :name="third.basisElementCopyId+''" v-model="third.basisElementId">
+                                  <a-radio :value="1">有</a-radio>
+                                  <a-radio :value="-1">无</a-radio>
+                                </a-radio-group>
+                            </a-col>
+                            <a-col :span="8" v-if="third.simple > 0 && third.logicValue > 0 && third.hasChild > 0 && third.childList[0].isWrite > 0 && third.basisElementId === 1">
+                              <a-input :name="third.childList[0].basisElementCopyId+''" :addonAfter="third.childList[0].unit" style="width:240px" :defaultValue="third.childList[0].reportResultList && third.childList[0].reportResultList.length && third.childList[0].reportResultList[0].elementTextValue"></a-input>
+                            </a-col>
+                            <a-row v-for="(fourth, index) in third.childList" v-if="third.hasChild > 0 && third.isRadio === 0">
+                              <a-col :span="6">{{fourth.questionName}}</a-col>
+                              
+                              <a-col :span="6">
+                                <a-radio-group v-if="fourth.simple === 1" :name="fourth.basisElementCopyId+''" v-model="fourth.basisElementId">
+                                  <a-radio :value="1">是</a-radio>
+                                  <a-radio :value="-1">否</a-radio>
+                                </a-radio-group>
+                                <a-radio-group v-if="fourth.simple === 2" :name="fourth.basisElementCopyId+''" v-model="fourth.basisElementId">
+                                  <a-radio :value="1">有</a-radio>
+                                  <a-radio :value="-1">无</a-radio>
+                                </a-radio-group>
+                              </a-col>
+                              <a-col :span="12" v-if="fourth.logicValue <= 0 || (fourth.logicValue > 0 && fourth.basisElementId === 1) && fourth.hasChild > 0 && fourth.childList[0].isWrite > 0">
+                                <a-col :span="6">{{fourth.childList[0].questionName}}</a-col>
+                                <a-col :span="12">
+                                  <a-input :addonAfter="fourth.childList[0].unit" :name="fourth.childList[0].basisElementCopyId+''" style="width:240px" :defaultValue="fourth.childList[0].reportResultList && fourth.childList[0].reportResultList.length && fourth.childList[0].reportResultList[0].elementTextValue"></a-input>
+                                </a-col>
+                              </a-col>
+                            </a-row>
+                          </a-col>
+                        </a-row>
+                      </div>
+                    </div>
+                    <!-- 一级联动 -->
+                    <a-row v-for="(sub, index) in qu1.childList" :key="index" v-if="qu1.isRadio < 0 && sub.logicValue > 0 && qu1.elementId.indexOf(sub.basisElementCopyId) > -1">
+                      <a-col :span="4">{{sub.childList[0].questionName}}</a-col>
+                      <a-col :span="4"><a-input :name="sub.childList[0].basisElementCopyId+''" :addonAfter="sub.childList[0].unit" :defaultValue="sub.childList[0].reportResultList && sub.childList[0].reportResultList.length && sub.childList[0].reportResultList[0].elementTextValue" style="width:240px" /></a-col>
+                    </a-row>
+                    <!-- 有第二层 -->
+                    <div v-if="qu1.hasChild > 0 && qu1.isRadio === 0">
+                      <a-row class="itemRow" v-for="(sub, index) in qu1.childList" :key="index" :class="{'no-border': index === qu1.childList.length - 1}" v-if="qu1.logicValue <= 0 || (qu1.logicValue > 0 && qu1.basisElementId === 1)">
+                        <!-- 第二层开始 -->
+                        <a-col :span="sub.questionName.length > 16 ? 24 : 6">({{sub.sort}}) {{sub.questionName}}</a-col>
+                        <!-- 为了体格检查中的啰音的排版 -->
+                        <!-- <br v-if="sub.showType === 2 && sub.hasChild > 0 && sub.isRadio === 0 && sub.simple < 0 && sub.isWrite < 0"> -->
+                        <a-col :span="18" :class="{'ant-col-push-6': sub.questionName.length > 16}">
+                          <!-- 是否,有无以及填写值 -->
+                          <a-col :span="6" v-if="sub.isWrite > 0">
+                            <a-input v-if="sub.isWrite > 0 && !sub.event && typeof sub.computeElement !== 'undefined' && sub.computeElement === 0" :name="sub.basisElementCopyId+''" :defaultValue="sub.reportResultList && sub.reportResultList.length && sub.reportResultList[0].elementTextValue" :addonAfter="sub.unit" :readOnly="sub.computeElement === 0" v-model="computeMap[sub.basisElementCopyId]" style="width:240px" />
+                            <a-input v-if="sub.isWrite > 0 && !sub.event && typeof sub.computeElement === 'undefined'" :name="sub.basisElementCopyId+''" :defaultValue="sub.reportResultList && sub.reportResultList.length && sub.reportResultList[0].elementTextValue || ''" :addonAfter="sub.unit" style="width:240px" />
+                            <a-input v-if="sub.isWrite > 0 && sub.event === 'compute'" :name="sub.basisElementCopyId+''" :defaultValue="sub.reportResultList && sub.reportResultList.length && sub.reportResultList[0].elementTextValue || ''" :addonAfter="sub.unit" @blur="compute(sub.computeElement)" style="width:240px" />
+                            <a-date-picker v-if="sub.isWrite > 0 && sub.event === 'showDate' && (!sub.reportResultList || sub.reportResultList.length === 0 || sub.reportResultList[0].elementTextValue === '')" :name="sub.basisElementCopyId+''" style="width:240px" />
+                            <a-date-picker v-if="sub.isWrite > 0 && sub.event === 'showDate' && sub.reportResultList && sub.reportResultList.length && sub.reportResultList[0].elementTextValue" :name="sub.basisElementCopyId+''" :defaultValue="moment(sub.reportResultList[0].elementTextValue)" style="width:240px" />
+                          </a-col>
+                          <br v-if="sub.isWrite > 0">
+                          <a-radio-group v-if="sub.simple === 1" v-model="sub.basisElementId" :name="sub.basisElementCopyId+''">
+                            <a-radio :value="1">是</a-radio>
+                            <a-radio :value="-1">否</a-radio>
+                          </a-radio-group>
+                          <a-radio-group v-if="sub.simple === 2" v-model="sub.basisElementId" :name="sub.basisElementCopyId+''">
+                            <a-radio :value="1">有</a-radio>
+                            <a-radio :value="-1">无</a-radio>
+                          </a-radio-group>
+                          <!--   -->
+                          <!-- <br v-if="sub.showType === 2" /> -->
+                          <div class="clear" v-if="sub.simple > 0"></div>
+                          <a-col :span="6" v-if="(sub.logicValue <= 0 || sub.basisElementId === 1) && sub.childEleName">{{sub.childEleName}}</a-col>
+                          <a-checkbox-group v-if="sub.hasChild > 0 && sub.isRadio < 0 &&(sub.logicValue <= 0 || sub.basisElementId === 1) && sub.childList[0].event !== 'showList'" v-model="sub.elementId">
+                            <a-checkbox v-for="(subOp,index) in sub.childList" :key="index" :name="subOp.parentId+''" :value="subOp.basisElementCopyId">{{subOp.questionName}}</a-checkbox>
+                          </a-checkbox-group>
+                          <a-checkbox-group v-if="sub.hasChild > 0 && sub.isRadio < 0 && (sub.logicValue <= 0 || sub.basisElementId === 1) && sub.childList[0].event === 'showList'" v-model="sub.elementId" style="width: 80%;">
+                           <span v-for="(subOp, index) in sub.childList">
+                             <a-checkbox v-if="subOp.event=='showList'" :name="subOp.parentId+''"    @change="showList($event,subOp.event,subOp.questionName)" :key="index" :value="subOp.basisElementCopyId">{{subOp.questionName}}</a-checkbox>
+                             <div  v-if="subOp.event=='showList' && sub.elementId.indexOf(subOp.basisElementCopyId) > -1&&subOp.questionName=='其他' "  style="display: inline-block;width: 300px;argin-right: 10px;">
+                                <a-input :name="subOp.childList[0].basisElementCopyId+''" :defaultValue="subOp.childList[0].reportResultList && subOp.childList[0].reportResultList.length&&subOp.childList[0].reportResultList[0].elementTextValue || ''" @blur="blurInput($event,subOp.childList[0])"  :addonAfter="subOp.childList[0].unit"  />
+                             </div>
+                             <add-table v-if="subOp.event=='showList' && sub.elementId.indexOf(subOp.basisElementCopyId) > -1&&subOp.questionName!=='其他'"  v-model="optionDataSource[subOp.basisElementCopyId]" :dataSource=" subOp.medicineAllergyList?subOp.medicineAllergyList:optionDataSource[subOp.basisElementCopyId]"></add-table>
+                             <add-table  v-if="subOp.event == 'showList' && subOp.questionName == '其他' && sub.elementId.indexOf(subOp.basisElementCopyId) > -1"  v-model="optionDataSource[subOp.childList[0].parentId]" :dataSource="subOp.medicineAllergyList?subOp.medicineAllergyList:optionDataSource[subOp.childList[0].parentId]"></add-table>
+                           </span>
+                          </a-checkbox-group>
+                          <!-- 二级联动 -->
+                          <a-row v-for="(third, index) in sub.childList" :key="index" v-if="sub.hasChild > 0 && sub.isRadio < 0 && third.hasChild > 0 && third.logicValue > 0 && sub.elementId.indexOf(third.basisElementCopyId) > -1" class="no-border">
+                            <a-col :span="6" v-if="third.childList[0].isWrite > 0">{{third.childList[0].questionName}}</a-col>
+                            <a-col :span="8" v-if="third.childList[0].isWrite > 0">
+                              <a-date-picker v-if="third.childList[0].event === 'showDate' && third.childList[0].reportResultList && third.childList[0].reportResultList.length && third.childList[0].reportResultList[0].elementTextValue" :defaultValue="moment(third.childList[0].reportResultList[0].elementTextValue)" :name="third.childList[0].basisElementCopyId+''" style="width:240px" />
+                              <a-date-picker v-if="third.childList[0].event === 'showDate' && (!third.childList[0].reportResultList || !third.childList[0].reportResultList.length || !third.childList[0].reportResultList[0].elementTextValue)" :name="third.childList[0].basisElementCopyId+''" style="width:240px" />
+                              <a-input v-if="!third.childList[0].event&&third.event!=='showList'" :addonAfter="third.childList[0].unit" :name="third.childList[0].basisElementCopyId+''" :defaultValue="third.childList[0].reportResultList && third.childList[0].reportResultList.length && third.childList[0].reportResultList[0].elementTextValue || ''" style="width:240px" />
+                            </a-col>
+                            <a-col :span="6" v-if="third.isRadio > 0 && third.hasChild > 0">{{third.questionName}}</a-col>
+                            <a-col :span="16" v-if="third.isRadio > 0 && third.hasChild > 0">
+                              <a-radio-group :name="third.basisElementCopyId+''" v-model="third.basisElementId">
+                                <a-radio v-for="(fourth, index) in third.childList" :key="index" :value="fourth.basisElementCopyId">{{fourth.questionName}}</a-radio>
+                              </a-radio-group>
+                            </a-col>
+                          </a-row>
+                          <a-radio-group v-if="sub.hasChild > 0 && sub.isRadio > 0 && sub.childList[0].event === 'compute'" v-model="sub.basisElementId" :name="sub.basisElementCopyId+''" @change="compute(sub.childList[0].computeElement)">
+                            <a-radio v-for="(subOp,index) in sub.childList" :value="subOp.basisElementCopyId" :key="index">{{subOp.questionName}}</a-radio>
+                          </a-radio-group>
+                          <a-radio-group v-if="sub.hasChild > 0 && sub.isRadio > 0 && (!sub.childList[0].event || sub.childList[0].event !== 'compute')" v-model="sub.basisElementId" :name="sub.basisElementCopyId+''">
+                            <a-radio v-for="(subOp,index) in sub.childList" :value="subOp.basisElementCopyId" :key="index">{{subOp.questionName}}</a-radio>
+                          </a-radio-group>
+                          <div v-if="sub.hasChild > 0 && sub.isRadio > 0 && sub.logicValue <= 0 && thirdSub.logicValue > 0 && thirdSub.hasChild > 0 && thirdSub.basisElementCopyId === sub.basisElementId" v-for="(thirdSub, index) in sub.childList">
+                            <div v-if="thirdSub.isRadio === 0">
+                              <a-row v-for="(fourth, index) in thirdSub.childList" :class="{'no-border': index === thirdSub.childList.length - 1}">
+                                <!-- total lung capacity -->
+                                <a-col :span="6">{{fourth.questionName}}</a-col>
+                                <ocr-load v-if="fourth.event=='upload'" :fileList="fileList" :basisMaskId="basisMaskId" :reportCollectBaseId="reportCollectBaseId" ref="ocrloadModel" @OCRload="OCRload" @imgUrl="saveImgUrl"></ocr-load>
+                                <a-radio-group v-if="fourth.simple === 2" v-model="fourth.basisElementId" :name="fourth.basisElementCopyId+''">
+                                  <a-radio :value="1">有</a-radio>
+                                  <a-radio :value="-1">无</a-radio>
+                                </a-radio-group>
+                                <a-input v-if="fourth.isWrite > 0" :addonAfter="fourth.unit" :name="fourth.basisElementCopyId+''" :defaultValue="fourth.reportResultList && fourth.reportResultList.length && fourth.reportResultList[0].elementTextValue || ''" style="width: 240px"></a-input>
+                                <div v-if="fourth.hasChild > 0 && fourth.isRadio === 0">
+                                  <a-row class="no-border" v-for="fifth in fourth.childList" v-if="fourth.logicValue <= 0 || fourth.basisElementId === 1">
+                                    <a-col :span="6">{{fifth.questionName}}</a-col>
+                                    <a-col :span="4" v-if="fifth.simple === 2">
+                                      <a-radio-group v-model="fifth.basisElementId" :name="fifth.basisElementCopyId+''">
+                                        <a-radio :value="1">有</a-radio>
+                                        <a-radio :value="-1">无</a-radio>
+                                      </a-radio-group>
+                                    </a-col>
+                                    <div v-if="fifth.hasChild > 0 && (fifth.logicValue <= 0 || fifth.basisElementId === 1) && fifth.isRadio === 0">
+                                      <a-col :span="4">{{fifth.childList[0].questionName}}</a-col>
+                                      <a-input v-if="fifth.childList[0].isWrite > 0" :span="8" style="width: 240px" :name="fifth.childList[0].basisElementCopyId+''" :defaultValue="fifth.childList[0].reportResultList && fifth.childList[0].reportResultList.length && fifth.childList[0].reportResultList[0].elementTextValue || ''" :addonAfter="fifth.childList[0].unit"></a-input>
+                                    </div>
+                                    <a-col :span="4" v-if="fifth.isWrite > 0">
+                                      <a-input :name="fifth.basisElementCopyId+''" :addonAfter="fifth.unit" :defaultValue="fifth.reportResultList && fifth.reportResultList.length && fifth.reportResultList[0].elementTextValue || ''" style="width:240px"></a-input>
+                                    </a-col>
+                                  </a-row>
+                                </div>
+                              </a-row>
+                            </div>
+                            <div v-if="thirdSub.isRadio > 0">
+                              <a-row class="no-border">
+                                <a-radio-group :name="thirdSub.basisElementCopyId+''" v-model="thirdSub.basisElementId">
+                                  <a-radio v-for="fourth in thirdSub.childList" :value="fourth.basisElementCopyId">{{fourth.questionName}}</a-radio>
+                                </a-radio-group>
+                              </a-row>
+                            </div>
+                          </div>
+                          <a-col v-if="sub.hasChild > 0 && sub.isRadio > 0 && sub.childList[0].isWrite > 0">
+                            <a-col :span="6">{{sub.childList[0].questionName}}</a-col>
+                            <a-col :span="8"><a-input :name="sub.childList[0].basisElementCopyId+''" style="width:240px" :defaultValue="sub.childList[0].reportResultList && sub.childList[0].reportResultList.length && sub.childList[0].reportResultList[0].elementTextValue || ''" /></a-col>
+                          </a-col>
+                          <a-row class="no-border" v-if="sub.hasChild > 0 && sub.isRadio > 0 && sub.logicValue > 0 && secondSub.hasChild > 0" v-for="(secondSub, index) in sub.childList" :key="index">
+                            <a-col :span="3" v-if="sub.basisElementId === secondSub.basisElementId">{{secondSub.childList[0].questionName}}</a-col>
+                            <a-col :span="8" v-if="sub.basisElementId === secondSub.basisElementId"><a-input :addonAfter="secondSub.childList[0].unit" :defaultValue="secondSub.childList[0].reportResultList && secondSub.childList[0].reportResultList.length && secondSub.childList[0].reportResultList[0].elementTextValue || ''" :name="secondSub.childList[0].basisElementCopyId+''" style="width:240px" /></a-col>
+                          </a-row>
+                          <a-row v-if="sub.hasChild > 0 && sub.isRadio === 0 && (sub.logicValue <= 0 || sub.basisElementId === 1)" v-for="(subOp,index) in sub.childList" :class="{'ant-col-pull-6': subOp.level > 3 || subOp.display > 0, 'no-border': index === sub.childList.length - 1}">
+                            <!-- <br> -->
+                              <!-- 调脂那一层,如果是紧跟后面的单选框或者输入框就占8格;否则就是子问题,占12格 -->
+                              <a-col :span="subOp.simple > 0 || subOp.isRadio > 0 || (subOp.questionName.length <= 16 && subOp.isWrite > 0) ? 6 : 24">{{subOp.questionName}}</a-col>
+                              <a-radio-group v-if="subOp.simple === 1" v-model="subOp.basisElementId" :name="subOp.basisElementCopyId+''">
+                                <a-radio :value="1">是</a-radio>
+                                <a-radio :value="-1">否</a-radio>
+                              </a-radio-group>
+                              <a-radio-group v-if="subOp.simple === 2" v-model="subOp.basisElementId" :name="subOp.basisElementCopyId+''">
+                                <a-radio :value="1">有</a-radio>
+                                <a-radio :value="-1">无</a-radio>
+                              </a-radio-group>
+                              <a-col :span="6" v-if="subOp.isWrite > 0">
+                                <a-date-picker v-if="subOp.event === 'showDate' && subOp.reportResultList && subOp.reportResultList.length && subOp.reportResultList[0].elementTextValue" :name="subOp.basisElementCopyId+''" :defaultValue="moment(subOp.reportResultList[0].elementTextValue)" style="width:240px" />
+                                <a-date-picker v-if="subOp.event === 'showDate' && (!subOp.reportResultList || !subOp.reportResultList.length || !subOp.reportResultList[0].elementTextValue)" :name="subOp.basisElementCopyId+''" style="width:240px" />
+                                <a-input :name="subOp.basisElementCopyId+''" v-if="!subOp.event || subOp.event !== 'showDate'" :defaultValue="subOp.reportResultList && subOp.reportResultList.length && subOp.reportResultList[0].elementTextValue || ''" :addonAfter="subOp.unit" style="width:240px" />
+                              </a-col>
+                              <a-col :span="24" v-if="subOp.hasChild > 0 && subOp.isRadio < 0 && (subOp.logicValue <= 0 || subOp.basisElementId === 1)">
+                                <a-checkbox-group v-model="subOp.elementId" v-if="subOp.childList[0].event !== 'showList'">
+                                  <a-checkbox v-for="(secondSub,index) in subOp.childList" :key="index" :name="secondSub.parentId+''" :value="secondSub.basisElementCopyId">{{secondSub.questionName}}</a-checkbox>
+                                </a-checkbox-group>
+                                <a-checkbox-group v-if="subOp.hasChild > 0 && subOp.isRadio < 0&& (subOp.logicValue <= 0 || subOp.basisElementId === 1) && subOp.childList[0].event === 'showList'" v-model="subOp.elementId" style="width: 100%;">
+                                  <span v-for="(secondSub, index) in subOp.childList" >
+                                    <a-checkbox v-if="secondSub.event=='showList'"  :name="secondSub.parentId+''" @change="showList($event,secondSub.event,secondSub.questionName)" :key="index" :value="secondSub.basisElementCopyId">{{secondSub.questionName}}</a-checkbox>
+                                    <div  v-if="secondSub.event=='showList' && subOp.elementId.indexOf(secondSub.basisElementCopyId) > -1&&secondSub.questionName=='其他' "  style="display: inline-block;width: 300px;margin-right: 10px;">
+                                       <a-input :name="secondSub.childList[0].basisElementCopyId+''"  @blur="blurInput($event,secondSub.childList[0])"  :addonAfter="secondSub.childList[0].unit" :defaultValue="secondSub.childList[0].reportResultList && secondSub.childList[0].reportResultList.length && secondSub.childList[0].reportResultList[0].elementTextValue || ''" />
+                                    </div>
+                                    <add-table v-if="secondSub.event=='showList' && subOp.elementId.indexOf(secondSub.basisElementCopyId) > -1&&secondSub.questionName!=='其他'"  v-model="optionDataSource[secondSub.basisElementCopyId]" :dataSource="secondSub.medicineAllergyList?secondSub.medicineAllergyList:optionDataSource[secondSub.basisElementCopyId]"></add-table>
+                                    <add-table v-if="secondSub.event=='showList' &&secondSub.questionName=='其他'&& subOp.elementId.indexOf(secondSub.basisElementCopyId) > -1"  v-model="optionDataSource[secondSub.childList[0].parentId]" :dataSource="secondSub.medicineAllergyList?secondSub.medicineAllergyList:optionDataSource[secondSub.childList[0].parentId]"></add-table>
+                                  </span>
+                                 </a-checkbox-group>
+                              </a-col>
+                              <div v-if="subOp.hasChild > 0 && subOp.isRadio < 0 && (subOp.logicValue <= 0 || subOp.basisElementId === 1) && subOp.elementId.indexOf(secondSub.basisElementCopyId) > -1" v-for="(secondSub, index) in subOp.childList" :key="index">
+                                <div v-if="secondSub.hasChild > 0 && secondSub.isRadio === 0">
+                                  <a-row v-for="(thirdSub, index) in secondSub.childList" class="no-border">
+                                    <a-col :span="6" v-if="thirdSub.questionName">{{thirdSub.questionName}}</a-col>
+                                    <a-col :span="8" v-if="thirdSub.isWrite > 0">
+                                      <a-input style="width: 240px;" :name="thirdSub.basisElementCopyId+''" :defaultValue="thirdSub.reportResultList && thirdSub.reportResultList.length && thirdSub.reportResultList[0].elementTextValue || ''" v-if="!thirdSub.event && thirdSub.event == 'showList'" :addonAfter="thirdSub.unit"></a-input>
+                                      <a-date-picker v-if="thirdSub.event === 'showDate' && thirdSub.reportResultList && thirdSub.reportResultList.length && thirdSub.reportResultList[0].elementTextValue" :name="thirdSub.basisElementCopyId+''" :defaultValue="moment(thirdSub.reportResultList[0].elementTextValue)" style="width:240px" />
+                                      <a-date-picker v-if="thirdSub.event === 'showDate' && (!thirdSub.reportResultList || !thirdSub.reportResultList.length || !thirdSub.reportResultList[0].elementTextValue)" :name="thirdSub.basisElementCopyId+''" style="width:240px" />
+                                    </a-col>
+                                  </a-row>
+                                </div>
+                                <div v-if="secondSub.hasChild > 0 && secondSub.isRadio > 0">
+                                  <a-row class="no-border">
+                                    <a-col :span="6">{{secondSub.questionName}}</a-col>
+                                    <a-radio-group v-model="secondSub.basisElementId" :name="secondSub.basisElementCopyId+''">
+                                      <a-radio v-for="(thirdSub, index) in secondSub.childList" :value="thirdSub.basisElementCopyId" :key="index">{{thirdSub.questionName}}</a-radio>
+                                    </a-radio-group>
+                                  </a-row>
+                                </div>
+                              </div>
+                              <!-- <a-col :span="6" v-if="secondSub.hasChild > 0 && (secondSub.logicValue === 0 || subOp.elementId.indexOf(secondSub.basisElementCopyId) > -1) && secondSub.isWrite > 0" v-for="(secondSub,index) in subOp.childList">
+                                <a-input style="width:240px;" :name="secondSub.basisElementCopyId+''" :defaultValue="secondSub.reportResultList && secondSub.reportResultList.length && secondSub.reportResultList[0].elementTextValue"></a-input>
+                              </a-col> -->
+                              <a-col :span="18" v-if="subOp.hasChild > 0 && subOp.isRadio > 0">
+                                <a-radio-group :name="subOp.basisElementCopyId+''" v-model="subOp.basisElementId">
+                                  <a-radio v-for="(secondSub,index) in subOp.childList" :key="index" :value="secondSub.basisElementId">{{secondSub.questionName}}</a-radio>
+                                </a-radio-group>
+                              </a-col>
+                              <div v-for="(secondSub, index) in subOp.childList" v-if="subOp.hasChild > 0 && subOp.isRadio > 0 && secondSub.hasChild > 0 && secondSub.isRadio === 0 && (secondSub.logicValue <= 0 || subOp.basisElementId === secondSub.basisElementCopyId)">
+                                <a-col v-for="(thirdSub,index) in secondSub.childList">
+                                  <a-col :span="6">{{thirdSub.questionName}}</a-col>
+                                  <a-col :span="6" v-if="thirdSub.isWrite > 0">
+                                    <a-input :name="thirdSub.basisElementCopyId+''" :defaultValue="thirdSub.reportResultList && thirdSub.reportResultList.length && thirdSub.reportResultList[0].elementTextValue || ''" style="width:240px" :addonAfter="thirdSub.unit"></a-input>
+                                  </a-col>
+                                </a-col>
+                              </div>
+                              <a-row v-if="subOp.hasChild > 0 && subOp.isRadio === 0  && (!subOp.logicValue || subOp.basisElementId === 1)" v-for="(thirdSub, index) in subOp.childList" :key="index" class="no-border">
+                                <!-- 雾化治疗 -->
+                                <a-col :span="6">{{thirdSub.questionName}}</a-col>
+                                <a-col :span="16">
+                                  <a-radio-group v-if="thirdSub.simple === 1" :name="thirdSub.basisElementCopyId+''" v-model="thirdSub.basisElementId">
+                                    <a-radio :value="1">是</a-radio>
+                                    <a-radio :value="-1">否</a-radio>
+                                  </a-radio-group>
+                                  <a-date-picker v-if="thirdSub.event === 'showDate' && thirdSub.reportResultList && thirdSub.reportResultList.length && thirdSub.reportResultList[0].elementTextValue" :defaultValue="moment(thirdSub.reportResultList[0].elementTextValue)" :name="thirdSub.basisElementCopyId+''" style="width:240px" />
+                                  <a-date-picker v-if="thirdSub.event === 'showDate' && (!thirdSub.reportResultList || !thirdSub.reportResultList.length || !thirdSub.reportResultList[0].elementTextValue)" :name="thirdSub.basisElementCopyId+''" style="width:240px" />
+                                  <a-input v-if="thirdSub.isWrite > 0 && !thirdSub.event" :name="thirdSub.basisElementCopyId + ''" :defaultValue="thirdSub.reportResultList && thirdSub.reportResultList.length && thirdSub.reportResultList[0].elementTextValue || ''" style="width:240px" :addonAfter="thirdSub.unit" />
+                                    <!-- 注掉br是因为啰音类型会掉下去,别处需要换行再调整 -->
+                                  <!-- <br v-if="thirdSub.hasChild > 0 && thirdSub.isRadio > 0 && thirdSub.simple > 0"> -->
+                                  <a-radio-group v-if="thirdSub.hasChild > 0 && thirdSub.isRadio > 0 && (thirdSub.logicValue <= 0 || thirdSub.basisElementId === 1)" :name="thirdSub.basisElementCopyId+''" v-model="thirdSub.basisElementId" style="width: 100%">
+                                    <a-radio v-for="(fourth, index) in thirdSub.childList" :key="index" :value="fourth.basisElementCopyId">{{fourth.questionName}}</a-radio>
+                                  </a-radio-group>
+                                  <div v-if="thirdSub.hasChild > 0 && thirdSub.isRadio > 0 && (thirdSub.logicValue <= 0 || thirdSub.basisElementId === 1)">
+                                    <div v-for="(fourth, index) in thirdSub.childList" :key="index" v-if="fourth.hasChild > 0 && fourth.isRadio === 0 && (fourth.logicValue <= 0 || thirdSub.basisElementId === fourth.basisElementCopyId)">
+                                      <a-row class="no-border">
+                                        <a-col :span="6">{{fourth.childList[0].questionName}}</a-col>
+                                        <a-col :span="16" v-if="fourth.childList[0].isWrite > 0">
+                                          <a-input :name="fourth.childList[0].basisElementCopyId+''" style="width: 240px;" :defaultValue="fourth.childList[0].reportResultList && fourth.childList[0].reportResultList.length && fourth.childList[0].reportResultList[0].elementTextValue || ''" :addonAfter="fourth.childList[0].unit"></a-input>
+                                        </a-col>
+                                      </a-row>
+                                    </div>
+                                  </div>
+                                  <a-checkbox-group v-if="thirdSub.isRadio < 0 && thirdSub.hasChild > 0" v-model="thirdSub.elementId">
+                                    <a-checkbox v-for="(fourth,index) in thirdSub.childList" :key="index" :name="fourth.parentId+''" :value="fourth.basisElementCopyId">{{fourth.questionName}}</a-checkbox>
+                                  </a-checkbox-group>
+                                  <div v-if="thirdSub.hasChild > 0 && thirdSub.isRadio === 0 && (thirdSub.logicValue <= 0 || thirdSub.basisElementId === 1)">
+                                    <a-row v-for="(fourth, index) in thirdSub.childList" :key="index" class="ant-col-pull-12 no-border">
+                                      <a-col :span="12">{{fourth.questionName}}</a-col>
+                                      <a-col :span="12">
+                                        <a-radio-group v-if="fourth.simple === 1" :name="fourth.basisElementCopyId+''" v-model="fourth.basisElementId">
+                                          <a-radio :value="1">是</a-radio>
+                                          <a-radio :value="-1">否</a-radio>
+                                        </a-radio-group>
+                                      </a-col>
+                                    </a-row>
+                                  </div>
+                                </a-col>
+                              </a-row>
+                          </a-row>
+                        </a-col>
+                      </a-row>
+                    </div>
+                </a-form-item>
+              </a-form>
+         </div>
+       </a-col>
+     </a-row>
+     </a-card>
+  </div>
+</template>
+
+<script>
+import STree from '@/components/Tree/Tree'
+import { mapActions } from 'vuex'
+import { submit,getMedicineAllergyList,computeScore, getCollectDetail, getCollectElements, saveReport } from '@/api/basis'
+import _ from 'lodash'
+import $ from 'jquery'
+import moment from 'moment'
+import AddTable from "./model/table"
+import ocrLoad from "./model/upload"
+import { MyIcon } from '@/components/_util/util';
+export default {
+  name: 'collectDetail',
+  components: {
+    STree,
+    AddTable,
+    MyIcon,
+    ocrLoad
+  },
+  data() {
+    return {
+      baselineInfoStyle:{
+        overflow:"auto",
+        height:(window.screen.height-330)+'px',
+        "padding-right":"0px",
+        "border-right":"1px solid #ddd"
+      },
+      baselineFormStyle:{
+        height:(window.screen.height-350)+'px',
+      },
+      optionDataSource:[],
+      checkedList:[],
+      title: '报告采集',
+      openKeys: [],
+      defaultSelectedKeys: [],
+      orgTree: [],
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6}
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24}
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      visible: false,
+      confirmLoading: false,
+      patient: {},
+      list: [],
+      listArr: [],
+      list1: [],
+      question:{},
+      basisMaskId: undefined,
+      validateFlag: false,
+      reportCollectBaseId: this.$route.params.id,
+      computeMap: {
+        1208: '',
+        2727: '', 
+        1160: '',
+        4207: ''
+      },
+      disBlock :{
+        display: 'block',
+      },
+      bodyStyle: {
+        'padding-left': '0px'
+      },
+      imgUrl:"",
+      fileList:[]
+    }
+  },
+  beforeCreate (){
+    this.form = this.$form.createForm(this, {onFieldsChange: this.onFieldsChange, onValuesChange: this.onValuesChange})
+  },
+  activated() {
+    this.list = []
+  },
+  created() {
+     this.list=[]
+    var that = this
+    this.CloseSidebar()
+    // this.compute = _.debounce(this.compute, 300) //节流阀
+    var params = new URLSearchParams()
+    params.append('reportCollectBaseId', this.reportCollectBaseId)
+    getCollectDetail(params)
+    .then(res => {
+      that.patient = res.data.patient
+      that.orgTree = res.data.bmList
+      if(typeof this.$route.query.markId === 'undefined'){
+        that.basisMaskId = that.orgTree[0].basisMarkId
+        that.getElementsAnswer()
+        that.defaultSelectedKeys = [that.basisMaskId]
+      }
+    })
+    if(this.$route.query.markId){
+      this.basisMaskId = parseInt(this.$route.query.markId)
+      this.getElementsAnswer()
+      this.defaultSelectedKeys = [this.basisMaskId]
+    }
+  },
+  computed: {
+    validate() {
+      return function(index){
+        if(!this.validateFlag) return ''
+        var first = this.list[index]
+        if(first.required > 0) return 'error'
+      }
+    }
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    showList(e,type,name){
+      if(type !== 'showList') return;
+      if(e.target.checked){
+        if(name=="其他") return;
+        this.getMedicineAllergyList(name,e.target.value)
+      }else{
+         this.$set(this.optionDataSource,e.target.value,[])
+      }
+       
+    },
+    OCRload(data){
+      console.log(data);
+      this.$nextTick(function(){
+         this.list = this.initList(data.basisElementList)
+      })
+    },
+     saveImgUrl(data){
+      this.imgUrl=data;
+    },
+    getMedicineAllergyList(value,index){
+       const that = this
+       const params = new URLSearchParams()
+       params.append('microbeName', value)
+       getMedicineAllergyList(params).then(res => {
+        const  optionDataSource = _.map(res.data, function(v) {
+          return {
+            keyW: v.keyW,
+            microbeName: v.microbeName,
+            antibiotic: v.antibiotic,
+            antibioticResult: v.antibioticResult,
+            allergyValue: v.allergyValue
+          };
+       })   
+        that.$set(that.optionDataSource,index, optionDataSource)
+      }) 
+    },
+    blurInput(e,item){
+       this.getMedicineAllergyList(e.target.value,item.parentId)
+    },
+    handleClick(e) {
+      this.basisMaskId = e.key
+      this.getElementsAnswer()
+    },
+    handleSubmit () {
+      const { form: { validateFieldsAndScroll } } = this
+      this.confirmLoading = true
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          console.log('values', values)
+          setTimeout(() => {
+            this.visible = false
+            this.confirmLoading = false
+            this.$emit('ok', values)
+          }, 1500)
+        } else {
+          this.confirmLoading = false
+        }
+      })
+    },
+    handleCancel () {
+      this.visible = false
+    },
+    getElementsAnswer (){
+      var that = this;
+      var params = new URLSearchParams();
+      params.append('basisMarkId', this.basisMaskId)
+      params.append('reportCollectBaseId', this.reportCollectBaseId)
+      getCollectElements(params)
+      .then(res => {
+        that.imgUrl=res.url;
+        that.fileList=[{
+          uid: '-1',
+          name: 'xxx.png',
+          status: 'done',
+          url: res.url,
+        }]
+        that.list = that.initList(res.basisElementList)
+      })
+    },
+    generateAnswers (){
+      var result = []
+      _.each(this.list, function(item){
+        if(item.simple > 0){
+          result.push({
+            reportResultId: (item.reportResultList && item.reportResultList.length) ? item.reportResultList[0].reportResultId : '',
+            basisElementId: item.basisElementCopyId,
+            elementNumValue: typeof $('input[name="' + item.basisElementCopyId + '"]:checked').val() !== 'undefined' ? $('input[name="' + item.basisElementCopyId + '"]:checked').val() : '',
+            elementTextValue: ''
+          })
+        }else if(item.isWrite > 0){
+          var text = $('[name="' + item.basisElementCopyId + '"]').hasClass('ant-calendar-picker') ? $('[name="' + item.basisElementCopyId + '"] input').val() : $('[name="' + item.basisElementCopyId + '"]').val()
+          result.push({
+            reportResultId: (item.reportResultList && item.reportResultList.length) ? item.reportResultList[0].reportResultId : '',
+            basisElementId: item.basisElementCopyId,
+            elementTextValue: text,
+            elementNumValue: ''
+          }) 
+        }
+        if(item.hasChild > 0){
+          if(item.childList[0].type === 1){
+            _.each(item.childList, function(sub){
+              if(sub.isWrite > 0){
+                var text = $('[name="' + sub.basisElementCopyId + '"]').hasClass('ant-calendar-picker') ? $('[name="' + sub.basisElementCopyId + '"] input').val() : $('[name="' + sub.basisElementCopyId + '"]').val()
+                result.push({
+                  reportResultId: (sub.reportResultList && sub.reportResultList.length) ? sub.reportResultList[0].reportResultId : '',
+                  basisElementId: sub.basisElementCopyId,
+                  elementTextValue: text,
+                  elementNumValue: ''
+                })
+              }
+              if(sub.simple > 0){
+                result.push({
+                  reportResultId: (sub.reportResultList && sub.reportResultList.length) ? sub.reportResultList[0].reportResultId : '',
+                  basisElementId: sub.basisElementCopyId,
+                  elementNumValue: typeof $('input[name="' + sub.basisElementCopyId + '"]:checked').val() !== 'undefined' ? $('input[name="' + sub.basisElementCopyId + '"]:checked').val() : '',
+                  elementTextValue: ''
+                })
+              }
+              
+              if(sub.hasChild > 0){
+                if(sub.isRadio !== 0){
+                  _.each(sub.childList, function(third){
+                    result.push({
+                      reportResultId: third.reportResultList && third.reportResultList.length ? third.reportResultList[0].reportResultId : '',
+                      basisElementId: third.basisElementCopyId,
+                      elementNumValue: $('[value="' + third.basisElementCopyId + '"][name="' + third.parentId + '"]').prop('checked') ? 1 : -1,
+                      elementTextValue: ''
+                    })
+                  })
+                }
+                _.each(sub.childList, function(third){
+                  if(third.simple > 0){
+                    result.push({
+                      reportResultId: (third.reportResultList && third.reportResultList.length) ? third.reportResultList[0].reportResultId : '',
+                      basisElementId: third.basisElementCopyId,
+                      elementNumValue: typeof $('input[name="' + third.basisElementCopyId + '"]:checked').val() !== 'undefined' ? $('input[name="' + third.basisElementCopyId + '"]:checked').val() : '',
+                      elementTextValue: ''
+                    })
+                  }
+                  if(third.isWrite > 0){
+                    var text = $('[name="' + third.basisElementCopyId + '"]').hasClass('ant-calendar-picker') ? $('[name="' + third.basisElementCopyId + '"] input').val() : $('[name="' + third.basisElementCopyId + '"]').val()
+                    result.push({
+                      reportResultId: (third.reportResultList && third.reportResultList.length) ? third.reportResultList[0].reportResultId : '',
+                      basisElementId: third.basisElementCopyId,
+                      elementTextValue: text || '',
+                      elementNumValue: ''
+                    })
+                  }
+                  if(third.hasChild > 0){
+                    
+                    _.each(third.childList,function(fourth){
+                      if(third.isRadio !== 0){
+                        result.push({
+                          reportResultId: fourth.reportResultList && fourth.reportResultList.length ? fourth.reportResultList[0].reportResultId : '',
+                          basisElementId: fourth.basisElementCopyId,
+                          elementNumValue: $('[value="' + fourth.basisElementCopyId + '"][name="' + fourth.parentId + '"]').prop('checked') ? 1 : -1,
+                          elementTextValue: ''
+                        })
+                      }
+                      if(fourth.simple > 0){
+                        result.push({
+                          reportResultId: (fourth.reportResultList && fourth.reportResultList.length) ? fourth.reportResultList[0].reportResultId : '',
+                          basisElementId: fourth.basisElementCopyId,
+                          elementNumValue: typeof $('input[name="' + fourth.basisElementCopyId + '"]:checked').val() !== 'undefined' ? $('input[name="' + fourth.basisElementCopyId + '"]:checked').val() : '',
+                          elementTextValue: ''
+                        })
+                      }
+                      if(fourth.isWrite > 0){
+                        var text = $('[name="' + fourth.basisElementCopyId + '"]').hasClass('ant-calendar-picker') ? $('[name="' + fourth.basisElementCopyId + '"] input').val() : $('[name="' + fourth.basisElementCopyId + '"]').val()
+                        result.push({
+                          reportResultId: (fourth.reportResultList && fourth.reportResultList.length) ? fourth.reportResultList[0].reportResultId : '',
+                          basisElementId: fourth.basisElementCopyId,
+                          elementTextValue: text || '',
+                          elementNumValue: ''
+                        })
+                      }
+                      if(fourth.hasChild > 0 && fourth.isRadio === 0){
+                        _.each(fourth.childList, function(fifth){
+                          if(fifth.isWrite > 0){
+                            var text = $('[name="' + fifth.basisElementCopyId + '"]').hasClass('ant-calendar-picker') ? $('[name="' + fifth.basisElementCopyId + '"] input').val() : $('[name="' + fifth.basisElementCopyId + '"]').val()
+                            result.push({
+                              reportResultId: (fifth.reportResultList && fifth.reportResultList.length) ? fifth.reportResultList[0].reportResultId : '',
+                              basisElementId: fifth.basisElementCopyId,
+                              elementTextValue: text || '',
+                              elementNumValue: ''
+                            })
+                          }
+                          if(fifth.simple > 0){
+                            result.push({
+                              reportResultId: (fifth.reportResultList && fifth.reportResultList.length) ? fifth.reportResultList[0].reportResultId : '',
+                              basisElementId: fifth.basisElementCopyId,
+                              elementNumValue: typeof $('input[name="' + fifth.basisElementCopyId + '"]:checked').val() !== 'undefined' ? $('input[name="' + fifth.basisElementCopyId + '"]:checked').val() : '',
+                              elementTextValue: ''
+                            })
+                          }
+                          if(fifth.hasChild > 0 && fifth.isRadio === 0){
+                            _.each(fifth.childList, function(sixth){
+                              if(sixth.isWrite > 0){
+                                var text = $('[name="' + sixth.basisElementCopyId + '"]').hasClass('ant-calendar-picker') ? $('[name="' + sixth.basisElementCopyId + '"] input').val() : $('[name="' + sixth.basisElementCopyId + '"]').val()
+                                result.push({
+                                  reportResultId: (sixth.reportResultList && sixth.reportResultList.length) ? sixth.reportResultList[0].reportResultId : '',
+                                  basisElementId: sixth.basisElementCopyId,
+                                  elementTextValue: text || '',
+                                  elementNumValue: ''
+                                })
+                              }
+                            })
+                          }
+                        })
+                      }else if(fourth.hasChild > 0 && fourth.isRadio !== 0){
+                        _.each(fourth.childList, function(fifth){
+                          result.push({
+                            reportResultId: fifth.reportResultList && fifth.reportResultList.length ? fifth.reportResultList[0].reportResultId : '',
+                            basisElementId: fifth.basisElementCopyId,
+                            elementNumValue: $('[value="' + fifth.basisElementCopyId + '"][name="' + fifth.parentId + '"]').prop('checked') ? 1 : -1,
+                            elementTextValue: ''
+                          })
+                        })
+                      }
+                    })
+                  }
+                })
+              }
+            })
+          }else{
+            // 是选项,单选或多选
+            if(item.isRadio !== 0){
+              _.each(item.childList, function(sub){
+                result.push({
+                  reportResultId: sub.reportResultList && sub.reportResultList.length ? sub.reportResultList[0].reportResultId : '',
+                  basisElementId: sub.basisElementCopyId,
+                  elementNumValue: $('[value="' + sub.basisElementCopyId + '"][name="' + sub.parentId + '"]').prop('checked') ? 1 : -1,
+                  elementTextValue: ''
+                })
+                // TODO:此处后面需看还有没有更多情况
+                if(sub.hasChild > 0 && sub.isWrite > 0){
+                  result.push({
+                    basisAnswer: sub.childList[0].reportResultList && sub.childList[0].reportResultList.length ? sub.childList[0].reportResultList[0].reportResultId : '',
+                    basisElementId: sub.childList[0].basisElementCopyId,
+                    elementTextValue: $('[name="' + sub.childList[0].basisElementCopyId + '"]').val(),
+                    elementNumValue: ''
+                  })
+                }
+              })
+            }
+          }
+        }
+      })
+      return result
+    },
+    save (){
+      var that = this
+      var result = this.generateAnswers()
+      console.log(result)
+      var params = new URLSearchParams();
+      params.append('reportResult', JSON.stringify(result))
+      params.append('reportCollectBaseId', this.reportCollectBaseId)
+      params.append('basisMarkId', this.basisMaskId)
+      params.append('url', this.imgUrl)
+      saveReport(params)
+      .then(res => {
+        console.log(res)
+        that.$message.success(res.msg, function(){
+          var href = location.href.replace(/\?markId=[\d]+/,'')
+          location.href = href + '?markId=' + that.basisMaskId
+        })
+      })
+      .catch(error => {
+        console.log(error)
+      })
+    },
+    submit (){
+      this.form.validateFieldsAndScroll((err, values) => {
+        if (!err) {
+          // eslint-disable-next-line no-console
+          console.log('Received values of form: ', values)
+        }
+      })
+      return false
+    },
+    initList (list){
+      var that = this
+      _.each(list, function(a){
+        if(a.simple > 0 && a.reportResultList && a.reportResultList.length){
+          a.basisElementId = a.reportResultList[0].elementNumValue
+        }
+        if(typeof a.computeElement !== 'undefined' && a.computeElement === 0 && a.reportResultList && a.reportResultList.length) {
+          that.computeMap[a.basisElementCopyId] = a.reportResultList[0].elementTextValue
+        }
+        if(a.hasChild > 0 && a.isRadio === 0){
+          _.each(a.childList,function(b){
+            if(typeof b.computeElement !== 'undefined' && b.computeElement === 0 && b.reportResultList && b.reportResultList.length) {
+              that.computeMap[b.basisElementCopyId] = b.reportResultList[0].elementTextValue
+            }
+            if(b.simple > 0 && b.reportResultList && b.reportResultList.length){
+              b.basisElementId = b.reportResultList[0].elementNumValue
+            }
+            //单选
+            if(b.hasChild > 0 && b.isRadio > 0){
+              var re = _.filter(b.childList, function(v){return v.reportResultList && v.reportResultList.length && v.reportResultList[0].elementNumValue > 0})
+              if(re.length) b.basisElementId = re[0].basisElementId
+              _.each(b.childList, function(c){
+                if(c.logicValue > 0 && c.hasChild > 0 && c.isRadio === 0){
+                  _.each(c.childList, function(d){
+                    if(d.simple > 0 && d.reportResultList && d.reportResultList.length){
+                      d.basisElementId = d.reportResultList[0].elementNumValue
+                    }
+                    if(d.hasChild > 0 && d.isRadio === 0){
+                      _.each(d.childList, function(e){
+                        if(e.simple > 0 && e.reportResultList && e.reportResultList.length){
+                          e.basisElementId = e.reportResultList[0].elementNumValue
+                        }
+                      })
+                    }
+                  })
+                }
+                if(c.logicValue > 0 && c.hasChild > 0 && c.isRadio > 0){
+
+                }
+              })
+            }
+            //多选
+            if(b.hasChild > 0 && b.isRadio < 0){
+              if(b.childList[0].reportResultList && b.childList[0].reportResultList.length){
+                b.elementId = _.map(_.filter(_.flatten(_.map(b.childList,function(v){return v.reportResultList})),function(v){return v.elementNumValue > 0}),function(v){return v.basisElementId})
+              }else{
+                b.elementId = []
+              }
+              //多选框控制子选项
+              _.each(b.childList,function(c){
+                if(c.logicValue > 0 && c.reportResultList && c.reportResultList.length && c.reportResultList[0].elementNumValue > 0){
+                  var selected = _.filter(_.flatten(_.map(c.childList,function(v){return v.reportResultList})),function(v){return v.elementNumValue > 0})
+                  if(selected.length){
+                    c.basisElementId = _.map(selected,function(v){return v.basisElementId})[0]
+                  }
+                }
+              })
+            }
+            //子选项,第三层
+            if(b.hasChild > 0 && b.isRadio === 0){
+              _.each(b.childList, function(c){
+                if(c.simple > 0 && c.reportResultList && c.reportResultList.length){
+                  c.basisElementId = c.reportResultList[0].elementNumValue
+                }
+                if(c.hasChild > 0 && c.isRadio === 0){
+                  _.each(c.childList, function(d){
+                    if(d.simple > 0 && d.reportResultList && d.reportResultList.length){
+                      d.basisElementId = d.reportResultList[0].elementNumValue
+                    }
+                    if(d.hasChild > 0 && d.isRadio < 0){
+                      if(d.childList[0].reportResultList && d.childList[0].reportResultList.length){
+                        d.elementId = _.map(_.filter(_.flatten(_.map(d.childList,function(v){return v.reportResultList})),function(v){return v.elementNumValue > 0}),function(v){return v.basisElementId})
+                      }else{
+                        d.elementId = []
+                      }
+                    }else if(d.hasChild > 0 && d.isRadio > 0){
+                      if(d.childList[0].reportResultList && d.childList[0].reportResultList.length){
+                        var selected = _.filter(_.flatten(_.map(d.childList,function(v){ return v.reportResultList })),function(v){ return v.elementNumValue > 0 })
+                        if(selected.length){
+                          d.basisElementId = _.map(selected,function(v){ return v.basisElementId })[0]
+                        }
+                      }
+                    }
+                  })
+                }
+                if(c.hasChild > 0 && c.isRadio < 0){
+                  if(c.childList[0].reportResultList && c.childList[0].reportResultList.length){
+                    c.elementId = _.map(_.filter(_.flatten(_.map(c.childList,function(v){return v.reportResultList})),function(v){return v.elementNumValue > 0}),function(v){return v.basisElementId})
+                  }else{
+                    c.elementId = []
+                  }
+                  _.each(c.childList, function(d){
+                    if(d.hasChild > 0 && d.isRadio > 0){
+                      if(d.childList[0].reportResultList && d.childList[0].reportResultList.length){
+                        var selected = _.filter(_.flatten(_.map(d.childList,function(v){ return v.reportResultList })),function(v){ return v.elementNumValue > 0 })
+                        if(selected.length){
+                          d.basisElementId = _.map(selected,function(v){ return v.basisElementId })[0]
+                        }
+                      }
+                    }
+                  })
+                }
+                if(c.hasChild > 0 && c.isRadio > 0){
+                  if(c.childList[0].reportResultList && c.childList[0].reportResultList.length){
+                    var selected = _.filter(_.flatten(_.map(c.childList,function(v){ return v.reportResultList })),function(v){ return v.elementNumValue > 0 })
+                    if(selected.length){
+                      c.basisElementId = _.map(selected,function(v){ return v.basisElementId })[0]
+                    }
+                  }
+                }
+              })
+            }
+          })
+        }else if(a.hasChild > 0 && a.isRadio < 0){
+          if(a.childList[0].reportResultList && a.childList[0].reportResultList.length){
+            a.elementId = _.map(_.filter(_.flatten(_.map(a.childList,function(v){return v.reportResultList})),function(v){return v.elementNumValue > 0}),function(v){return v.basisElementId})
+          }else{
+            a.elementId = []
+          }
+        }else if(a.hasChild > 0 && a.isRadio > 0){
+          var re = _.filter(a.childList, function(v){return v.reportResultList && v.reportResultList.length && v.reportResultList[0].elementNumValue > 0})
+          if(re.length) a.basisElementId = re[0].basisElementId
+        }
+      })
+      return list
+    },
+    compute (id){
+      console.log(id)
+      var that = this
+      var result = this.generateAnswers()
+      var params = new URLSearchParams();
+      params.append('basisElementId', id)
+      params.append('basisAnswer', JSON.stringify(result))
+      computeScore(params)
+        .then(res => {
+          console.log(res)
+          console.log('计算成功,结果为:' + res.data[id])
+          if(typeof res.data[id] !== 'undefined') {
+            that.computeMap[id] = res.data[id]
+          }
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+ /deep/ #baselineHeader{
+    .ant-card-body{
+      padding: 10px
+    }
+  }
+  
+  .ml-10{
+    margin-left: 10px; 
+  }
+ .UserNameCard{
+   font-size: 20px;
+   .anticon{
+         font-size: 26px;
+    vertical-align: text-bottom;
+        position: relative;
+    left: -5px;
+   }
+ }
+.clear {
+  clear: both;
+}
+.ant-col-4 .ant-calendar-picker,
+.ant-col-6 .ant-calendar-picker {
+  width: 100%;
+}
+.ant-checkbox-wrapper + .ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+    background-color: #CFF4FF;
+}
+
+
+/deep/.ant-menu-vertical .ant-menu-item:after, .ant-menu-vertical-left .ant-menu-item:after, .ant-menu-vertical-right .ant-menu-item:after, .ant-menu-inline .ant-menu-item:after{
+      border-right: 6px solid #1890ff;
+}
+/deep/ .ant-row {
+  clear: both;
+}
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 10px 15px;
+  }
+  /deep/ .tree-title {
+    border-right: 1px solid #e8e8e8;
+    color: #25aefe;
+    font-size: 22px;
+    padding-left: 70px;
+    padding-top: 5px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    padding-left: 20p;
+    background-position-x: 15px;
+    padding-bottom: 26px;
+  }
+  /deep/ .ant-menu-inline > .ant-menu-submenu > .ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline.ant-menu-submenu-open {
+    background-color: rgba(245,251,255);
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245,251,255);
+      li {
+        border-bottom: none;
+            height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+    /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+    .ant-menu-item:hover,
+    .ant-menu-item-active,
+    .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+    .ant-menu-submenu-active,
+    .ant-menu-submenu-title:hover {
+      background-color: #eaf2fd;
+    }
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+  /deep/ .ant-menu-submenu {
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+      .action {
+        font-size: 18px;
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+  .fr {
+    float: right;
+  }
+  .btn {
+    margin-right: 10px;
+  }
+  .baselineForm {
+    height: 350px;
+    overflow: auto;
+
+    padding: 40px 20px;
+    .ant-row {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+      &.no-border{
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+      &:hover {
+      }
+    }
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      label:after {
+        content: '';
+      }
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+      }
+    }
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+.question-title{
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+.question-des{
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding:0 10px ;
+}
+.question-t{
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle{
+  width: 120px;
+}
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+     padding-right: 0px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/account/center/components/mask-1.vue b/src/views/account/center/components/mask-1.vue
new file mode 100644
index 0000000000..4caacb63c0
--- /dev/null
+++ b/src/views/account/center/components/mask-1.vue
@@ -0,0 +1,1606 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" :layout="formLayout" class="base-form">
+            <div class="clearfix" style="position:relative;top: 20px;">
+              <a-button class="btn fr" type="primary" @click="_importData">导入数据</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit && totalStatus == 0">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!</p>
+              <div class="title">1.基本病史</div>
+              <a-form-item label="(1) 采集标本类型" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-checkbox-group v-decorator="['a1', {...selectRequired, initialValue: initValue('a1', 'array')}]" @change="handleChange">
+                  <a-checkbox value="1">全血</a-checkbox>
+                  <a-checkbox value="2">血清</a-checkbox>
+                  <a-checkbox value="3">未采</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="(2) 患者支扩确诊时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-month-picker placeholder="请选择" @change="changeDate" v-decorator="['a3', {...dateRequire, initialValue: initValue('a3', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-month-picker>
+              </a-form-item>
+              <a-form-item label="(3) 访视类型" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b23', {...selectRequired, initialValue: initValue('b23')}]">
+                  <a-radio value="1">急性加重期</a-radio>
+                  <a-radio value="2">稳定期</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(4) 主要临床症状(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-checkbox-group v-decorator="['a4', {...selectRequired, initialValue: initValue('a4', 'array')}]" class="control-m-line">
+                  <a-checkbox value="1" :checked="controla44" @change="changeSelect($event, 'controla44')">咳嗽</a-checkbox>
+                  <a-checkbox value="2" :checked="controla41" @change="changeSelect($event, 'controla41')">咳痰</a-checkbox>
+                  <a-checkbox value="7">活动后气促</a-checkbox>
+                  <a-checkbox value="3" :checked="controla43" @change="changeSelect($event, 'controla43')">痰血</a-checkbox>
+                  <a-checkbox value="4" :checked="controla42" @change="changeSelect($event, 'controla42')">咯血</a-checkbox>
+                  <a-checkbox value="10" :checked="controla45" @change="changeSelect($event, 'controla45')">疲劳</a-checkbox>
+                  <a-checkbox value="5">胸闷</a-checkbox>
+                  <a-checkbox value="6">喘息</a-checkbox>
+                  <a-checkbox value="8">胸痛</a-checkbox>
+                  <a-checkbox value="9">发热</a-checkbox>
+                  <a-checkbox value="11">纳差</a-checkbox>
+                  <a-checkbox value="12">消瘦</a-checkbox>
+                  <a-checkbox value="14">中耳炎</a-checkbox>
+                  <a-checkbox value="15">听力丧失</a-checkbox>
+                  <a-checkbox value="13" :checked="controla413" @change="changeSelect($event, 'controla413')">其他</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="咳嗽程度" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla44">
+                <a-radio-group v-decorator="['a46', {...selectRequired, initialValue: initValue('a46')}]">
+                  <a-radio value="1">轻度咳嗽</a-radio>
+                  <a-radio value="2">中度咳嗽</a-radio>
+                  <a-radio value="3">重度咳嗽</a-radio>
+                  <a-radio value="4">极重度咳嗽</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="痰量" v-if="controla41" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input addonAfter="ml/日" style="width: 240px;" v-decorator="['a41', {...inputRequired, initialValue: initValue('a41')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="痰颜色评分(单选)" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla41">
+                <a-popover>
+                  <template slot="content">
+                    <img src="../../../../assets/murry.png" style="height: 260px;" />
+                  </template>
+                  <a-icon type="exclamation-circle" style="position: relative;left: -20px;color: #0399ec;cursor: pointer;" />
+                </a-popover>
+                <a-radio-group v-decorator="['a43', {...selectRequired, initialValue: initValue('a43')}]">
+                  <a-radio value="1">白色或清亮</a-radio>
+                  <a-radio value="2">黄白色</a-radio>
+                  <a-radio value="3">黄绿色</a-radio>
+                  <a-radio value="4">浅至深褐色</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="痰血量" v-if="controla43" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input addonAfter="ml/日" style="width: 240px;" v-decorator="['a44', {...inputRequired, initialValue: initValue('a44')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="咯血量(最多)" v-if="controla42" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input addonAfter="ml/日" style="width: 240px;" v-decorator="['a42', {...inputRequired, initialValue: initValue('a42')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="疲劳程度" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla45">
+                <a-radio-group v-decorator="['a47', {...selectRequired, initialValue: initValue('a47')}]">
+                  <a-radio value="1">我感到有点疲劳</a-radio>
+                  <a-radio value="2">我感到疲劳但仍然可以做我想做的事情</a-radio>
+                  <a-radio value="3">我感到疲劳而不能做一些我想做的事情</a-radio>
+                  <a-radio value="4">我感到非常疲劳而无法进行日常活动</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="其他症状" v-if="controla413" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['a45', {...inputRequired, initialValue: initValue('a45')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <div class="title">2.既往病史</div>
+              <a-form-item label="(1) 过去两年的住院急性加重次数" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input addonAfter="次" style="width: 240px;" v-decorator="['b1', {...inputRequired, initialValue: initValue('b1')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(2) 过去一年的住院急性加重次数" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input addonAfter="次" style="width: 240px;" v-decorator="['b2', {...inputRequired, initialValue: initValue('b2')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(3) 过去一年的急性加重次数" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input addonAfter="次" style="width: 240px;" v-decorator="['b3', {...inputRequired, initialValue: initValue('b3')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <span slot="label"><span>(4) 最后一次因急性加重住院的时间</span><span style="color: red;"> (yyyy-mm-dd)</span></span>
+                <a-input style="width: 240px;" v-decorator="['b4', {rules: [{ required: isIcon, message: '请填写!' }], initialValue: initValue('b4')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item class="no-border" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <span slot="label"><span>最后一次急性加重出院的时间</span><span style="color: red;"> (yyyy-mm-dd)</span></span>
+                <a-input style="width: 240px;" v-decorator="['b41', {initialValue: initValue('b41')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(5) 有无病因相关的病史及事件(可多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-checkbox-group v-decorator="['b5', {...selectRequired, initialValue: initValue('b5', 'array')}]">
+                  <a-checkbox value="1" :disabled="detect('b5', '7') || initB5">麻疹</a-checkbox>
+                  <a-checkbox value="2" :disabled="detect('b5', '7') || initB5">百日咳</a-checkbox>
+                  <a-checkbox value="3" :disabled="detect('b5', '7') || initB5">肺结核</a-checkbox>
+                  <a-checkbox value="4" :disabled="detect('b5', '7') || initB5">NTM</a-checkbox>
+                  <a-checkbox value="5" :disabled="detect('b5', '7') || initB5">溺水</a-checkbox>
+                  <a-checkbox value="8" :disabled="detect('b5', '7') || initB5">肺炎</a-checkbox>
+                  <a-checkbox value="6" :disabled="detect('b5', '7') || initB5" :checked="controlb51" @change="changeSelect($event, 'controlb51')">其他</a-checkbox>
+                  <a-checkbox value="7" @change="handleNone($event, 'b5', '7', ['controlb51'])">无</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb51">
+                <a-input style="width: 240px;" v-decorator="['b51', {...inputRequired, initialValue: initValue('b51')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(6) 目前合并呼吸系统相关疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-checkbox-group v-decorator="['b6', {...selectRequired, initialValue: initValue('b6', 'array')}]">
+                  <a-checkbox value="1" :disabled="detect('b6', '6') || initB6" :checked="controlb61" @change="changeSelect($event, 'controlb61')">鼻炎</a-checkbox>
+                  <a-checkbox value="2" :disabled="detect('b6', '6') || initB6" :checked="controlb62" @change="changeSelect($event, 'controlb62')">鼻窦炎</a-checkbox>
+                  <a-checkbox value="3" :disabled="detect('b6', '6') || initB6" :checked="controlb63" @change="changeSelect($event, 'controlb63')">鼻息肉</a-checkbox>
+                  <a-checkbox value="4" :disabled="detect('b6', '6') || initB6" :checked="controlb64" @change="changeSelect($event, 'controlb64')">哮喘</a-checkbox>
+                  <a-checkbox value="5" :disabled="detect('b6', '6') || initB6" :checked="controlb65" @change="changeSelect($event, 'controlb65')">慢阻肺</a-checkbox>
+                  <a-checkbox value="8" :disabled="detect('b6', '6') || initB6" :checked="controlb68" @change="changeSelect($event, 'controlb68')">中耳炎</a-checkbox>
+                  <a-checkbox value="7" :disabled="detect('b6', '6') || initB6" :checked="controlb67" @change="changeSelect($event, 'controlb67')">其他</a-checkbox>
+                  <a-checkbox value="6" @change="handleNone($event, 'b6', '6', ['controlb61','controlb62','controlb63','controlb64','controlb65','controlb68','controlb67'])">无</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item class="no-border" label="鼻炎具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb61">
+                <a-month-picker placeholder="请选择" style="width: 240px;" v-decorator="['b61', {initialValue: initValue('b61', 'time')}]" :disabledDate="disabledDate"></a-month-picker>
+              </a-form-item>
+              <a-form-item class="no-border" label="鼻窦炎具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb62">
+                <a-month-picker placeholder="请选择" style="width: 240px;" v-decorator="['b62', {initialValue: initValue('b62', 'time')}]" :disabledDate="disabledDate"></a-month-picker>
+              </a-form-item>
+              <a-form-item class="no-border" label="鼻息肉具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb63">
+                <a-month-picker placeholder="请选择" style="width: 240px;" v-decorator="['b63', {initialValue: initValue('b63', 'time')}]" :disabledDate="disabledDate"></a-month-picker>
+              </a-form-item>
+              <a-form-item class="no-border" label="哮喘具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb64">
+                <a-month-picker placeholder="请选择" style="width: 240px;" v-decorator="['b64', {...dateRequire, initialValue: initValue('b64', 'time')}]" :disabledDate="disabledDate"></a-month-picker>
+              </a-form-item>
+              <a-form-item class="no-border" label="慢阻肺具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb65">
+                <a-month-picker placeholder="请选择" style="width: 240px;" v-decorator="['b65', {...dateRequire, initialValue: initValue('b65', 'time')}]" :disabledDate="disabledDate"></a-month-picker>
+              </a-form-item>
+              <a-form-item class="no-border" label="中耳炎具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb68">
+                <a-month-picker placeholder="请选择" style="width: 240px;" v-decorator="['b66', {initialValue: initValue('b66', 'time')}]" :disabledDate="disabledDate"></a-month-picker>
+              </a-form-item>
+              <a-form-item label="疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb67">
+                <a-input style="width: 240px;" v-decorator="['b67', {...inputRequired, initialValue: initValue('b67')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(7) 有无其他疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b70', {...require2, initialValue: initValue('b70')}]" @change="changeRadio($event, 'controlb70')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb70">
+                <a-form-item label="1.心脑血管系统" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b7', {...require2, initialValue: initValue('b7')}]" @change="changeRadio($event, 'controlb7')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="心脑血管系统疾病类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb7">
+                  <a-checkbox-group v-decorator="['b71', {...selectRequired, initialValue: initValue('b71', 'array')}]" class="control-m-line">
+                    <a-checkbox value="1">心梗</a-checkbox>
+                    <a-checkbox value="2">心绞痛</a-checkbox>
+                    <a-checkbox value="3">冠心病</a-checkbox>
+                    <a-checkbox value="4">慢性心衰</a-checkbox>
+                    <a-checkbox value="5">心律失常</a-checkbox>
+                    <a-checkbox value="6">心脏瓣膜病</a-checkbox>
+                    <a-checkbox value="7">肺动脉高压</a-checkbox>
+                    <a-checkbox value="8">高血压病</a-checkbox>
+                    <a-checkbox value="9">中风或短暂性缺血发作</a-checkbox>
+                    <a-checkbox value="10">外周血管疾病</a-checkbox>
+                    <a-checkbox value="11" :checked="controlb72" @change="changeSelect($event, 'controlb72')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="其他心脑血管疾病" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb7 && controlb72">
+                  <a-input style="width: 240px;" v-decorator="['b72', {...inputRequired, initialValue: initValue('b72')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="2.消化系统疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b8', {...require2, initialValue:  initValue('b8')}]" @change="changeRadio($event, 'controlb8')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="消化系统疾病类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb8">
+                  <a-checkbox-group v-decorator="['b81', {...selectRequired, initialValue: initValue('b81', 'array')}]">
+                    <a-checkbox value="1">炎症性肠病</a-checkbox>
+                    <a-checkbox value="2">胃食管反流</a-checkbox>
+                    <a-checkbox value="3">消化道溃疡</a-checkbox>
+                    <a-checkbox value="4">慢性肝病</a-checkbox>
+                    <a-checkbox value="5" :checked="controlb82" @change="changeSelect($event, 'controlb82')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="其他消化系统疾病" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb8 && controlb82">
+                  <a-input style="width: 240px;" v-decorator="['b82', {...inputRequired, initialValue: initValue('b82')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="3.内分泌系统" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b9', {...require2, initialValue:  initValue('b9')}]" @change="changeRadio($event, 'controlb9')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="内分泌系统疾病类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb9">
+                  <a-checkbox-group v-decorator="['b91', {...selectRequired, initialValue: initValue('b91', 'array')}]">
+                    <a-checkbox value="1">糖尿病</a-checkbox>
+                    <a-checkbox value="2">骨质疏松</a-checkbox>
+                    <a-checkbox value="3">高脂血症</a-checkbox>
+                    <a-checkbox value="4">甲亢</a-checkbox>
+                    <a-checkbox value="5">甲减</a-checkbox>
+                    <a-checkbox value="6">高尿酸血症</a-checkbox>
+                    <a-checkbox value="7" :checked="controlb917" @change="changeSelect($event, 'controlb917')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他内分泌系统疾病" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb9 && controlb917">
+                  <a-input style="width: 240px;" v-decorator="['b92', {...inputRequired, initialValue: initValue('b92')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="4.血液系统疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b10', {...require2, initialValue:  initValue('b10')}]" @change="changeRadio($event, 'controlb10')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="血液系统疾病类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb10">
+                  <a-checkbox-group v-decorator="['b101', {...selectRequired, initialValue: initValue('b101', 'array')}]">
+                    <a-checkbox value="1">贫血</a-checkbox>
+                    <a-checkbox value="2">白血病</a-checkbox>
+                    <a-checkbox value="3">淋巴瘤</a-checkbox>
+                    <a-checkbox value="4" :checked="controlb1014" @change="changeSelect($event, 'controlb1014')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他血液系统疾病类型" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb1014">
+                  <a-input style="width: 240px;" v-decorator="['b102', {...inputRequired, initialValue: initValue('b102')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="5.泌尿系统疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b11', {...require2, initialValue:  initValue('b11')}]" @change="changeRadio($event, 'controlb11')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="泌尿系统疾病类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb11">
+                  <a-checkbox-group v-decorator="['b111', {...selectRequired, initialValue: initValue('b111', 'array')}]">
+                    <a-checkbox value="1">慢性肾病</a-checkbox>
+                    <a-checkbox value="2">慢性尿路感染</a-checkbox>
+                    <a-checkbox value="3" :checked="controlb1113" @change="changeSelect($event, 'controlb1113')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="其他泌尿系统疾病类型:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb11 && controlb1113">
+                  <a-input style="width: 240px;" v-decorator="['b112', {...inputRequired, initialValue: initValue('b112')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="6.风湿系统疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b12', {...require2, initialValue:  initValue('b12')}]" @change="changeRadio($event, 'controlb12')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="风湿系统疾病类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb12">
+                  <a-checkbox-group v-decorator="['b121', {...selectRequired, initialValue: initValue('b121', 'array')}]" class="control-m-line">
+                    <a-checkbox value="1">系统性红斑狼疮</a-checkbox>
+                    <a-checkbox value="2">类风湿性关节炎</a-checkbox>
+                    <a-checkbox value="3">干燥综合征</a-checkbox>
+                    <a-checkbox value="4">系统性硬化</a-checkbox>
+                    <a-checkbox value="5">皮肌炎</a-checkbox>
+                    <a-checkbox value="6" :checked="controlb122" @change="changeSelect($event, 'controlb122')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="其他风湿系统疾病类型:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb12 && controlb122">
+                  <a-input style="width: 240px;" v-decorator="['b122', {...inputRequired, initialValue: initValue('b122')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="7.是否有HIV" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b13', {...require1, initialValue:  initValue('b13')}]">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="8.是否有恶性肿瘤" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b14', {...require1, initialValue: initValue('b14')}]" @change="changeRadio($event, 'controlb14')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controlb14">
+                  <a-form-item class="border-dotted" label="当前正患病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['b141', {...require1, initialValue: initValue('b141')}]">
+                      <a-radio value="1">是</a-radio>
+                      <a-radio value="-1">否</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item class="border-dotted" label="血液性" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['b142', {...require1, initialValue: initValue('b142')}]">
+                      <a-radio value="1">是</a-radio>
+                      <a-radio value="-1">否</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item class="border-dotted" label="肿瘤部位(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['b143', {...selectRequired, initialValue: initValue('b143', 'array')}]" class="control-m-line">
+                      <a-checkbox value="1">头颈部</a-checkbox>
+                      <a-checkbox value="2">肺</a-checkbox>
+                      <a-checkbox value="3">乳腺</a-checkbox>
+                      <a-checkbox value="4">胃肠道</a-checkbox>
+                      <!-- <a-checkbox value="5">小肠</a-checkbox>
+                      <a-checkbox value="6">结肠</a-checkbox> -->
+                      <a-checkbox value="5">肝</a-checkbox>
+                      <a-checkbox value="6">胰腺</a-checkbox>
+                      <a-checkbox value="7">肾</a-checkbox>
+                      <a-checkbox value="8">前列腺</a-checkbox>
+                      <a-checkbox value="9">膀胱</a-checkbox>
+                      <a-checkbox value="10">子宫及附件</a-checkbox>
+                      <a-checkbox value="11">骨</a-checkbox>
+                      <a-checkbox value="12">皮肤</a-checkbox>
+                      <a-checkbox value="13">脑</a-checkbox>
+                      <a-checkbox value="14" :checked="controlb144" @change="changeSelect($event, 'controlb144')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                </div>
+                <a-form-item class="no-border" label="其他肿瘤部位:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb14 && controlb144">
+                  <a-input style="width: 240px;" v-decorator="['b144', {...inputRequired, initialValue: initValue('b144')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="9.免疫缺陷" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b15', {...require2, initialValue:  initValue('b15')}]" @change="changeRadio($event, 'controlb15')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controlb15">
+                  <a-form-item class="border-dotted" label="B细胞缺陷类疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-input style="width: 240px;" v-decorator="['b151', {...inputRequired, initialValue: initValue('b151')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item class="border-dotted" label="T细胞及联合免疫缺陷病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-input style="width: 240px;" v-decorator="['b152', {...inputRequired, initialValue: initValue('b152')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item class="border-dotted" label="继发性免疫缺陷(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['b153', {...selectRequired, initialValue: initValue('b153', 'array')}]" class="control-m-line">
+                      <a-checkbox value="1">慢性淋巴性白血病</a-checkbox>
+                      <a-checkbox value="2">多发性骨髓瘤</a-checkbox>
+                      <a-checkbox value="3">血液肿瘤相关免疫缺陷</a-checkbox>
+                      <a-checkbox value="4">系统化疗后免疫缺陷</a-checkbox>
+                      <a-checkbox value="5">免疫抑制药物后免疫缺陷</a-checkbox>
+                      <a-checkbox value="6">干细胞移植</a-checkbox>
+                      <a-checkbox value="7">实体器官移植</a-checkbox>
+                      <a-checkbox value="8" :checked="controlb1538" @change="changeSelect($event, 'controlb1538')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <a-form-item class="no-border" label="其他继发性免疫缺陷:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb15 && controlb1538">
+                    <a-input style="width: 240px;" v-decorator="['b1531', {...inputRequired, initialValue: initValue('b1531')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item class="border-dotted" label="巨噬细胞缺陷疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-input style="width: 240px;" v-decorator="['b154', {...inputRequired, initialValue: initValue('b154')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item class="border-dotted" label="补体缺陷疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-input style="width: 240px;" v-decorator="['b155', {...inputRequired, initialValue: initValue('b155')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                </div>
+                <a-form-item label="10.其他疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b161', {...selectRequired, initialValue: initValue('b161', 'array')}]">
+                    <a-checkbox value="1" @change="handleNone($event, 'b161', '1', ['controlb1615'])">无</a-checkbox>
+                    <a-checkbox value="2" :disabled="detect('b161', '1')">抑郁</a-checkbox>
+                    <a-checkbox value="3" :disabled="detect('b161', '1')">焦虑</a-checkbox>
+                    <a-checkbox value="4" :disabled="detect('b161', '1')">认知功能障碍</a-checkbox>
+                    <a-checkbox value="5" :disabled="detect('b161', '1')" :checked="controlb1615" @change="changeSelect($event, 'controlb1615')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="其他疾病类型:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb1615">
+                  <a-input style="width: 240px;" v-decorator="['b1611', {...inputRequired, initialValue: initValue('b1611')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(8) 其他系统相关治疗(非呼吸系统治疗)" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-checkbox-group v-decorator="['b17', {...selectRequired, initialValue: initValue('b17', 'array')}]" class="center">
+                  <a-checkbox value="1" :disabled="detect('b17', '10') || initB17">他汀类药物</a-checkbox>
+                  <a-checkbox value="2" :disabled="detect('b17', '10') || initB17">二甲双胍</a-checkbox>
+                  <a-checkbox value="3" :disabled="detect('b17', '10') || initB17">血管紧张素转换酶抑制剂</a-checkbox>
+                  <a-checkbox value="4" :disabled="detect('b17', '10') || initB17">血管紧张素受体拮抗剂</a-checkbox>
+                  <a-checkbox value="5" :disabled="detect('b17', '10') || initB17">阿司匹林</a-checkbox>
+                  <a-checkbox value="6" :disabled="detect('b17', '10') || initB17">非阿司匹林血小板抑制剂,如氯吡格雷</a-checkbox>
+                  <a-checkbox value="7" :disabled="detect('b17', '10') || initB17">华法林 /口服抗凝剂</a-checkbox>
+                  <a-checkbox value="8" :disabled="detect('b17', '10') || initB17">β-受体阻滞剂</a-checkbox>
+                  <a-checkbox value="9" :disabled="detect('b17', '10') || initB17">质子泵抑制剂</a-checkbox>
+                  <a-checkbox value="10" @change="handleNone($event, 'b17', '10')">无</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="(9) 家族史" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+              </a-form-item>
+              <a-form-item label="是否近亲结婚史" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['b181', {...require1, initialValue: initValue('b181')}]">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="既往直系亲属有无支扩" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['b182', {...require1, initialValue: initValue('b182')}]">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="遗传性疾病病史" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b183', {...require1, initialValue: initValue('b183')}]" @change="changeRadio($event, 'controlb1831')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="具体疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlb1831">
+                <a-input style="width: 240px;" v-decorator="['b1831', {...inputRequired, initialValue: initValue('b1831')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(10) 吸烟史(单选)" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b19', {...selectRequired, initialValue: initValue('b19')}]" @change="changeRadio($event, 'controlb191')">
+                  <a-radio value="1">目前吸烟</a-radio>
+                  <a-radio value="2">已戒烟</a-radio>
+                  <a-radio value="3">无吸烟</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="吸烟指数" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlb191">
+                <a-input addonAfter="包*年" style="width: 240px;" v-decorator="['b191', {...inputRequired, initialValue: initValue('b191')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(11) 职业粉尘接触及生物燃料接触史" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b22', {...require2, initialValue: initValue('b22')}]">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(12) 胸部手术病史" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b20', {...require2, initialValue: initValue('b20')}]" @change="changeRadio($event, 'controlb20')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="手术类型(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlb20">
+                <a-checkbox-group v-decorator="['b201', {...selectRequired, initialValue: initValue('b201', 'array')}]">
+                  <a-checkbox value="1">肺叶切除术</a-checkbox>
+                  <a-checkbox value="2">胸膜剥脱术</a-checkbox>
+                  <a-checkbox value="3">肺减容术</a-checkbox>
+                  <a-checkbox value="4">冠脉搭桥术</a-checkbox>
+                  <a-checkbox value="5" :checked="controlb202" @change="changeSelect($event, 'controlb202')">其他</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="其他手术名称" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset" class="border-dotted" v-if="controlb20 && controlb202">
+                <a-input style="width: 240px;" v-decorator="['b202', {initialValue: initValue('b202')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(13) 支气管动脉栓塞病史" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b21', {...require2, initialValue: initValue('b21')}]" @change="changeRadio($event, 'controlb21')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb21">
+                <a-form-item label="若行支气管动脉栓塞术时间" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b211', {...dateRequire, initialValue: initValue('b211', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="支气管动脉栓塞术部位" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-input style="width: 240px;" v-decorator="['b212', {...inputRequired, initialValue: initValue('b212')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(14) 是否CF筛查" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['c1', {...require1, initialValue: initValue('c1')}]" @change="changeRadio($event, 'controlc1')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlc1">
+                <a-form-item label="CF筛查是否正常 " :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-radio-group v-decorator="['c11', {...selectRequired, initialValue: initValue('c11')}]" @change="changeRadio($event, 'controlc11')">
+                    <a-radio value="1">正常</a-radio>
+                    <a-radio value="-1">异常</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="异常数值" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlc1 && controlc11">
+                  <a-input style="width: 240px;" v-decorator="['c111', {...inputRequired, initialValue: initValue('c111')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+    <contact-form ref="createModal" @ok="handleOk" />
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import _ from 'lodash'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, recoverSubmit, exportFormData } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import 'url-search-params-polyfill'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'mask1',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      formLayout: 'horizontal',
+      markName: 'zkbszl',
+      title: '基线',
+      openKeys: [],
+      defaultSelectedKeys: [1],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        "border-right": "1px solid #ddd"
+      },
+      clientHeight: '',
+      contentHeight: '',
+      baselineFormStyle: {
+        // "height": "700px",
+        // "padding-left": "20px",
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 6, offset: 6 }
+      },
+      labelColOffset2: {
+        md: { span: 3, offset: 6 }
+      },
+      wrapperOffset: {
+        md: { span: 12 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      isIcon: false,
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      zkbszl: undefined,
+      controla44: false,
+      controla45: false,
+      controla41: false,
+      controla42: false,
+      controla43: false,
+      controlb61: false,
+      controlb51: false,
+      controlb62: false,
+      controlb63: false,
+      controlb64: false,
+      controlb65: false,
+      controlb67: false,
+      controlb68: false,
+      controlb7: false,
+      controlb72: false,
+      controlb8: false,
+      controlb9: false,
+      controlb917: false,
+      controlb10: false,
+      controlb1014: false,
+      controlb11: false,
+      controlb1113: false,
+      controlb12: false,
+      controlb14: false,
+      controlb144: false,
+      controlb15: false,
+      controlb1538: false,
+      controlb1615: false,
+      controlb1831: false,
+      controlb191: false,
+      controlb20: false,
+      controlb202: false,
+      controlb21: false,
+      controla413: false,
+      controlb82: false,
+      controlb122: false,
+      spinning: false,
+      executeStatus: false,
+      b2: undefined,
+      b3: undefined,
+      controlb70: false,
+      selectedKeys: [],
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId == 1 || false,
+      canEdit: false,
+      submitInfo: undefined,
+      totalStatus: 1,
+      controlc1: false,
+      controlc11: false,
+      initB5: false,
+      initB6: false,
+      initB17: false
+    }
+  },
+  created() {
+    var that = this
+    this.defaultSelectedKeys = [1]
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+        that.totalStatus = res.data.patientBasis.submitStatus
+        // that.form.$forceUpdate()
+        that.isIcon = that.patient.isIcon === 1
+      })
+      .catch(error => {
+        console.log(error)
+      })
+    this.getFormData()
+  },
+  activated() {
+    this.selectedKeys = [1]
+    this.CloseSidebar()
+    var that = this
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.orgTree = res.data.list
+      })
+      .catch(error => {
+        console.log(error)
+      })
+  },
+  mounted() {
+    this.form.setFieldsValue({ b70: '-1' })
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    getFormData() {
+      this.spinning = true
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          this.spinning = false
+          if (res.data && res.data.zkbszl)
+            that.zkbszl = that.dealAnswers(res.data.zkbszl)
+        })
+        .catch(error => {
+          this.spinning = false
+          console.log(error)
+        })
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    detect(d, v) {
+      if(Array.isArray(this.form.getFieldValue(d)) && this.form.getFieldValue(d).indexOf(v) > -1) {
+        return true
+      } else {
+        return false
+      }
+    },
+    handleNone(e, d, v, arr) {
+      if(e.target.checked){
+        let data = {}
+        data[d] = [v]
+        this.$nextTick(() => {
+          this.form.setFieldsValue(data)
+          arr.forEach((t) => {
+            this[t] = false
+          })
+        })
+      } else {
+        if(d === 'b5') {
+          this.initB5 = false
+        }
+        if(d === 'b6') {
+          this.initB6 = false
+        }
+        if(d === 'b17') {
+          this.initB17 = false
+        }
+      }
+    },
+    initValue(key, type = 'normal') {
+      if (!this.zkbszl) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.zkbszl[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.zkbszl[key])
+      } else if (type === 'array') {
+        return this.zkbszl[key].split(',')
+      } else {
+        return this.zkbszl[key] + ''
+      }
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    changeDate(date) {
+      let timeDiff = Math.abs(new Date(date._d) - new Date(this.getBirthdayByIdNO(this.patient.card)));
+      // 将毫秒数转换为年数
+      let yearDiff = timeDiff / (1000 * 3600 * 24 * 365.25); // 考虑闰年
+      // 判断年数是否大于 10 年
+      if (yearDiff < 10) {
+        this.$message.warning('是否为儿童确诊支扩');
+      }
+    },
+    handleChange(valus) {
+      if (valus.indexOf('3') >= 0) {
+        this.$nextTick(() => {
+          this.form.setFieldsValue({ 'a1': ['3'] })
+        })
+      }
+    },
+    dealAnswers(answer) {
+      var that = this
+      if (answer && !_.isEmpty(answer)) {
+        var splitArr = []
+        if (answer.a4) {
+          splitArr = answer.a4.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            that.controla44 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            that.controla41 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            that.controla43 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            that.controla42 = true
+          }
+          if (splitArr.indexOf('13') > -1) {
+            that.controla413 = true
+          }
+          if (splitArr.indexOf('10') > -1) {
+            that.controla45 = true
+          }
+        }
+        if (answer.b5) {
+          splitArr = answer.b5.split(',')
+          if (splitArr.indexOf('6') > -1) {
+            that.controlb51 = true
+          }
+          if(splitArr.indexOf('7') > -1) {
+            this.initB5 = true
+          }
+        }
+        if (answer.b6) {
+          splitArr = answer.b6.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            that.controlb61 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            that.controlb62 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            that.controlb63 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            that.controlb64 = true
+          }
+          if (splitArr.indexOf('5') > -1) {
+            that.controlb65 = true
+          }
+          if (splitArr.indexOf('6') > -1) {
+            that.initB6 = true
+          }
+          if (splitArr.indexOf('7') > -1) {
+            that.controlb67 = true
+          }
+          if (splitArr.indexOf('8') > -1) {
+            that.controlb68 = true
+          }
+        }
+
+        if (answer.b70 === 1) {
+          that.controlb70 = true
+        }
+
+        if (answer.b7 === 1) {
+          that.controlb7 = true
+        }
+        if (answer.b71) {
+          splitArr = answer.b71.split(',')
+          if (splitArr.indexOf('11') > -1) {
+            that.controlb72 = true
+          }
+        }
+        if (answer.b8 === 1) {
+          that.controlb8 = true
+        }
+        if (answer.b81) {
+          splitArr = answer.b81.split(',')
+          if (splitArr.indexOf('5') > -1) {
+            that.controlb82 = true
+          }
+        }
+        if (answer.b9 === 1) {
+          that.controlb9 = true
+        }
+        if (answer.b91) {
+          splitArr = answer.b91.split(',')
+          if (splitArr.indexOf('7') > -1) {
+            that.controlb917 = true
+          }
+        }
+        if (answer.b10 === 1) {
+          that.controlb10 = true
+        }
+        if (answer.b11 === 1) {
+          that.controlb11 = true
+        }
+        if (answer.b12 && answer.b12 === '1') {
+          that.controlb12 = true
+        }
+        if (answer.b14 && answer.b14 === '1') {
+          that.controlb14 = true
+        }
+        if (answer.b143) {
+          splitArr = answer.b143.split(',')
+          if (splitArr.indexOf('16') > -1) {
+            that.controlb144 = true
+          }
+        }
+        if (answer.b15 && answer.b15 === 1) {
+          that.controlb15 = true
+        }
+        if (answer.b153) {
+          splitArr = answer.b153.split(',')
+          if (splitArr.indexOf('8') > -1) {
+            that.controlb1538 = true
+          }
+        }
+        if (answer.b161) {
+          splitArr = answer.b161.split(',')
+          if (splitArr.indexOf('5') > -1) {
+            that.controlb1615 = true
+          }
+        }
+        if (answer.b20 && answer.b20 === 1) {
+          that.controlb20 = true
+        }
+        if (answer.b21 && answer.b21 === 1) {
+          that.controlb21 = true
+        }
+        if (answer.b101) {
+          splitArr = answer.b101.split(',')
+          if (splitArr.indexOf('4') > -1) {
+            that.controlb1014 = true
+          }
+        }
+        if (answer.b111) {
+          splitArr = answer.b111.split(',')
+          if (splitArr.indexOf('3') > -1) {
+            that.controlb1113 = true
+          }
+        }
+        if (answer.b121) {
+          splitArr = answer.b121.split(',')
+          if (splitArr.indexOf('6') > -1) {
+            that.controlb122 = true
+          }
+        }
+        if (answer.b19 && (answer.b19 === 1 || answer.b19 === 2)) {
+          that.controlb191 = true
+        }
+        if (answer.b183 && answer.b183 === 1) {
+          that.controlb1831 = true
+        }
+        if (answer.b201) {
+          splitArr = answer.b201.split(',')
+          if (splitArr.indexOf('5') > -1) {
+            that.controlb202 = true
+          }
+        }
+        if(answer.c1 === 1) {
+          that.controlc1 = true
+        }
+        if(answer.c11 === -1) {
+          that.controlc11 = true
+        }
+        if (answer.b17) {
+          splitArr = answer.b17.split(',')
+          if (splitArr.indexOf('10') > -1) {
+            that.initB17 = true
+          }
+        }
+      }
+      return answer
+    },
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      let that = this
+      if (t === 'controlb70' && e.target.value === '1') {
+        this.controlb7 = false
+        this.controlb72 = false
+        this.controlb8 = false
+        this.controlb82 = false
+        this.controlb9 = false
+        this.controlb917 = false
+        this.controlb10 = false
+        this.controlb1014 = false
+        this.controlb11 = false
+        this.controlb1113 = false
+        this.controlb12 = false
+        this.controlb122 = false
+        this.controlb14 = false
+        this.controlb144 = false
+        this.controlb15 = false
+        this.controlb1538 = false
+        this.controlb1615 = false
+        setTimeout(function() {
+          that.form.setFieldsValue({
+            b7: '-1',
+            b8: '-1',
+            b9: '-1',
+            b10: '-1',
+            b11: '-1',
+            b12: '-1',
+            b13: '-1',
+            b14: '-1',
+            b15: '-1',
+            b161: ['1']
+          })
+        })
+      }
+      if (t === 'controlb191') {
+        if (e.target.value === '1' || e.target.value === '2') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (t === 'controlc11'){
+        if (e.target.value === '-1') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if(e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      if ((e.key >= 31 && e.key <= 36) || (e.key >= 78 && e.key <= 83)) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      } else {
+        this.$router.replace('/list/basis/' + this.patientBasisId + '/' + e.key)
+      }
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (parseInt(this.form.getFieldValue('b2')) > parseInt(this.form.getFieldValue('b3'))) {
+          this.$message.warning('过去一年的急性加重次数必须大于等于过去一年的住院急性加重次数');
+          return false
+        }
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          var that = this
+          re = {
+            ...re,
+            'a1': typeof re['a1'] !== 'undefined' ? re['a1'].join(',') : '',
+            'a3': typeof re['a3'] !== 'undefined' ? re['a3'].format('YYYY-MM-DD') : '',
+            'a4': typeof re['a4'] !== 'undefined' ? re['a4'].join(',') : '',
+            'b5': typeof re['b5'] !== 'undefined' ? re['b5'].join(',') : '',
+            'b6': typeof re['b6'] !== 'undefined' ? re['b6'].join(',') : '',
+            'b17': typeof re['b17'] !== 'undefined' ? re['b17'].join(',') : '',
+            'b61': typeof re['b61'] !== 'undefined' ? re['b61'].format('YYYY-MM') : '',
+            'b62': typeof re['b62'] !== 'undefined' ? re['b62'].format('YYYY-MM') : '',
+            'b63': typeof re['b63'] !== 'undefined' ? re['b63'].format('YYYY-MM') : '',
+            'b64': typeof re['b64'] !== 'undefined' ? re['b64'].format('YYYY-MM') : '',
+            'b65': typeof re['b65'] !== 'undefined' ? re['b65'].format('YYYY-MM') : '',
+            'b66': typeof re['b66'] !== 'undefined' ? re['b66'].format('YYYY-MM') : '',
+            'b71': typeof re['b71'] !== 'undefined' ? re['b71'].join(',') : '',
+            'b81': typeof re['b81'] !== 'undefined' ? re['b81'].join(',') : '',
+            'b91': typeof re['b91'] !== 'undefined' ? re['b91'].join(',') : '',
+            'b101': typeof re['b101'] !== 'undefined' ? re['b101'].join(',') : '',
+            'b111': typeof re['b111'] !== 'undefined' ? re['b111'].join(',') : '',
+            'b121': typeof re['b121'] !== 'undefined' ? re['b121'].join(',') : '',
+            'b143': typeof re['b143'] !== 'undefined' ? re['b143'].join(',') : '',
+            'b153': typeof re['b153'] !== 'undefined' ? re['b153'].join(',') : '',
+            'b161': typeof re['b161'] !== 'undefined' ? re['b161'].join(',') : '',
+            'b201': typeof re['b201'] !== 'undefined' ? re['b201'].join(',') : '',
+            'b211': typeof re['b211'] !== 'undefined' ? re['b211'].format('YYYY-MM-DD') : ''
+          }
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.zkbszl && this.zkbszl.zkbszlId) {
+            re.zkbszlId = this.zkbszl.zkbszlId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+          return false
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      var that = this
+      re = {
+        ...re,
+        'a1': typeof re['a1'] !== 'undefined' ? re['a1'].join(',') : '',
+        'a3': typeof re['a3'] !== 'undefined' ? re['a3'].format('YYYY-MM-DD') : '',
+        'a4': typeof re['a4'] !== 'undefined' ? re['a4'].join(',') : '',
+        'b5': typeof re['b5'] !== 'undefined' ? re['b5'].join(',') : '',
+        'b6': typeof re['b6'] !== 'undefined' ? re['b6'].join(',') : '',
+        'b17': typeof re['b17'] !== 'undefined' ? re['b17'].join(',') : '',
+        'b61': typeof re['b61'] !== 'undefined' ? re['b61'].format('YYYY-MM') : '',
+        'b62': typeof re['b62'] !== 'undefined' ? re['b62'].format('YYYY-MM') : '',
+        'b63': typeof re['b63'] !== 'undefined' ? re['b63'].format('YYYY-MM') : '',
+        'b64': typeof re['b64'] !== 'undefined' ? re['b64'].format('YYYY-MM') : '',
+        'b65': typeof re['b65'] !== 'undefined' ? re['b65'].format('YYYY-MM') : '',
+        'b66': typeof re['b66'] !== 'undefined' ? re['b66'].format('YYYY-MM') : '',
+        'b71': typeof re['b71'] !== 'undefined' ? re['b71'].join(',') : '',
+        'b81': typeof re['b81'] !== 'undefined' ? re['b81'].join(',') : '',
+        'b91': typeof re['b91'] !== 'undefined' ? re['b91'].join(',') : '',
+        'b101': typeof re['b101'] !== 'undefined' ? re['b101'].join(',') : '',
+        'b111': typeof re['b111'] !== 'undefined' ? re['b111'].join(',') : '',
+        'b121': typeof re['b121'] !== 'undefined' ? re['b121'].join(',') : '',
+        'b143': typeof re['b143'] !== 'undefined' ? re['b143'].join(',') : '',
+        'b153': typeof re['b153'] !== 'undefined' ? re['b153'].join(',') : '',
+        'b161': typeof re['b161'] !== 'undefined' ? re['b161'].join(',') : '',
+        'b201': typeof re['b201'] !== 'undefined' ? re['b201'].join(',') : '',
+        'b211': typeof re['b211'] !== 'undefined' ? re['b211'].format('YYYY-MM-DD') : ''
+      }
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.zkbszl && this.zkbszl.zkbszlId) {
+        re.zkbszlId = this.zkbszl.zkbszlId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', that.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+            .catch(error => {
+              console.log(error)
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    withdraw() {
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.zkbszl.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    _importData() {
+      var that = this
+      this.$confirm({
+        title: '是否确定导入数据?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('basisMarkId', that.maskId)
+          params.append('patientBasisId', that.patientBasisId)
+          exportFormData(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              that.zkbszl = _.extend(that.zkbszl || {}, that.dealAnswers(res.data.data.zkbszl))
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+
+      .treeSubTitle {
+        font-size: 14px;
+      }
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+    margin-top: 42px;
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 20px 20px 60px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+
+      .center.ant-checkbox-group{
+        position: relative;
+        top: 10px;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+@media screen and (max-width: 1366px) {
+  .control-m-line.ant-checkbox-group {
+    top: 10px;
+    position: relative;
+  }
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/account/center/components/mask-10.vue b/src/views/account/center/components/mask-10.vue
new file mode 100644
index 0000000000..1eced490e2
--- /dev/null
+++ b/src/views/account/center/components/mask-10.vue
@@ -0,0 +1,988 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="clearfix" style="position:relative;top: 20px;">
+              <a-button class="btn fr" type="primary" @click="_importData">导入数据</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!(ICON患者,必须填写实际检测值。基线访视辅助检查可使用入组前6个月内的检查结果,但要求从检查日期到入组日期之间未发生急性加重,否则需要在基线数据收集时重新辅助检查)</p>
+              <div class="title">1.血常规
+                <a style="float: right;font-size:12px;margin-right: 12px;" @click="showOcr = !showOcr">OCR</a>
+                <!-- <a-icon type="zoom-in" style="float: right;margin-top: 12px;margin-right: 12px;color: #ccc;" @click="changeOcr" /> -->
+              </div>
+              <a-form-item label="血常规报告上传 :" :labelCol="labelColHor" :wrapperCol="wrapperHor" style="margin-top: 10px;" v-if="showOcr">
+                <div class="clearfix" style="margin-top: 10px;">
+                  <a-upload :action="uploadUrl" class="images1" v-viewer listType="picture-card" :fileList="fileList1" @preview="handlePreview1" @change="handleChange1">
+                    <div v-if="fileList1.length < 1">
+                      <a-icon type="plus" />
+                      <div class="ant-upload-text">Upload</div>
+                    </div>
+                  </a-upload>
+                  <a-button style="position: absolute;top: 74px;left: 120px;font-size: 12px;padding: 0 5px;height: 30px;" @click="_import(fileList1,1)" v-if="fileList1.length === 1 && showOcr">OCR识别</a-button>
+                  <!-- <a-modal :visible="previewVisible1" :footer="null" @cancel="handleCancel1">
+                    <img alt="example" style="width: 100%" :src="previewImage1" />
+                  </a-modal> -->
+                </div>
+              </a-form-item>
+              <a-form-item label="检查时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-date-picker placeholder="请选择" v-decorator="['f5', { initialValue: initValue('f5', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+              </a-form-item>
+              <a-form-item label="(1) 血红蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['b1', {...inputRequired, initialValue: initValue('b1')}]" addonAfter="g/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(2) 白细胞:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['b2', {...inputRequired, initialValue: initValue('b2')}]" addonAfter="10^9/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(3) 红细胞:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['b3', {...inputRequired, initialValue: initValue('b3')}]" addonAfter="10^12/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(4) 血小板:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['b4', {...inputRequired, initialValue: initValue('b4')}]" addonAfter="10^9/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(5) 中性粒细胞绝对值:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['b5', {...inputRequired, initialValue: initValue('b5')}]" addonAfter="10^9/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(6) 嗜酸细胞绝对值:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['b6', {...inputRequired, initialValue: initValue('b6')}]" addonAfter="10^9/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <div class="title">2.血生化</div>
+              <a-form-item label="血生化报告上传 :" :labelCol="labelColHor" :wrapperCol="wrapperHor" style="margin-top: 10px;" v-if="showOcr">
+                <div class="clearfix" style="margin-top: 10px;">
+                  <a-upload :action="uploadUrl" class="images2" v-viewer listType="picture-card" :fileList="fileList2" @preview="handlePreview2" @change="handleChange2">
+                    <div v-if="fileList2.length < 1">
+                      <a-icon type="plus" />
+                      <div class="ant-upload-text">Upload</div>
+                    </div>
+                  </a-upload>
+                  <a-button style="position: absolute;top: 74px;left: 120px;font-size: 12px;padding: 0 5px;height: 30px;" @click="_import(fileList2,2)" v-if="fileList2.length === 1 && showOcr">OCR识别</a-button>
+                  <!-- <a-modal :visible="previewVisible2" :footer="null" @cancel="handleCancel2">
+                    <img alt="example" style="width: 100%" :src="previewImage2" />
+                  </a-modal> -->
+                </div>
+              </a-form-item>
+              <a-form-item label="检查时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-date-picker placeholder="请选择" v-decorator="['f6', { initialValue: initValue('f6', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+              </a-form-item>
+              <a-form-item label="(1) 血糖:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c1', {...inputRequired, initialValue: initValue('c1')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(2) 白蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c4', {...inputRequired, initialValue: initValue('c4')}]" addonAfter="g/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(3) 谷丙转氨酶:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c2', { initialValue: initValue('c2')}]" addonAfter="IU/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(4) 谷草转氨酶:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c3', { initialValue: initValue('c3')}]" addonAfter="IU/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(5) 前白蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c5', { initialValue: initValue('c5')}]" addonAfter="g/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(6) 球蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c6', { initialValue: initValue('c6')}]" addonAfter="g/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(7) 肌酐:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c7', { initialValue: initValue('c7')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(8) 尿素:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c8', { initialValue: initValue('c8')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(9) 钾:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c9', { initialValue: initValue('c9')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(10) 钠:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c10', { initialValue: initValue('c10')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(11) 钙:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c11', { initialValue: initValue('c11')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(12) 磷:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c12', { initialValue: initValue('c12')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(13) 总胆固醇:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c13', { initialValue: initValue('c13')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(14) 甘油三脂:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c14', { initialValue: initValue('c14')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(15) 高密度脂蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c15', { initialValue: initValue('c15')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(16) 低密度脂蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c16', { initialValue: initValue('c16')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(17) DD二聚体:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                <a-input style="width: 240px;" v-decorator="['c17', { initialValue: initValue('c17')}]" addonAfter="ng/mL" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="DD二聚体:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['c171', { initialValue: initValue('c171')}]">
+                  <a-radio value="1">正常</a-radio>
+                  <a-radio value="2">降低</a-radio>
+                  <a-radio value="3">升高</a-radio>
+                  <a-radio value="4">未测量</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(18) 维生素D:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                <a-input style="width: 240px;" v-decorator="['c18', { initialValue: initValue('c18')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="维生素D:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['c181', { initialValue: initValue('c181')}]">
+                  <a-radio value="1">正常</a-radio>
+                  <a-radio value="2">降低</a-radio>
+                  <a-radio value="3">升高</a-radio>
+                  <a-radio value="4">未测量</a-radio>
+                </a-radio-group>
+              </a-form-item>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, getOcrResult, recoverSubmit, exportFormData } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'mask10',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      showOcr: false,
+      //   previewVisible1: false,
+      //   previewImage1: '',
+      //   previewVisible2: false,
+      //   previewImage2: '',
+      uploadUrl: process.env.VUE_APP_API_UPLOAD_URL,
+      viewPicUrl: process.env.VUE_APP_API_VIEW_PIC_URL,
+      fileList1: [],
+      fileList2: [],
+      markName: 'qtsyjc',
+      title: '基线',
+      openKeys: [],
+      defaultSelectedKeys: [10],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: '100%',
+        "padding-right": "0px",
+        "border-right": "1px solid #ddd"
+      },
+      baselineFormStyle: {
+        // height: '444px',
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 7 },
+        md: { span: 7 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 17 },
+        md: { span: 17 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 4, offset: 7 }
+      },
+      wrapperOffset: {
+        md: { span: 13 }
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      qtsyjc: undefined,
+      spinning: false,
+      executeStatus: false,
+      confirmLoading: false,
+      canEdit: false,
+      submitInfo: undefined,
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      }
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {},
+    handleClick(e) {
+      if (e.key >= 31 && e.key <= 36) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      } else {
+        this.$router.replace('/list/basis/' + this.patientBasisId + '/' + e.key)
+      }
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          re = {
+            ...re,
+            'f5': typeof re['f5'] !== 'undefined' ? re['f5'].format('YYYY-MM-DD') : '',
+            'f6': typeof re['f6'] !== 'undefined' ? re['f6'].format('YYYY-MM-DD') : ''
+          }
+          var that = this
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.qtsyjc && this.qtsyjc.qtsyjcId) {
+            re.qtsyjcId = this.qtsyjc.qtsyjcId
+          }
+          //附件
+          if (this.fileList1 && this.fileList1.length) {
+            var a = []
+            _.each(this.fileList1, function(v) {
+              if (v.response) a.push(v.response.fileName)
+              else a.push(v.name)
+            })
+            params.append('fileName', JSON.stringify(a))
+          }
+          //附件
+          if (this.fileList2 && this.fileList2.length) {
+            var a = []
+            _.each(this.fileList2, function(v) {
+              if (v.response) a.push(v.response.fileName)
+              else a.push(v.name)
+            })
+            params.append('fileNameOther', JSON.stringify(a))
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.qtsyjc) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.qtsyjc[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.qtsyjc[key])
+      } else if (type === 'array') {
+        return this.qtsyjc[key].split(',')
+      } else {
+        return this.qtsyjc[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+
+      }
+      return answer
+    },
+    getFormData() {
+      this.spinning = true
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          if (res.data && res.data.qtsyjc) {
+            that.qtsyjc = that.dealAnswers(res.data.qtsyjc)
+          }
+          if (res.data.annexListXcg && res.data.annexListXcg.length) {
+            that.fileList1 = _.map(res.data.annexListXcg, function(v) {
+              return {
+                uid: v.annexId,
+                url: that.viewPicUrl + v.annexAddress,
+                name: v.annexAddress,
+                status: 'done'
+              }
+            })
+          }
+          if (res.data.annexListXsh && res.data.annexListXsh.length) {
+            that.fileList2 = _.map(res.data.annexListXsh, function(v) {
+              return {
+                uid: v.annexId,
+                url: that.viewPicUrl + v.annexAddress,
+                name: v.annexAddress,
+                status: 'done'
+              }
+            })
+          }
+          this.spinning = false
+        })
+        .catch(error => {
+          this.spinning = false
+          console.log(error)
+        })
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      re = {
+        ...re,
+        'f5': typeof re['f5'] !== 'undefined' ? re['f5'].format('YYYY-MM-DD') : '',
+        'f6': typeof re['f6'] !== 'undefined' ? re['f6'].format('YYYY-MM-DD') : ''
+      }
+      var that = this
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.qtsyjc && this.qtsyjc.qtsyjcId) {
+        re.qtsyjcId = this.qtsyjc.qtsyjcId
+      }
+      //附件
+      if (this.fileList1 && this.fileList1.length) {
+        var a = []
+        _.each(this.fileList1, function(v) {
+          if (v.response) a.push(v.response.fileName)
+          else a.push(v.name)
+        })
+        params.append('fileName', JSON.stringify(a))
+      }
+      //附件
+      if (this.fileList2 && this.fileList2.length) {
+        var a = []
+        _.each(this.fileList2, function(v) {
+          if (v.response) a.push(v.response.fileName)
+          else a.push(v.name)
+        })
+        params.append('fileNameOther', JSON.stringify(a))
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    // handleCancel1() {
+    //   this.previewVisible1 = false;
+    // },
+    handlePreview1(file) {
+      const viewer = this.$el.querySelector('.images1').$viewer
+      viewer.show()
+      //   this.previewImage1 = file.url || file.thumbUrl;
+      //   this.previewVisible1 = true;
+    },
+    handleChange1({ fileList }) {
+      var that = this
+      this.fileList1 = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList1.forEach((f,i) => {
+          if(f.response){
+              that.$set(that.fileList1,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    },
+    // handleCancel2() {
+    //   this.previewVisible2 = false;
+    // },
+    handlePreview2(file) {
+      const viewer = this.$el.querySelector('.images2').$viewer
+      viewer.show()
+      //   this.previewImage2 = file.url || file.thumbUrl;
+      //   this.previewVisible2 = true;
+    },
+    handleChange2({ fileList }) {
+      var that = this
+      this.fileList2 = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList2.forEach((f,i) => {
+          if(f.response){
+              that.$set(that.fileList2,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    },
+    _import(fileList, type) {
+      // console.log(fileList[0].response.data.src);
+      var that = this
+      this.spinning = true
+      var params = new URLSearchParams()
+      params.append('url', fileList[0].response ? fileList[0].response.data.src : fileList[0].url)
+      params.append('type', type)
+      getOcrResult(params)
+        .then(res => {
+          that.spinning = false
+          that.$message.success(res.data.info)
+          // console.log(res.data);
+          that.qtsyjc = _.extend(that.qtsyjc || {}, that.dealAnswers(res.data))
+          that.form.setFieldsValue(that.qtsyjc)
+        })
+        .catch(error => {
+          // console.log(error)
+          that.spinning = false
+          that.$message.error(res.msg)
+        })
+    },
+    withdraw() {
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.qtsyjc.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    changeOcr() {
+      this.showOcr = true
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    _importData() {
+      var that = this
+      this.$confirm({
+        title: '是否确定导入数据?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('basisMarkId', that.maskId)
+          params.append('patientBasisId', that.patientBasisId)
+          exportFormData(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              that.qtsyjc = _.extend(that.qtsyjc || {}, that.dealAnswers(res.data.data.qtsyjc))
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+
+      .treeSubTitle {
+        font-size: 14px;
+      }
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+    margin-top: 42px;
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 20px 20px 40px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/account/center/components/mask-2.vue b/src/views/account/center/components/mask-2.vue
new file mode 100644
index 0000000000..114e9dca8c
--- /dev/null
+++ b/src/views/account/center/components/mask-2.vue
@@ -0,0 +1,834 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="clearfix" style="position:relative;top: 20px;">
+              <a-button class="btn fr" type="primary" @click="_importData">导入数据</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <!-- <a-button class="btn fr" v-if="patientBasis.type === 3" @click="import">导入</a-button> -->
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!</p>
+              <div class="title">1.体格检查</div>
+              <a-form-item label="(1) 经皮血氧饱和度SpO2:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input @blur="handleSpO2" v-decorator="['a5', {...inputRequired, initialValue: initValue('a5')}]" style="width: 240px;" addonAfter="%" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(2) 身高:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input @blur="handleHeight" v-decorator="['a6', {...inputRequired, initialValue: initValue('a6')}]" style="width: 240px;" addonAfter="cm" @change="changeHeight($event)" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(3) 体重:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input @blur="handleWeight" v-decorator="['a7', {...inputRequired, initialValue: initValue('a7')}]" style="width: 240px;" addonAfter="kg" @change="changeWeight($event)" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(4) BMI(自动演算出):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input v-decorator="['a8', {initialValue: initValue('a8')}]" :readOnly="true" style="width: 240px;" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(5) 肺部体征:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+              </a-form-item>
+              <a-form-item label="桶状胸" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['b1', {...require2, initialValue: initValue('b1')}]">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="杵状指" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['b2', {...require2, initialValue: initValue('b2')}]">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="啰音" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['a9', {...require2, initialValue: initValue('a9')}]" @change="changeRadio($event, 'controla9')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controla9">
+                <a-form-item label="啰音类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-checkbox-group v-decorator="['a91', {...selectRequired, initialValue: initValue('a91', 'array')}]">
+                    <a-checkbox value="1">湿罗音</a-checkbox>
+                    <a-checkbox value="2">干啰音</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="啰音部位" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-input style="width: 240px;" v-decorator="['a92', {...inputRequired, initialValue: initValue('a92')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(6) 右位心:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a10', {...require1, initialValue: initValue('a10')}]">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, computeScore, recoverSubmit, exportFormData } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'mask2',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      markName: 'tgjc',
+      title: '基线',
+      openKeys: [],
+      defaultSelectedKeys: [2],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: '100%',
+        "padding-right": "0px",
+        "border-right": "1px solid #ddd"
+      },
+      baselineFormStyle: {
+        // height: '444px',
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      controla9: false,
+      tgjc: undefined,
+      height: undefined,
+      weight: undefined,
+      spinning: false,
+      executeStatus: false,
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined
+    }
+  },
+  created() {
+    var that = this
+    this.defaultSelectedKeys = [2]
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    this.getFormData()
+  },
+  activated() {
+    this.defaultSelectedKeys = [2]
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    handleSpO2(e) {
+      if (e.target.value && e.target.value < 50) {
+        this.$message.warning('请确认经皮血氧饱和度SpO2数值是否正确');
+      }
+    },
+    handleHeight(e) {
+      if (e.target.value && e.target.value < 130) {
+        this.$message.warning('请确认身高数值是否正确');
+      }
+    },
+    handleWeight(e) {
+      if (e.target.value && e.target.value < 30) {
+        this.$message.warning('请确认体重数值是否正确');
+      }
+    },
+    changeRadio(e, t) {
+      if (t === 'controlb191') {
+        if (e.target.value === '1' || e.target.value === '2') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      if (e.key >= 31 && e.key <= 36) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      } else {
+        this.$router.replace('/list/basis/' + this.patientBasisId + '/' + e.key)
+      }
+    },
+    getFormData() {
+      this.spinning = true
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          this.spinning = false
+          if (res.data && res.data.tgjc)
+            that.tgjc = that.dealAnswers(res.data.tgjc)
+        })
+        .catch(error => {
+          this.spinning = false
+          console.log(error)
+        })
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          var that = this
+          re = {
+            ...re,
+            'a91': typeof re['a91'] !== 'undefined' ? re['a91'].join(',') : ''
+          }
+          console.log(re)
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.tgjc && this.tgjc.tgjcId) {
+            re.tgjcId = this.tgjc.tgjcId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          that.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+          return false
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.tgjc) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.tgjc[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.tgjc[key])
+      } else if (type === 'array') {
+        return this.tgjc[key].split(',')
+      } else {
+        return this.tgjc[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        if (answer.a9 === '1') {
+          this.controla9 = true
+        }
+        if (answer.a6) {
+          this.height = answer.a6
+        }
+        if (answer.a7) {
+          this.weight = answer.a7
+        }
+      }
+      return answer
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      var that = this
+      re = {
+        ...re,
+        'a91': typeof re['a91'] !== 'undefined' ? re['a91'].join(',') : ''
+      }
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.tgjc && this.tgjc.tgjcId) {
+        re.tgjcId = this.tgjc.tgjcId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      that.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', that.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+            .catch(error => {
+              console.log(error)
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    computeBMI() {
+      var that = this
+      var height = this.height
+      var weight = this.weight
+      if (height && weight) {
+        var params = new URLSearchParams()
+        params.append('scoreType', 'bmi')
+        params.append('tgjcStr', JSON.stringify({ a6: height, a7: weight }))
+        computeScore(params)
+          .then(res => {
+            console.log(res.data.a8)
+            that.form.setFieldsValue({
+              a8: res.data.a8
+            })
+          })
+          .catch(error => {
+            console.log(error)
+          })
+      }
+    },
+    changeHeight(e) {
+      this.height = e.target.value
+      if (!e.target.value) {
+        this.form.setFieldsValue({
+          a8: ''
+        })
+      } else {
+        this.computeBMI()
+      }
+    },
+    changeWeight(e) {
+      this.weight = e.target.value
+      if (!e.target.value) {
+        this.form.setFieldsValue({
+          a8: ''
+        })
+      } else {
+        this.computeBMI()
+      }
+    },
+    withdraw(){
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.tgjc.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    _importData() {
+      var that = this
+      this.$confirm({
+        title: '是否确定导入数据?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('basisMarkId', that.maskId)
+          params.append('patientBasisId', that.patientBasisId)
+          exportFormData(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              that.tgjc = _.extend(that.tgjc || {}, that.dealAnswers(res.data.data.tgjc))
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+    margin-top: 42px;
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 20px 20px 40px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+@media screen and (max-width: 1366px) {
+  .control-m-line.ant-checkbox-group {
+    top: 10px;
+    position: relative;
+  }
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/account/center/components/mask-4.vue b/src/views/account/center/components/mask-4.vue
new file mode 100644
index 0000000000..cbb39363eb
--- /dev/null
+++ b/src/views/account/center/components/mask-4.vue
@@ -0,0 +1,1139 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="clearfix" style="position:relative;top: 20px;">
+              <a-button class="btn fr" type="primary" @click="_importData">导入数据</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <!-- <a-button class="btn fr" v-if="patientBasis.type === 3" @click="import">导入</a-button> -->
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!</p>
+              <div class="title">1.呼吸系统相关治疗</div>
+              <a-form-item label="(1) 长期氧疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b1', {...require1, initialValue: initValue('b1')}]">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(2) 无创辅助通气:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b2', {...require1, initialValue: initValue('b2')}]">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(3) 患者是否进行有规律的物理治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b3', {...require1, initialValue: initValue('b3')}]" @change="changeRadio($event, 'controlb3')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="治疗方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb3">
+                <a-checkbox-group v-decorator="['b31', {...selectRequired, initialValue: initValue('b31', 'array')}]">
+                  <a-checkbox value="1" :disabled="detect('b31', '5')">手动拍击背部排痰</a-checkbox>
+                  <a-checkbox value="2" :disabled="detect('b31', '5')">体位引流</a-checkbox>
+                  <a-checkbox value="3" :disabled="detect('b31', '5')">规律锻炼身体</a-checkbox>
+                  <a-checkbox value="4" :disabled="detect('b31', '5')">借助排痰仪器</a-checkbox>
+                  <a-checkbox value="6" :disabled="detect('b31', '5')">主动循环呼吸</a-checkbox>
+                  <a-checkbox value="5" @change="handleNone($event, 'b31', '5')">无</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="(4) 有规律的呼吸疾病药物治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b4', {...require1, initialValue: initValue('b4')}]" @change="changeRadio($event, 'controlb4')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb4">
+                <a-form-item label="4-1 规律抗生素治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b41', {...selectRequired, initialValue: initValue('b41', 'array')}]">
+                    <a-checkbox value="0" @change="handleNone($event, 'b41', '0', ['controlb411', 'controlb412'])">无</a-checkbox>
+                    <a-checkbox value="1" :disabled="detect('b41', '0')" :checked="controlb411" @change="changeSelect($event, 'controlb411')">口服</a-checkbox>
+                    <a-checkbox value="2" :disabled="detect('b41', '0')" :checked="controlb412" @change="changeSelect($event, 'controlb412')">吸入/雾化</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <div v-if="controlb4 && controlb411">
+                  <a-form-item label="长期性口服抗生素治疗(连续使用大于三个月的治疗):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['b414', {...selectRequired, initialValue: initValue('b414', 'array')}]">
+                      <a-checkbox value="1" >阿奇霉素</a-checkbox>
+                      <a-checkbox value="2" >克拉霉素</a-checkbox>
+                      <a-checkbox value="3" >红霉素</a-checkbox>
+                      <a-checkbox value="4"  @change="changeSelect($event, 'controlb41')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <a-form-item label="其他口服抗生素:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb4 && controlb411 && controlb41">
+                    <a-input style="width: 240px;" v-decorator="['b4141', {...inputRequired, initialValue: initValue('b4141')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                </div>
+                <div v-if="controlb4 && controlb412">
+                  <a-form-item label="规律吸入/雾化抗生素药物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['b42', {...selectRequired, initialValue: initValue('b42', 'array')}]">
+                      <a-checkbox value="2">妥布霉素</a-checkbox>
+                      <a-checkbox value="3">庆大霉素</a-checkbox>
+                      <a-checkbox value="4">阿米卡星</a-checkbox>
+                      <a-checkbox value="5" @change="changeSelect($event, 'controlb42')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <a-form-item label="其他吸入/雾化抗生素药物:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb42">
+                    <a-input style="width: 240px;" v-decorator="['b421', {...inputRequired, initialValue: initValue('b421')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                </div>
+                <a-form-item label="4-2 祛痰药物治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b43', {...selectRequired, initialValue: initValue('b43', 'array')}]">
+                    <a-checkbox value="0" @change="handleNone($event, 'b43', '0', ['controlb431', 'controlb432'])">无</a-checkbox>
+                    <a-checkbox value="1" :disabled="detect('b43', '0')" :checked="controlb431" @change="changeSelect($event, 'controlb431')">口服</a-checkbox>
+                    <a-checkbox value="2" :disabled="detect('b43', '0')" :checked="controlb432" @change="changeSelect($event, 'controlb432')">雾化</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <div v-if="controlb431">
+                  <a-form-item label="口服祛痰类药物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['b431', {...selectRequired, initialValue: initValue('b431', 'array')}]">
+                      <a-checkbox value="1">N-乙酰半胱氨酸</a-checkbox>
+                      <a-checkbox value="2">氨溴索</a-checkbox>
+                      <a-checkbox value="3">桉柠蒎</a-checkbox>
+                      <a-checkbox value="4">羧甲司坦</a-checkbox>
+                      <a-checkbox value="5">厄多司坦</a-checkbox>
+                      <a-checkbox value="6">福多司坦</a-checkbox>
+                      <a-checkbox value="7" @change="changeSelect($event, 'controlb43')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <a-form-item label="其他祛痰类药物:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb431 && controlb43">
+                    <a-input style="width: 240px;" v-decorator="['b432', {...inputRequired, initialValue: initValue('b432')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                </div>
+                <div v-if="controlb432">
+                  <a-form-item label="雾化药物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['b433', {...selectRequired, initialValue: initValue('b433', 'array')}]">
+                      <a-checkbox value="1">N-乙酰半胱氨酸</a-checkbox>
+                      <a-checkbox value="3">雾化生理盐水</a-checkbox>
+                      <a-checkbox value="4">雾化吸入高渗盐水</a-checkbox>
+                      <a-checkbox value="2" :checked="controlb433" @change="changeSelect($event, 'controlb433')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <a-form-item label="其他雾化药物:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb432 && controlb433">
+                    <a-input style="width: 240px;" v-decorator="['b434', {...inputRequired, initialValue: initValue('b434')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                </div>
+                <a-form-item label="4-3 支气管扩张剂/吸入激素:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b48', {...selectRequired, initialValue: initValue('b48', 'array')}]" class="center">
+                    <a-checkbox value="0" @change="handleNone($event, 'b48', '0', ['controlb48'])">无</a-checkbox>
+                    <a-checkbox value="1" :disabled="detect('b48', '0')">LAMA</a-checkbox>
+                    <a-checkbox value="2" :disabled="detect('b48', '0')">LABA</a-checkbox>
+                    <a-checkbox value="3" :disabled="detect('b48', '0')">LABA/LAMA</a-checkbox>
+                    <a-checkbox value="4" :disabled="detect('b48', '0')">ICS/LABA/LAMA</a-checkbox>
+                    <a-checkbox value="5" :disabled="detect('b48', '0')">ICS/LABA</a-checkbox>
+                    <a-checkbox value="6" :disabled="detect('b48', '0')">SABA</a-checkbox>
+                    <a-checkbox value="7" :disabled="detect('b48', '0')">SAMA</a-checkbox>
+                    <a-checkbox value="8" :disabled="detect('b48', '0')">白三烯受体拮抗剂</a-checkbox>
+                    <a-checkbox value="9" :disabled="detect('b48', '0')">口服茶碱</a-checkbox>
+                    <a-checkbox value="10" :disabled="detect('b48', '0')">雾化吸入支气管舒张剂</a-checkbox>
+                    <a-checkbox value="11" :disabled="detect('b48', '0')" @change="changeSelect($event, 'controlb48')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他支气管扩张剂/吸入激素:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb48">
+                  <a-input style="width: 240px;" v-decorator="['b481', {...inputRequired, initialValue: initValue('b481')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="4-4 长期止血治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b46', {...require1, initialValue: initValue('b46')}]">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="4-5 其他治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b47', { initialValue: initValue('b47')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(5) ABPA相关治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b5', {...require1, initialValue: initValue('b5')}]" @change="changeRadio($event, 'controlb5')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb5">
+                <a-form-item label="抗真菌药物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b52', {...selectRequired, initialValue: initValue('b52', 'array')}]">
+                    <a-checkbox value="0" @change="handleNone($event, 'b52', '0', ['controlb52'])">无</a-checkbox>
+                    <a-checkbox value="1" :disabled="detect('b52', '0')">伊曲康唑</a-checkbox>
+                    <a-checkbox value="2" :disabled="detect('b52', '0')">伏立康唑</a-checkbox>
+                    <a-checkbox value="3" :disabled="detect('b52', '0')" :checked="controlb52" @change="changeSelect($event, 'controlb52')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他抗真菌药物:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb5 && controlb52">
+                  <a-input style="width: 240px;" v-decorator="['b53', {...inputRequired, initialValue: initValue('b53')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="激素治疗" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b51', {...require1, initialValue: initValue('b51')}]">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+              </div>
+              <a-form-item label="(6) 免疫球蛋白缺乏相关治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b6', {...require1, initialValue: initValue('b6')}]" @change="changeRadio($event, 'controlb6')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb6">
+                <a-form-item label="静脉注射免疫球蛋白药物名称:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b61', {...inputRequired, initialValue: initValue('b61')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(7) 患者是否曾接受疫苗治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b7', {...require1, initialValue: initValue('b7')}]" @change="changeRadio($event, 'controlb7')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb7">
+                <a-form-item label="肺炎链球菌多糖疫苗(如PSV23):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b71', {...require1, initialValue: initValue('b71')}]" @change="changeRadio($event, 'controlb71')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="时间::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb7 && controlb71">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b711', {...dateRequire, initialValue: initValue('b711', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="肺炎链球菌结合疫苗(如PVC13):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b72', {...require1, initialValue: initValue('b72')}]" @change="changeRadio($event, 'controlb72')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="时间::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb7 && controlb72">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b721', {...dateRequire, initialValue: initValue('b721', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="过去1年,患者是否曾接受流感疫苗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b10', {...require1, initialValue: initValue('b10')}]">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+              </div>
+              <a-form-item label="(8) 患者是否曾接受免疫调节治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b8', {...require1, initialValue: initValue('b8')}]" @change="changeRadio($event, 'controlb8')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb8">
+                <a-form-item label="治疗方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b81', {...selectRequired, initialValue: initValue('b81', 'array')}]">
+                    <a-checkbox value="1">细菌溶解产物胶囊</a-checkbox>
+                    <a-checkbox value="2">匹多莫德</a-checkbox>
+                    <a-checkbox value="3">胸腺肽</a-checkbox>
+                    <a-checkbox value="4">脾氨肽</a-checkbox>
+                    <a-checkbox value="5" :checked="controlb81" @change="changeSelect($event, 'controlb81')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他治疗::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb8 && controlb81">
+                  <a-input style="width: 240px;" v-decorator="['b82', {...inputRequired, initialValue: initValue('b82')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(10) 患者是否接受肺康复治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b11', {...require1, initialValue: initValue('b11')}]">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, recoverSubmit, exportFormData } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'mask4',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      markName: 'hxxt',
+      title: '基线',
+      openKeys: [],
+      defaultSelectedKeys: [4],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: '100%',
+        "padding-right": "0px",
+        "border-right": "1px solid #ddd"
+      },
+      baselineFormStyle: {
+        // height: '444px',
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 7 },
+        md: { span: 7 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 17 },
+        md: { span: 17 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 4, offset: 7 }
+      },
+      wrapperOffset: {
+        md: { span: 13 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      hxxt: undefined,
+      controlb3: false,
+      controlb4: false,
+      controlb41: false,
+      controlb44: false,
+      controlb411: false,
+      controlb412: false,
+      controlb5: false,
+      controlb52: false,
+      controlb6: false,
+      controlb8: false,
+      controlb81: false,
+      spinning: false,
+      executeStatus: false,
+      controlb43: false,
+      controlb431: false,
+      controlb432: false,
+      controlb433: false,
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined,
+      controlb42: false,
+      controlb48: false,
+      controlb7: false,
+      controlb71: false,
+      controlb72: false
+    }
+  },
+  created() {
+    var that = this
+    this.defaultSelectedKeys = [4]
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    that.getFormData()
+  },
+  activated() {
+    this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      if (e.key >= 31 && e.key <= 36) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      } else {
+        this.$router.replace('/list/basis/' + this.patientBasisId + '/' + e.key)
+      }
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          var that = this
+          if(re.b4 === '1' && re.b41.indexOf('0') > -1 && re.b43.indexOf('0') > -1 && re.b48.indexOf('0') > -1 ) {
+            that.$message.error('有规律的呼吸疾病药物治疗不可同时勾选三项无')
+            return false
+          }
+          re = {
+            ...re,
+            'b31': typeof re['b31'] !== 'undefined' ? re['b31'].join(',') : '',
+            'b41': typeof re['b41'] !== 'undefined' ? re['b41'].join(',') : '',
+            'b414': typeof re['b414'] !== 'undefined' ? re['b414'].join(',') : '',
+            'b43': typeof re['b43'] !== 'undefined' ? re['b43'].join(',') : '',
+            'b431': typeof re['b431'] !== 'undefined' ? re['b431'].join(',') : '',
+            'b433': typeof re['b433'] !== 'undefined' ? re['b433'].join(',') : '',
+            'b44': typeof re['b44'] !== 'undefined' ? re['b44'].join(',') : '',
+            'b52': typeof re['b52'] !== 'undefined' ? re['b52'].join(',') : '',
+            'b81': typeof re['b81'] !== 'undefined' ? re['b81'].join(',') : '',
+            'b42': typeof re['b42'] !== 'undefined' ? re['b42'].join(',') : '',
+            'b48': typeof re['b48'] !== 'undefined' ? re['b48'].join(',') : '',
+            'b711': typeof re['b711'] !== 'undefined' ? re['b711'].format('YYYY-MM-DD') : '',
+            'b721': typeof re['b721'] !== 'undefined' ? re['b721'].format('YYYY-MM-DD') : ''
+          }
+          var that = this
+          console.log(re)
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.hxxt && this.hxxt.hxxtId) {
+            re.hxxtId = this.hxxt.hxxtId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          that.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', this.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+          return false
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.hxxt) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.hxxt[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.hxxt[key])
+      } else if (type === 'array') {
+        return this.hxxt[key].split(',')
+      } else {
+        return this.hxxt[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        var splitArr = []
+        if (answer.b3 === 1) {
+          this.controlb3 = true
+        }
+        if (answer.b4 === 1) {
+          this.controlb4 = true
+        }
+        if (answer.b5 === 1) {
+          this.controlb5 = true
+        }
+        if (answer.b6 === 1) {
+          this.controlb6 = true
+        }
+        if (answer.b7 === 1) {
+          this.controlb7 = true
+        }
+        if (answer.b8 === 1) {
+          this.controlb8 = true
+        }
+        if (answer.b52) {
+          splitArr = answer.b52.split(',')
+          if (splitArr.indexOf('3') > -1) {
+            this.controlb52 = true
+          }
+        }
+        if (answer.b41) {
+          splitArr = answer.b41.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controlb411 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controlb412 = true
+          }
+        }
+        if (answer.b414) {
+          splitArr = answer.b414.split(',')
+          if (splitArr.indexOf('4') > -1) {
+            this.controlb41 = true
+          }
+        }
+        if (answer.b43) {
+          splitArr = answer.b43.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controlb431 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controlb432 = true
+          }
+        }
+        if (answer.b431) {
+          splitArr = answer.b431.split(',')
+          if (splitArr.indexOf('7') > -1) {
+            this.controlb43 = true
+          }
+        }
+        if (answer.b433) {
+          splitArr = answer.b433.split(',')
+          if (splitArr.indexOf('2') > -1) {
+            this.controlb433 = true
+          }
+        }
+        if (answer.b44) {
+          splitArr = answer.b44.split(',')
+          if (splitArr.indexOf('4') > -1) {
+            this.controlb44 = true
+          }
+        }
+        if (answer.b52) {
+          splitArr = answer.b52.split(',')
+          if (splitArr.indexOf('3') > -1) {
+            this.controlb52 = true
+          }
+        }
+        if (answer.b71 === 1) {
+          this.controlb71 = true
+        }
+        if (answer.b72 === 1) {
+          this.controlb72 = true
+        }
+        if (answer.b81) {
+          splitArr = answer.b81.split(',')
+          if (splitArr.indexOf('5') > -1) {
+            this.controlb81 = true
+          }
+        }
+        if (answer.b42) {
+          splitArr = answer.b42.split(',')
+          if (splitArr.indexOf('5') > -1) {
+            this.controlb42 = true
+          }
+        }
+        if (answer.b48) {
+          splitArr = answer.b48.split(',')
+          if (splitArr.indexOf('11') > -1) {
+            this.controlb48 = true
+          }
+        }
+      }
+      return answer
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      re = {
+        ...re,
+        'b31': typeof re['b31'] !== 'undefined' ? re['b31'].join(',') : '',
+        'b41': typeof re['b41'] !== 'undefined' ? re['b41'].join(',') : '',
+        'b414': typeof re['b414'] !== 'undefined' ? re['b414'].join(',') : '',
+        'b43': typeof re['b43'] !== 'undefined' ? re['b43'].join(',') : '',
+        'b431': typeof re['b431'] !== 'undefined' ? re['b431'].join(',') : '',
+        'b433': typeof re['b433'] !== 'undefined' ? re['b433'].join(',') : '',
+        'b44': typeof re['b44'] !== 'undefined' ? re['b44'].join(',') : '',
+        'b52': typeof re['b52'] !== 'undefined' ? re['b52'].join(',') : '',
+        'b81': typeof re['b81'] !== 'undefined' ? re['b81'].join(',') : '',
+        'b42': typeof re['b42'] !== 'undefined' ? re['b42'].join(',') : '',
+        'b48': typeof re['b48'] !== 'undefined' ? re['b48'].join(',') : '',
+        'b711': typeof re['b711'] !== 'undefined' ? re['b711'].format('YYYY-MM-DD') : '',
+        'b721': typeof re['b721'] !== 'undefined' ? re['b721'].format('YYYY-MM-DD') : ''
+      }
+      var that = this
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.hxxt && this.hxxt.hxxtId) {
+        re.hxxtId = this.hxxt.hxxtId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      that.spinning = true
+      saveBasis(params)
+        .then(res => {
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+        })
+        .catch(error => {
+          that.spinning = false
+        })
+      return false
+    },
+    getFormData() {
+      this.spinning = true
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          if (res.data && res.data.hxxt) {
+            that.hxxt = that.dealAnswers(res.data.hxxt)
+          } else {
+            that.form.resetFields()
+          }
+          this.spinning = false
+        })
+        .catch(error => {
+          this.spinning = false
+          console.log(error)
+        })
+    },
+    withdraw(){
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.hxxt.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    _importData() {
+      var that = this
+      this.$confirm({
+        title: '是否确定导入数据?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('basisMarkId', that.maskId)
+          params.append('patientBasisId', that.patientBasisId)
+          exportFormData(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              that.hxxt = _.extend(that.hxxt || {}, that.dealAnswers(res.data.data.hxxt))
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    handleNone(e, d, v, arr) {
+      if(e.target.checked){
+        let data = {}
+        data[d] = [v]
+        this.$nextTick(() => {
+          this.form.setFieldsValue(data)
+          arr.forEach((t) => {
+            this[t] = false
+          })
+        })
+      }
+    },
+    detect(d, v) {
+      if(Array.isArray(this.form.getFieldValue(d)) && this.form.getFieldValue(d).indexOf(v) > -1) {
+        return true
+      } else {
+        return false
+      }
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+    margin-top: 42px;
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 20px 20px 60px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+
+      .center.ant-checkbox-group{
+        position: relative;
+        top: 10px;
+      }
+
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+@media screen and (max-width: 1366px) {
+  .control-m-line.ant-checkbox-group {
+    top: 10px;
+    position: relative;
+  }
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/account/center/components/mask-5.vue b/src/views/account/center/components/mask-5.vue
new file mode 100644
index 0000000000..7a5d8b2883
--- /dev/null
+++ b/src/views/account/center/components/mask-5.vue
@@ -0,0 +1,1110 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="clearfix" style="position:relative;top: 20px;">
+              <a-button class="btn fr" type="primary" @click="_importData">导入数据</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <!-- <a-button class="btn fr" v-if="patientBasis.type === 3" @click="import">导入</a-button> -->
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!(ICON患者,必须填写实际检测值。基线访视辅助检查可使用入组前6个月内的检查结果,但要求从检查日期到入组日期之间未发生急性加重,否则需要在基线数据收集时重新辅助检查)</p>
+              <div class="title">1.CT基本信息
+                <a-icon type="zoom-in" style="float: right;margin-top: 12px;margin-right: 12px;color: #ccc;" @click="changeOcr" />
+              </div>
+              <a-form-item label="(1) CT检查日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['a1', {...dateRequire, initialValue: initValue('a1', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+              </a-form-item>
+              <a-form-item label="(2) 图像类型(建议HRCT或者1mm薄层CT):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a2', { initialValue: initValue('a2')}]">
+                  <a-radio value="1">HRCT</a-radio>
+                  <a-radio value="2">CT</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="上传图像:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <div class="clearfix" style="margin-top: 10px;">
+                  <a-upload :action="uploadUrl" class="images" v-viewer listType="picture-card" :fileList="fileList" @preview="handlePreview" @change="handleChange" :before-upload="beforeUpload">
+                    <div v-if="fileList.length < 10">
+                      <a-icon type="plus" />
+                      <div class="ant-upload-text">Upload</div>
+                    </div>
+                  </a-upload>
+                  <a-button style="font-size: 12px;padding: 0 5px;height: 30px;" @click="_import" v-if="fileList.length === 1 && showOcr">OCR识别</a-button>
+                  <!-- <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
+                    <img alt="example" style="width: 100%" :src="previewImage" />
+                  </a-modal> -->
+                </div>
+              </a-form-item>
+              <a-form-item label="放射学表现:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-textarea style="top: 2px;" v-decorator="['a21', {initialValue: initValue('a21')}]" autocomplete="off"></a-textarea>
+              </a-form-item>
+              <a-form-item label="放射学诊断:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-textarea style="top: 2px;" v-decorator="['a22', {initialValue: initValue('a22')}]" autocomplete="off"></a-textarea>
+              </a-form-item>
+              <div class="title">2.Reiff影像评分</div>
+              <a-form-item label="支扩位于CT图像上:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-checkbox-group v-decorator="['b', {...selectRequired, initialValue: initValue('b', 'array')}]">
+                  <a-checkbox value="1" @change="changeSelect($event, 'controla3')">右上叶</a-checkbox>
+                  <a-checkbox value="2" @change="changeSelect($event, 'controla4')">左上叶</a-checkbox>
+                  <a-checkbox value="3" @change="changeSelect($event, 'controla5')">右中叶</a-checkbox>
+                  <a-checkbox value="4" @change="changeSelect($event, 'controla6')">左舌叶</a-checkbox>
+                  <a-checkbox value="5" @change="changeSelect($event, 'controla7')">右下叶</a-checkbox>
+                  <a-checkbox value="6" @change="changeSelect($event, 'controla8')">左下叶</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="右上叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla3">
+                <a-radio-group v-decorator="['a3', {...selectRequired, initialValue: initValue('a3')}]" @change="computeReiff">
+                  <a-radio value="1">柱状</a-radio>
+                  <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                  <a-radio value="3">囊状</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="左上叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla4">
+                <a-radio-group v-decorator="['a4', {...selectRequired, initialValue: initValue('a4')}]" @change="computeReiff">
+                  <a-radio value="1">柱状</a-radio>
+                  <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                  <a-radio value="3">囊状</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="右中叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla5">
+                <a-radio-group v-decorator="['a5', {...selectRequired, initialValue: initValue('a5')}]" @change="computeReiff">
+                  <a-radio value="1">柱状</a-radio>
+                  <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                  <a-radio value="3">囊状</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="左舌叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla6">
+                <a-radio-group v-decorator="['a6', {...selectRequired, initialValue: initValue('a6')}]" @change="computeReiff">
+                  <a-radio value="1">柱状</a-radio>
+                  <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                  <a-radio value="3">囊状</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="右下叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla7">
+                <a-radio-group v-decorator="['a7', {...selectRequired, initialValue: initValue('a7')}]" @change="computeReiff">
+                  <a-radio value="1">柱状</a-radio>
+                  <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                  <a-radio value="3">囊状</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="左下叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla8">
+                <a-radio-group v-decorator="['a8', {...selectRequired, initialValue: initValue('a8')}]" @change="computeReiff">
+                  <a-radio value="1">柱状</a-radio>
+                  <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                  <a-radio value="3">囊状</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="影像Reiff评分:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['a9', {initialValue: initValue('a9')}]" :readOnly="true" autocomplete="off"></a-input>
+              </a-form-item>
+              <div class="title">3.Bhalla影像学评分 <a-icon type="arrows-alt" v-if="collap" style="cursor: pointer;" @click="collap = !collap" /><a-icon type="shrink" v-else @click="collap = !collap" style="cursor: pointer;" /></div>
+              <a-form-item label="(1) 支气管扩张程度:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a10', {initialValue: initValue('a10')}]" @change="computeBhalla" style="line-height: 30px;">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">轻度(管腔直径为临近血管直径的1-2倍)</a-radio>
+                  <a-radio value="2">中度(管腔直径为临近血管直径的2-3倍)</a-radio>
+                  <a-radio value="3">重度(管腔直径超过临近血管直径的3倍)</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(2) 支气管壁增厚情况" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a11', {initialValue: initValue('a11')}]" @change="computeBhalla" style="line-height: 30px;">
+                  <a-radio :value="'0'">无</a-radio>
+                  <a-radio value="1">轻度(支气管壁的厚度相当于临近血管壁厚度)</a-radio>
+                  <a-radio value="2">中度(支气管壁的厚度相当于临近血管壁厚度的1-2倍)</a-radio>
+                  <a-radio value="3">重度(支气管壁的厚度相当于临近血管壁厚度的2倍)</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(3) 支气管扩张的范围(肺段数):" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a12', {initialValue: initValue('a12')}]" @change="computeBhalla">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">1-5</a-radio>
+                  <a-radio value="2">6-9</a-radio>
+                  <a-radio value="3">&gt;9</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(4) 支气管管腔黏液阻塞范围(肺段数):" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a13', {initialValue: initValue('a13')}]" @change="computeBhalla">
+                  <a-radio :value="'0'">无</a-radio>
+                  <a-radio value="1">1-5</a-radio>
+                  <a-radio value="2">6-9</a-radio>
+                  <a-radio value="3">&gt;9</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(5) 存在脓肿的范围(肺段数):" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a14', {initialValue: initValue('a14')}]" @change="computeBhalla">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">1-5</a-radio>
+                  <a-radio value="2">6-9</a-radio>
+                  <a-radio value="3">&gt;9</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(6) 扩张支气管的分级数" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a15', {initialValue: initValue('a15')}]" @change="computeBhalla">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">超过4级</a-radio>
+                  <a-radio value="2">超过5级</a-radio>
+                  <a-radio value="3">超过6级</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(7) 肺大疱数" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a16', { initialValue: initValue('a16')}]" @change="computeBhalla">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">单侧(&lt;4)</a-radio>
+                  <a-radio value="2">双侧(&lt;4)</a-radio>
+                  <a-radio value="3">&gt;4</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(8) 肺气肿的范围" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a17', { initialValue: initValue('a17')}]" @change="computeBhalla">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">1-5</a-radio>
+                  <a-radio value="2">&gt;5</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(9) 肺不张/实变的" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a18', { initialValue: initValue('a18')}]" @change="computeBhalla">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">肺亚段</a-radio>
+                  <a-radio value="2">肺段/肺叶</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(10) Bhalla影像学评分:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-popover>
+                  <template slot="content">
+                    <img src="../../../../assets/bhalla.jpg" style="height: 400px;" />
+                  </template>
+                  <a-icon type="exclamation-circle" style="position: relative;left: -20px;color: #0399ec;cursor: pointer;" />
+                </a-popover>
+                <a-input style="width: 240px;" v-decorator="['a19', {initialValue: initValue('a19')}]" :readOnly="true" autocomplete="off"></a-input>
+              </a-form-item>
+              <div class="title">4.支扩类型</div>
+              <a-form-item label="支扩类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                <a-radio-group v-decorator="['a20', {...selectRequired, initialValue: initValue('a20')}]" @change="computeBhalla">
+                  <a-radio value="2">柱状</a-radio>
+                  <a-radio value="3">静脉曲张型(混合型)</a-radio>
+                  <a-radio value="1">囊状</a-radio>
+                </a-radio-group>
+              </a-form-item>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, computeScore, recoverSubmit, exportFormData } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { getOcrResult } from '@/api/basis'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'mask5',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      showOcr: false,
+      spinning: false,
+      previewVisible: false,
+      collap: true,
+      previewImage: '',
+      uploadUrl: process.env.VUE_APP_API_UPLOAD_URL,
+      viewPicUrl: process.env.VUE_APP_API_VIEW_PIC_URL,
+      fileList: [],
+      markName: 'xbyxx',
+      title: '基线',
+      openKeys: [],
+      defaultSelectedKeys: [5],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: '100%',
+        "padding-right": "0px",
+        "border-right": "1px solid #ddd"
+      },
+      baselineFormStyle: {
+        // height: '444px',
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 6, offset: 6 }
+      },
+      labelColOffset2: {
+        md: { span: 3, offset: 6 }
+      },
+      wrapperOffset: {
+        md: { span: 12 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      xbyxx: undefined,
+      executeStatus: undefined,
+      controla3: false,
+      controla4: false,
+      controla5: false,
+      controla6: false,
+      controla7: false,
+      controla8: false,
+      controla9: false,
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      submitInfo: undefined,
+      canEdit: false
+    }
+  },
+  created() {
+    var that = this
+    this.defaultSelectedKeys = [5]
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    this.getFormData()
+  },
+  activated() {
+    this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeSelect(e, t) {
+      var arr = ['controla3', 'controla4', 'controla5', 'controla6', 'controla7', 'controla8']
+      if (arr.indexOf(t) > -1 && !e.target.checked) {
+        this.computeReiff()
+      }
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      if (e.key >= 31 && e.key <= 36) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      } else {
+        this.$router.replace('/list/basis/' + this.patientBasisId + '/' + e.key)
+      }
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          var that = this
+          re = {
+            ...re,
+            'a1': typeof re['a1'] !== 'undefined' ? re['a1'].format('YYYY-MM-DD') : '',
+            'b': typeof re['b'] !== 'undefined' ? re['b'].join(',') : ''
+          }
+          console.log(re)
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.xbyxx && this.xbyxx.xbyxxId) {
+            re.xbyxxId = this.xbyxx.xbyxxId
+          }
+          //附件
+          if (this.fileList && this.fileList.length) {
+            var a = []
+            _.each(this.fileList, function(v) {
+              if (v.response) a.push(v.response.fileName)
+              else a.push(v.name)
+            })
+            params.append('fileName', JSON.stringify(a))
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          that.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', this.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    beforeUpload() {
+      this.spinning = true
+    },
+    getFormData() {
+      this.spinning = true
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          if (res.data && res.data.xbyxx) {
+            for (let key of Object.keys(res.data.xbyxx)) {
+              if (res.data.xbyxx[key] === 0) {
+                res.data.xbyxx[key] = "0";
+              }
+            }
+            that.xbyxx = that.dealAnswers(res.data.xbyxx)
+          } else {
+            that.form.resetFields()
+          }
+          if (res.data && res.data.annexListXbyxx) {
+            that.fileList = _.map(res.data.annexListXbyxx, function(v) {
+              return {
+                uid: v.annexId,
+                url: that.viewPicUrl + v.annexAddress,
+                name: v.annexAddress,
+                status: 'done'
+              }
+            })
+          } else {
+            that.fileList = []
+          }
+          this.spinning = false
+        })
+        .catch(error => {
+          this.spinning = false
+          console.log(error)
+        })
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      var that = this
+      re = {
+        ...re,
+        'a1': typeof re['a1'] !== 'undefined' ? re['a1'].format('YYYY-MM-DD') : '',
+        'b': typeof re['b'] !== 'undefined' ? re['b'].join(',') : ''
+      }
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.xbyxx && this.xbyxx.xbyxxId) {
+        re.xbyxxId = this.xbyxx.xbyxxId
+      }
+      //附件
+      if (this.fileList && this.fileList.length) {
+        var a = []
+        _.each(this.fileList, function(v) {
+          if (v.response) a.push(v.response.fileName)
+          else a.push(v.name)
+        })
+        // var fileName = _.map(this.fileList, function(v) { return v.response ? v.response.fileName : v.name })
+        params.append('fileName', JSON.stringify(a))
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      that.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', this.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    initValue(key, type = 'normal') {
+      if (!this.xbyxx) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.xbyxx[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.xbyxx[key])
+      } else if (type === 'array') {
+        return this.xbyxx[key].split(',')
+      } else {
+        return this.xbyxx[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        var splitArr = []
+        if (answer.b) {
+          splitArr = answer.b.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controla3 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controla4 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.controla5 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.controla6 = true
+          }
+          if (splitArr.indexOf('5') > -1) {
+            this.controla7 = true
+          }
+          if (splitArr.indexOf('6') > -1) {
+            this.controla8 = true
+          }
+        }
+      }
+      return answer
+    },
+    computeReiff() {
+      var that = this
+      this.$nextTick(() => {
+        var params = new URLSearchParams()
+        params.append('scoreType', 'reiff')
+        params.append('xbyxxStr', JSON.stringify(that.form.getFieldsValue()))
+        computeScore(params)
+          .then(res => {
+            that.form.setFieldsValue({
+              a9: res.data.a9
+            })
+            let arr = _.values(that.form.getFieldsValue(['a3', 'a4', 'a5', 'a6', 'a7', 'a8']))
+            
+            if(_.some(arr, function(v){ return v === 3 || v === '3' })) {
+              that.form.setFieldsValue({
+                a20: '1'
+              })
+            } else if(_.some(arr, function(v){ return v === 2 || v === '2' })) {
+              that.form.setFieldsValue({
+                a20: '3'
+              })
+            } else {
+              that.form.setFieldsValue({
+                a20: '2'
+              })
+            }
+          })
+          .catch(error => {
+            console.log(error)
+          })
+      })
+    },
+    computeBhalla() {
+      var that = this
+      this.$nextTick(() => {
+        var params = new URLSearchParams()
+        params.append('scoreType', 'bhalla')
+        params.append('xbyxxStr', JSON.stringify(that.form.getFieldsValue()))
+        computeScore(params)
+          .then(res => {
+            console.log(res.data.a9)
+            that.form.setFieldsValue({
+              a19: res.data.a19
+            })
+          })
+          .catch(error => {
+            console.log(error)
+          })
+      })
+    },
+    // handleCancel() {
+    //   this.previewVisible = false;
+    // },
+    handlePreview(file) {
+      const viewer = this.$el.querySelector('.images').$viewer
+      viewer.show()
+      //   this.previewImage = file.url || file.thumbUrl;
+      //   this.previewVisible = true;
+    },
+    handleChange({ fileList }) {
+      var that = this
+      this.fileList = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList.forEach((f,i) => {
+          if(f.response){
+            console.log(f)
+              that.$set(that.fileList,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    _import() {
+      this.spinning = true
+      var params = new URLSearchParams()
+      params.append('type', 6)
+      params.append('url', this.fileList[0].url || this.fileList[0].response.data.src)
+      var that = this
+      getOcrResult(params)
+        .then(res => {
+          console.log(res.data)
+          this.spinning = false
+          this.$message.success(res.data.info)
+          this.xbyxx = _.extend(this.xbyxx || {}, this.dealAnswers(res.data))
+          that.form.setFieldsValue(that.xbyxx)
+        })
+        .catch(error => {
+          this.spinning = false
+        })
+    },
+    withdraw() {
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.xbyxx.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    changeOcr() {
+      this.showOcr = true
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    _importData() {
+      var that = this
+      this.$confirm({
+        title: '是否确定导入数据?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('basisMarkId', that.maskId)
+          params.append('patientBasisId', that.patientBasisId)
+          exportFormData(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              that.xbyxx = _.extend(that.xbyxx || {}, that.dealAnswers(res.data.data.xbyxx))
+              if (res.data.data && res.data.data.annexListXbyxx) {
+                that.fileList = _.map(res.data.data.annexListXbyxx, function(v) {
+                  return {
+                    uid: v.annexId,
+                    url: that.viewPicUrl + v.annexAddress,
+                    name: v.annexAddress,
+                    status: 'done'
+                  }
+                })
+              } else {
+                that.fileList = []
+              }
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+
+      .treeSubTitle {
+        font-size: 14px;
+      }
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+    margin-top: 42px;
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 20px 20px 80px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/account/center/components/mask-6.vue b/src/views/account/center/components/mask-6.vue
new file mode 100644
index 0000000000..3c82b10b3d
--- /dev/null
+++ b/src/views/account/center/components/mask-6.vue
@@ -0,0 +1,1751 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="clearfix" style="position:relative;top: 20px;">
+              <a-button class="btn fr" type="primary" @click="_importData">导入数据</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <!-- <a-button class="btn fr" v-if="patientBasis.type === 3" @click="import">导入</a-button> -->
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!(ICON患者,必须填写实际检测值。基线访视辅助检查可使用入组前6个月内的检查结果,但要求从检查日期到入组日期之间未发生急性加重,否则需要在基线数据收集时重新辅助检查)</p>
+              <a-form-item label="采样性质(多选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-checkbox-group v-decorator="['a', {...selectRequired, initialValue: initValue('a', 'array')}]">
+                  <a-checkbox value="1" @change="changeSelect($event, 'control1')" :disabled="detect('a', '4') || control4">细菌</a-checkbox>
+                  <a-checkbox value="2" @change="changeSelect($event, 'control2')" :disabled="detect('a', '4') || control4">真菌</a-checkbox>
+                  <a-checkbox value="3" @change="changeSelect($event, 'control3')" :disabled="detect('a', '4') || control4">分枝杆菌</a-checkbox>
+                  <a-checkbox value="5" @change="changeSelect($event, 'control5')" :disabled="detect('a', '4') || control4">其他</a-checkbox>
+                  <a-checkbox value="4" @change="handleNone($event, 'a', '4', [], 'control4')">无</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <div v-if="control1">
+                <div class="title">1.细菌</div>
+                <a-form-item label="(1) 取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['a1', {...dateRequire, initialValue: initValue('a1', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="(2) 是否本院:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-radio-group v-decorator="['a2', {...require1, initialValue: initValue('a2')}]" @change="changeRadio($event, 'controla2')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="医院名称" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controla2">
+                  <a-input style="width: 240px;" v-decorator="['a21', {...inputRequired, initialValue: initValue('a21')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(3) 标本类型:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['a3', {...selectRequired, initialValue: initValue('a3', 'array')}]">
+                    <a-checkbox value="1" @change="changeSelect($event, 'controla31')">痰液</a-checkbox>
+                    <a-checkbox value="2" @change="changeSelect($event, 'controla32')">诱导痰</a-checkbox>
+                    <a-checkbox value="3" @change="changeSelect($event, 'controla33')">支气管肺泡灌洗液</a-checkbox>
+                    <a-checkbox value="4" @change="changeSelect($event, 'controla34')">血标本</a-checkbox>
+                    <a-checkbox value="5">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="痰液培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla31">
+                  <a-radio-group v-decorator="['a31', {...selectRequired, initialValue: initValue('a31')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="痰液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controla31">
+                  <a-radio-group v-decorator="['a311', {...selectRequired, initialValue: initValue('a311')}]" @change="changeRadio($event, 'controla3113')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他痰液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controla3113">
+                  <a-input style="width: 240px;" v-decorator="['a3111', {...inputRequired, initialValue: initValue('a3111')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="诱导痰培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla32">
+                  <a-radio-group v-decorator="['a32', {...selectRequired, initialValue: initValue('a32')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="诱导痰检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controla32">
+                  <a-radio-group v-decorator="['a321', {...selectRequired, initialValue: initValue('a321')}]" @change="changeRadio($event, 'controla3213')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他诱导痰检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controla3213">
+                  <a-input style="width: 240px;" v-decorator="['a3211', {...inputRequired, initialValue: initValue('a3211')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="支气管肺泡灌洗液培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla33">
+                  <a-radio-group v-decorator="['a33', {...selectRequired, initialValue: initValue('a33')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="支气管肺泡灌洗液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controla33">
+                  <a-radio-group v-decorator="['a331', {...selectRequired, initialValue: initValue('a331')}]" @change="changeRadio($event, 'controla3313')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他支气管肺泡灌洗液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controla3313">
+                  <a-input style="width: 240px;" v-decorator="['a3311', {...inputRequired, initialValue: initValue('a3311')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="血标本培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla34">
+                  <a-radio-group v-decorator="['a34', {...selectRequired, initialValue: initValue('a34')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="血标本检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controla34">
+                  <a-radio-group v-decorator="['a341', {...selectRequired, initialValue: initValue('a341')}]" @change="changeRadio($event, 'controla3413')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他血标本检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controla3413">
+                  <a-input style="width: 240px;" v-decorator="['a3411', {...inputRequired, initialValue: initValue('a3411')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(4) 是否分离到微生物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a4', {...require1, initialValue: initValue('a4')}]" @change="changeRadio($event, 'controla4')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="分离到微生物:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla4">
+                  <a-checkbox-group v-decorator="['a42', {...selectRequired, initialValue: initValue('a42', 'array')}]" class="control-m-line">
+                    <a-checkbox value="0" @change="showList($event, '铜绿假单胞菌', 'controla420', true)">铜绿假单胞菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[0]" v-if="controla420" :type1="type1" @listen="changeType1" :isFirst="true" :picSource="picList1[0]" @changePic1="changePic1($event, 0)"></add-table>
+                    <a-checkbox value="2" @change="showList($event, '肺炎克雷伯菌', 'controla422', true)">肺炎克雷伯菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[2]" v-if="controla422" :isFirst="true" :picSource="picList1[2]" @changePic1="changePic1($event, 2)"></add-table>
+                    <a-checkbox value="10" @change="showList($event, '大肠杆菌', 'controla4210', true)">大肠杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[10]" v-if="controla4210" :isFirst="true" :picSource="picList1[10]" @changePic1="changePic1($event, 10)"></add-table>
+                    <a-checkbox value="3" @change="showList($event, '阴沟肠杆菌', 'controla423', true)">阴沟肠杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[3]" v-if="controla423" :isFirst="true" :picSource="picList1[3]" @changePic1="changePic1($event, 3)"></add-table>
+                    <a-checkbox value="1" @change="showList($event, '肺炎链球菌', 'controla421', true)">肺炎链球菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[1]" v-if="controla421" :isFirst="true" :picSource="picList1[1]" @changePic1="changePic1($event, 1)"></add-table>
+                    <a-checkbox value="6" @change="showList($event, '金黄色葡萄球菌', 'controla426', true)">金黄色葡萄球菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[6]" v-if="controla426" :isFirst="true" :picSource="picList1[6]" @changePic1="changePic1($event, 6)"></add-table>
+                    <a-checkbox value="8" @change="showList($event, '流感嗜血杆菌', 'controla428', true)">流感嗜血杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[8]" v-if="controla428" :isFirst="true" :picSource="picList1[8]" @changePic1="changePic1($event, 8)"></add-table>
+                    <a-checkbox value="4" @change="showList($event, '副流感嗜血杆菌', 'controla424', true)">副流感嗜血杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[4]" v-if="controla424" :isFirst="true" :picSource="picList1[4]" @changePic1="changePic1($event, 4)"></add-table>
+                    <a-checkbox value="9" @change="showList($event, '卡他莫拉菌', 'controla429', true)">卡他莫拉菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[9]" v-if="controla429" :isFirst="true" :picSource="picList1[9]" @changePic1="changePic1($event, 9)"></add-table>
+                    <a-checkbox value="5" @change="showList($event, '鲍曼不动杆菌', 'controla425', true)">鲍曼不动杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[5]" v-if="controla425" :isFirst="true" :picSource="picList1[5]" @changePic1="changePic1($event, 5)"></add-table>
+                    <a-checkbox value="11" @change="showList($event, '洋葱霍尔德菌', 'controla4211', true)">洋葱霍尔德菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[11]" v-if="controla4211" :isFirst="true" :picSource="picList1[11]" @changePic1="changePic1($event, 11)"></add-table>
+                    <a-checkbox value="12" @change="showList($event, '嗜麦芽窄食单胞菌', 'controla4212', true)">嗜麦芽窄食单胞菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[12]" v-if="controla4212" :isFirst="true" :picSource="picList1[12]" @changePic1="changePic1($event, 12)"></add-table>
+                    <a-checkbox value="7" @change="showList($event, '其他', 'controla427', true)">其他</a-checkbox>
+                    <a-input style="width: 240px;margin-right: 10px;" v-if="controla427" @change="otherChange($event, 7, true)" autocomplete="off" v-decorator="['otherName1', {...inputRequired, initialValue: otherName1}]"></a-input>
+                    <add-table :dataSource="optionDataSource[7]" v-if="controla427" :isFirst="true" :picSource="picList1[7]" @changePic1="changePic1($event, 7)"></add-table>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="铜绿假单胞菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla420">
+                  <a-radio-group v-decorator="['a421', {...require1, initialValue: initValue('a421')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="肺炎克雷伯菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla422">
+                  <a-radio-group v-decorator="['a422', {...require1, initialValue: initValue('a422')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="大肠杆菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla4210">
+                  <a-radio-group v-decorator="['a423', {...require1, initialValue: initValue('a423')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="阴沟肠杆菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla423">
+                  <a-radio-group v-decorator="['a424', {...require1, initialValue: initValue('a424')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="肺炎链球菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla421">
+                  <a-radio-group v-decorator="['a425', {...require1, initialValue: initValue('a425')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="金黄色葡萄球菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla426">
+                  <a-radio-group v-decorator="['a426', {...require1, initialValue: initValue('a426')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="流感嗜血杆菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla428">
+                  <a-radio-group v-decorator="['a427', {...require1, initialValue: initValue('a427')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="副流感嗜血杆菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla424">
+                  <a-radio-group v-decorator="['a428', {...require1, initialValue: initValue('a428')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="卡他莫拉菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla429">
+                  <a-radio-group v-decorator="['a429', {...require1, initialValue: initValue('a429')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="鲍曼不动杆菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla425">
+                  <a-radio-group v-decorator="['a4210', {...require1, initialValue: initValue('a4210')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="洋葱霍尔德菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla4211">
+                  <a-radio-group v-decorator="['a4211', {...require1, initialValue: initValue('a4211')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="嗜麦芽窄食单胞菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla4212">
+                  <a-radio-group v-decorator="['a4212', {...require1, initialValue: initValue('a4212')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla427">
+                  <a-radio-group v-decorator="['a4213', {...require1, initialValue: initValue('a4213')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+              </div>
+              <div v-if="control2">
+                <div class="title">2.真菌</div>
+                <a-form-item label="取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b1', {...dateRequire, initialValue: initValue('b1', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="是否本院:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-radio-group v-decorator="['b2', {...require1, initialValue: initValue('b2')}]" @change="changeRadio($event, 'controlb2')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="医院名称" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb2">
+                  <a-input style="width: 240px;" v-decorator="['b21', {...inputRequired, initialValue: initValue('b21')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="标本类型:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b3', {...selectRequired, initialValue: initValue('b3', 'array')}]">
+                    <a-checkbox value="1" @change="changeSelect($event, 'controlb31')">痰液</a-checkbox>
+                    <a-checkbox value="2" @change="changeSelect($event, 'controlb32')">诱导痰</a-checkbox>
+                    <a-checkbox value="3" @change="changeSelect($event, 'controlb33')">支气管肺泡灌洗液</a-checkbox>
+                    <a-checkbox value="4" @change="changeSelect($event, 'controlb34')">血标本</a-checkbox>
+                    <a-checkbox value="5">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="痰液培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlb31">
+                  <a-radio-group v-decorator="['b31', {...selectRequired, initialValue: initValue('b31')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="痰液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlb31">
+                  <a-radio-group v-decorator="['b311', {...selectRequired, initialValue: initValue('b311')}]" @change="changeRadio($event, 'controlb3113')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他痰液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlb3113">
+                  <a-input style="width: 240px;" v-decorator="['b3111', {...inputRequired, initialValue: initValue('b3111')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="诱导痰培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlb32">
+                  <a-radio-group v-decorator="['b32', {...selectRequired, initialValue: initValue('b32')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="诱导痰检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlb32">
+                  <a-radio-group v-decorator="['b321', {...selectRequired, initialValue: initValue('b321')}]" @change="changeRadio($event, 'controlb3213')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他诱导痰检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlb3213">
+                  <a-input style="width: 240px;" v-decorator="['b3211', {...inputRequired, initialValue: initValue('b3211')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="支气管肺泡灌洗液培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlb33">
+                  <a-radio-group v-decorator="['b33', {...selectRequired, initialValue: initValue('b33')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="支气管肺泡灌洗液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlb33">
+                  <a-radio-group v-decorator="['a331', {...selectRequired, initialValue: initValue('b331')}]" @change="changeRadio($event, 'controlb3313')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他支气管肺泡灌洗液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlb3313">
+                  <a-input style="width: 240px;" v-decorator="['b3311', {...inputRequired, initialValue: initValue('b3311')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="血标本培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlb34">
+                  <a-radio-group v-decorator="['b34', {...selectRequired, initialValue: initValue('b34')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="血标本检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlb34">
+                  <a-radio-group v-decorator="['b341', {...selectRequired, initialValue: initValue('b341')}]" @change="changeRadio($event, 'controlb3413')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他血标本检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlb3413">
+                  <a-input style="width: 240px;" v-decorator="['b3411', {...inputRequired, initialValue: initValue('b3411')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="是否分离到微生物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b4', {...require1, initialValue: initValue('b4')}]" @change="changeRadio($event, 'controlb4')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="真菌:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb4">
+                  <a-checkbox-group v-decorator="['b42', {...selectRequired, initialValue: initValue('b42', 'array')}]">
+                    <a-checkbox value="0">白色念珠菌</a-checkbox>
+                    <a-checkbox value="1">曲霉</a-checkbox>
+                    <a-checkbox value="2" @change="changeSelect($event, 'controlb422')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="其他真菌" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb422">
+                  <a-input style="width: 240px;" v-decorator="['b43', {...inputRequired, initialValue: initValue('b43')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <div v-if="control3">
+                <div class="title">3.分枝杆菌</div>
+                <a-form-item label="(1) 取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['c1', {...dateRequire, initialValue: initValue('c1', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="(2) 是否本院:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-radio-group v-decorator="['c2', {...require1, initialValue: initValue('c2')}]" @change="changeRadio($event, 'controlc2')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="医院名称" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlc2">
+                  <a-input style="width: 240px;" v-decorator="['c21', {...inputRequired, initialValue: initValue('c21')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(3) 标本类型:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['c3', {...selectRequired, initialValue: initValue('c3', 'array')}]">
+                    <a-checkbox value="1" @change="changeSelect($event, 'controlc31')">痰液</a-checkbox>
+                    <a-checkbox value="2" @change="changeSelect($event, 'controlc32')">诱导痰</a-checkbox>
+                    <a-checkbox value="3" @change="changeSelect($event, 'controlc33')">支气管肺泡灌洗液</a-checkbox>
+                    <a-checkbox value="4" @change="changeSelect($event, 'controlc34')">血标本</a-checkbox>
+                    <a-checkbox value="5">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="痰液培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlc31">
+                  <a-radio-group v-decorator="['c31', {...selectRequired, initialValue: initValue('c31')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="痰液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlc31">
+                  <a-radio-group v-decorator="['c311', {...selectRequired, initialValue: initValue('c311')}]" @change="changeRadio($event, 'controlc3113')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他痰液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlc3113">
+                  <a-input style="width: 240px;" v-decorator="['c3111', {...inputRequired, initialValue: initValue('c3111')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="诱导痰培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlc32">
+                  <a-radio-group v-decorator="['c32', {...selectRequired, initialValue: initValue('c32')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="诱导痰检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlc32">
+                  <a-radio-group v-decorator="['c321', {...selectRequired, initialValue: initValue('c321')}]" @change="changeRadio($event, 'controlc3213')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他诱导痰检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlc3213">
+                  <a-input style="width: 240px;" v-decorator="['c3211', {...inputRequired, initialValue: initValue('c3211')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="支气管肺泡灌洗液培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlc33">
+                  <a-radio-group v-decorator="['c33', {...selectRequired, initialValue: initValue('c33')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="支气管肺泡灌洗液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlc33">
+                  <a-radio-group v-decorator="['c331', {...selectRequired, initialValue: initValue('c331')}]" @change="changeRadio($event, 'controlc3313')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他支气管肺泡灌洗液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlc3313">
+                  <a-input style="width: 240px;" v-decorator="['c3311', {...inputRequired, initialValue: initValue('c3311')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="血标本培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlc34">
+                  <a-radio-group v-decorator="['c34', {...selectRequired, initialValue: initValue('c34')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="血标本检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlc34">
+                  <a-radio-group v-decorator="['c341', {...selectRequired, initialValue: initValue('c341')}]" @change="changeRadio($event, 'controlc3413')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他血标本检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlc3413">
+                  <a-input style="width: 240px;" v-decorator="['c3411', {...inputRequired, initialValue: initValue('c3411')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="分离到微生物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['c4', {...selectRequired, initialValue: initValue('c4', 'array')}]">
+                    <a-checkbox value="0" :disabled="detect('c4', '2') || initC4">结核分枝杆菌</a-checkbox>
+                    <a-checkbox value="1" :disabled="detect('c4', '2') || initC4" @change="changeSelect($event, 'controlc41')">非结核分枝杆菌</a-checkbox>
+                    <a-checkbox value="2" @change="handleNone($event, 'c4', '2', ['controlc41'])">阴性</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="非结核分枝杆菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlc41">
+                  <a-radio-group v-decorator="['c422', {...require1, initialValue: initValue('c422')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controlc41">
+                  <a-form-item label="非结核分枝杆菌:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['c41', {...selectRequired, initialValue: initValue('c41', 'array')}]">
+                      <a-checkbox value="1">堪萨斯分枝杆菌</a-checkbox>
+                      <a-checkbox value="2">龟分枝杆菌</a-checkbox>
+                      <a-checkbox value="3">脓肿分枝杆菌</a-checkbox>
+                      <a-checkbox value="4">鸟分枝杆菌复合群(MAC)</a-checkbox>
+                      <a-checkbox value="5" @change="changeSelect($event, 'controlc415')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <a-form-item label="其他非结核分枝杆菌名称:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlc415">
+                    <a-input style="width: 240px;margin-right: 10px;" autocomplete="off" v-decorator="['c43', {...inputRequired, initialValue: initValue('c43')}]"></a-input>
+                  </a-form-item>
+                </div>
+              </div>
+              <div v-if="control5">
+                <div class="title">4.其他病原</div>
+                <a-form-item label="(1) 取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['d1', {...dateRequire, initialValue: initValue('d1', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="(2) 其他病原种类:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['d2', {...inputRequired, initialValue: initValue('d2')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(3) 标本类型:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['d3', {...selectRequired, initialValue: initValue('d3', 'array')}]">
+                    <a-checkbox value="1" @change="changeSelect($event, 'controld31')">痰液</a-checkbox>
+                    <a-checkbox value="2" @change="changeSelect($event, 'controld31')">诱导痰</a-checkbox>
+                    <a-checkbox value="3" @change="changeSelect($event, 'controld31')">支气管肺泡灌洗液</a-checkbox>
+                    <a-checkbox value="4" @change="changeSelect($event, 'controld31')">血标本</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="痰液培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controld31">
+                  <a-radio-group v-decorator="['d31', {...selectRequired, initialValue: initValue('d31')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="诱导痰培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controld32">
+                  <a-radio-group v-decorator="['d32', {...selectRequired, initialValue: initValue('d32')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label=" 支气管肺泡灌洗液培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controld33">
+                  <a-radio-group v-decorator="['d33', {...selectRequired, initialValue: initValue('d33')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="血标本培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controld34">
+                  <a-radio-group v-decorator="['d34', {...selectRequired, initialValue: initValue('d34')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+              </div>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, computeScore, getMedicineAllergyList, recoverSubmit, exportFormData } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import AddTable from "../model/table"
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+import _ from 'lodash'
+export default {
+  name: 'mask6',
+  components: {
+    STree,
+    MyIcon,
+    AddTable,
+    ContactForm
+  },
+  data() {
+    return {
+      optionDataSource: [],
+      optionDataSource2: [],
+      markName: 'bywsw',
+      title: '基线',
+      openKeys: [],
+      defaultSelectedKeys: [6],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: '100%',
+        "padding-right": "0px",
+        "border-right": "1px solid #ddd"
+      },
+      baselineFormStyle: {
+        // height: '444px',
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 7 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 17 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 3, offset: 7 }
+      },
+      labelColOffset2: {
+        md: { span: 4, offset: 7 }
+      },
+      wrapperOffset2: {
+        md: { span: 13 }
+      },
+      wrapperOffset: {
+        md: { span: 14 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      bywsw: undefined,
+      controla2: false,
+      controla4: false,
+      controla6: false,
+      controlb2: false,
+      controlb4: false,
+      controlc2: false,
+      controlc41: false,
+      controla420: false,
+      controla421: false,
+      controla422: false,
+      controla423: false,
+      controla424: false,
+      controla425: false,
+      controla426: false,
+      controla427: false,
+      controla428: false,
+      controla429: false,
+      controla4210: false,
+      controla4211: false,
+      controla4212: false,
+      controlb422: false,
+      controlc415: false,
+      controla31: false,
+      controla32: false,
+      controla33: false,
+      controla34: false,
+      controlb31: false,
+      controlb32: false,
+      controlb33: false,
+      controlb34: false,
+      controlc31: false,
+      controlc32: false,
+      controlc33: false,
+      controlc34: false,
+      controld31: false,
+      controld32: false,
+      controld33: false,
+      controld34: false,
+      spinning: false,
+      executeStatus: false,
+      control1: false,
+      control2: false,
+      control3: false,
+      control4: false,
+      control5: false,
+      type1: '',
+      otherName1: '',
+      otherName2: '',
+      picList1: [],
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined,
+      initC4: false,
+      controla3113: false,
+      controla3213: false,
+      controla3313: false,
+      controla3413: false,
+      controlb3113: false,
+      controlb3213: false,
+      controlb3313: false,
+      controlb3413: false,
+      controlc3113: false,
+      controlc3213: false,
+      controlc3313: false,
+      controlc3413: false
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    getFormData() {
+      this.spinning = true
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          this.spinning = false
+          Object.keys(res.data.bywsw).forEach(key => {
+            if (res.data.bywsw[key] === 0) {
+              res.data.bywsw[key] = "0";
+            }
+          });
+          if (res.data && res.data.bywsw)
+            that.bywsw = that.dealAnswers(res.data)
+        })
+        .catch(error => {
+          this.spinning = false
+          console.log(error)
+        })
+    },
+    changeSelect(e, t) {
+      var that = this
+      this[t] = e.target.checked
+      if (t === 'control4' && e.target.checked) {
+        this.control1 = false
+        this.control2 = false
+        this.control3 = false
+        this.control5 = false
+        //赋值必须要延时
+        setTimeout(function() {
+          that.form.setFieldsValue({ a: ['4'] })
+        }, 0)
+      }
+    },
+    changeRadio(e, t) {
+      if (t === 'controla2' || t === 'controlb2' || t === 'controlc2') {
+        if (e.target.value === '-1') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (t === 'controla4' && e.target.value === '-1') {
+        this.controla4 = false
+        // this.controla420 = false
+        // this.controla421 = false
+        // this.controla422 = false
+        // this.controla423 = false
+        // this.controla424 = false
+        // this.controla425 = false
+        // this.controla426 = false
+        // this.controla427 = false
+        // this.controla428 = false
+        // this.controla429 = false
+        // this.controla4210 = false
+        // this.controla4211 = false
+        // this.controla4212 = false
+      } else if (t === 'controlb4' && e.target.value === '-1') {
+        this.controlb4 = false
+        this.controlb422 = false
+      } else if ((t !== 'controla3113' && t !== 'controla3213' && t !== 'controla3313' && t !== 'controla3413' && t !== 'controlb3113' && t !== 'controlb3213' && t !== 'controlb3313' && t !== 'controlb3413' && t !== 'controlc3113' && t !== 'controlc3213' && t !== 'controlc3313' && t !== 'controlc3413') && e.target.value === '1') {
+        this[t] = true
+      } else if((t === 'controla3113' || t === 'controla3213' || t === 'controla3313' || t === 'controla3413' ||
+        t === 'controlb3113' || t === 'controlb3213' || t === 'controlb3313' || t === 'controlb3413' ||
+        t === 'controlc3113' || t === 'controlc3213' || t === 'controlc3313' || t === 'controlc3413') && e.target.value === '3') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      if (e.key >= 31 && e.key <= 36) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      } else {
+        this.$router.replace('/list/basis/' + this.patientBasisId + '/' + e.key)
+      }
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          const allergy = []
+          for (var key in this.optionDataSource) {
+            _.each(this.optionDataSource[key], function(item) {
+              allergy.push({
+                markId: 1,
+                microbeName: item.microbeName,
+                antibiotic: item.antibiotic,
+                antibioticResult: item.antibioticResult,
+                allergyValue: item.allergyValue
+              })
+            })
+          }
+          for (var key in this.optionDataSource2) {
+            _.each(this.optionDataSource2[key], function(item) {
+              allergy.push({
+                markId: 2,
+                microbeName: item.microbeName,
+                antibiotic: item.antibiotic,
+                antibioticResult: item.antibioticResult,
+                allergyValue: item.allergyValue
+              })
+            })
+          }
+          //处理附件
+          var alList1 = ['铜绿假单胞菌', '阴沟肠杆菌', '肺炎克雷伯菌', '肺炎链球菌', '副流感嗜血杆菌', '鲍曼不动杆菌', '金黄色葡萄球菌', this.form.getFieldValue('otherName1')]
+
+          var pic1 = []
+          if (!_.isEmpty(this.picList1)) {
+            pic1 = _.map(this.picList1, function(v, i) {
+              return '1-' + alList1[i] + '-' + v
+            })
+          }
+          var re = this.form.getFieldsValue()
+          var that = this
+          re = {
+            ...re,
+            'a': typeof re['a'] !== 'undefined' ? re['a'].join(',') : '',
+            'a3': typeof re['a3'] !== 'undefined' ? re['a3'].join(',') : '',
+            'b3': typeof re['b3'] !== 'undefined' ? re['b3'].join(',') : '',
+            'c3': typeof re['c3'] !== 'undefined' ? re['c3'].join(',') : '',
+            'd3': typeof re['d3'] !== 'undefined' ? re['d3'].join(',') : '',
+            'a1': typeof re['a1'] !== 'undefined' ? re['a1'].format('YYYY-MM-DD') : '',
+            'b1': typeof re['b1'] !== 'undefined' ? re['b1'].format('YYYY-MM-DD') : '',
+            'c1': typeof re['c1'] !== 'undefined' ? re['c1'].format('YYYY-MM-DD') : '',
+            'd1': typeof re['d1'] !== 'undefined' ? re['d1'].format('YYYY-MM-DD') : '',
+            'a42': typeof re['a42'] !== 'undefined' ? re['a42'].join(',') : '',
+            'b42': typeof re['b42'] !== 'undefined' ? re['b42'].join(',') : '',
+            'c4': typeof re['c4'] !== 'undefined' ? re['c4'].join(',') : '',
+            'c41': typeof re['c41'] !== 'undefined' ? re['c41'].join(',') : ''
+          }
+          console.log(re)
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.bywsw && this.bywsw.bywswId) {
+            re.bywswId = this.bywsw.bywswId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          params.append('allergy', JSON.stringify(allergy))
+          params.append('fileNameForMa', JSON.stringify(pic1))
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', this.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    save() {
+      const allergy = []
+      for (var key in this.optionDataSource) {
+        _.each(this.optionDataSource[key], function(item) {
+          allergy.push({
+            markId: 1,
+            microbeName: item.microbeName,
+            antibiotic: item.antibiotic,
+            antibioticResult: item.antibioticResult,
+            allergyValue: item.allergyValue
+          })
+        })
+      }
+      for (var key in this.optionDataSource2) {
+        _.each(this.optionDataSource2[key], function(item) {
+          allergy.push({
+            markId: 2,
+            microbeName: item.microbeName,
+            antibiotic: item.antibiotic,
+            antibioticResult: item.antibioticResult,
+            allergyValue: item.allergyValue
+          })
+        })
+      }
+      //处理附件
+      var alList1 = ['铜绿假单胞菌', '阴沟肠杆菌', '肺炎克雷伯菌', '肺炎链球菌', '副流感嗜血杆菌', '鲍曼不动杆菌', '金黄色葡萄球菌', this.form.getFieldValue('otherName1')]
+
+      var pic1 = []
+      if (!_.isEmpty(this.picList1)) {
+        pic1 = _.map(this.picList1, function(v, i) {
+          return '1-' + alList1[i] + '-' + v
+        })
+      }
+      var re = this.form.getFieldsValue()
+      var that = this
+      re = {
+        ...re,
+        'a': typeof re['a'] !== 'undefined' ? re['a'].join(',') : '',
+        'a3': typeof re['a3'] !== 'undefined' ? re['a3'].join(',') : '',
+        'b3': typeof re['b3'] !== 'undefined' ? re['b3'].join(',') : '',
+        'c3': typeof re['c3'] !== 'undefined' ? re['c3'].join(',') : '',
+        'a1': typeof re['a1'] !== 'undefined' ? re['a1'].format('YYYY-MM-DD') : '',
+        'b1': typeof re['b1'] !== 'undefined' ? re['b1'].format('YYYY-MM-DD') : '',
+        'c1': typeof re['c1'] !== 'undefined' ? re['c1'].format('YYYY-MM-DD') : '',
+        'd1': typeof re['d1'] !== 'undefined' ? re['d1'].format('YYYY-MM-DD') : '',
+        'a42': typeof re['a42'] !== 'undefined' ? re['a42'].join(',') : '',
+        'b42': typeof re['b42'] !== 'undefined' ? re['b42'].join(',') : '',
+        'c4': typeof re['c4'] !== 'undefined' ? re['c4'].join(',') : '',
+        'c41': typeof re['c41'] !== 'undefined' ? re['c41'].join(',') : ''
+      }
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.bywsw && this.bywsw.bywswId) {
+        re.bywswId = this.bywsw.bywswId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      params.append('allergy', JSON.stringify(allergy))
+      params.append('fileNameForMa', JSON.stringify(pic1))
+
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', this.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    initValue(key, type = 'normal') {
+      if (!this.bywsw) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.bywsw[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.bywsw[key])
+      } else if (type === 'array') {
+        return this.bywsw[key].split(',')
+      } else {
+        return this.bywsw[key] + ''
+      }
+    },
+    dealAnswers(data) {
+      var that = this
+      var answer = data.bywsw
+      var alList = ['铜绿假单胞菌', '阴沟肠杆菌', '肺炎克雷伯菌', '肺炎链球菌', '副流感嗜血杆菌', '鲍曼不动杆菌', '金黄色葡萄球菌']
+      if (answer && !_.isEmpty(answer)) {
+        var splitArr = []
+        if (answer.a) {
+          splitArr = answer.a.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.control1 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.control2 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.control3 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.control4 = true
+          }
+          if (splitArr.indexOf('5') > -1) {
+            this.control5 = true
+          }
+        }
+        if (answer.a2 && answer.a2 === -1) {
+          this.controla2 = true
+        }
+        if (answer.a4 && answer.a4 === 1) {
+          this.controla4 = true
+        }
+        if (answer.a6 && answer.a6 === 1) {
+          this.controla6 = true
+        }
+        if (answer.b2 && answer.b2 === -1) {
+          this.controlb2 = true
+        }
+        if (answer.b4 && answer.b4 === 1) {
+          this.controlb4 = true
+        }
+        if (answer.c2 && answer.c2 === -1) {
+          this.controlc2 = true
+        }
+        if (answer.c4) {
+          splitArr = answer.c4.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controlc41 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.initC4 = true
+          }
+        }
+        if (answer.a3) {
+          splitArr = answer.a3.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controla31 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controla32 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.controla33 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.controla34 = true
+          }
+        }
+        if(answer.a311 === 3) {
+          this.controla3113 = true
+        }
+        if(answer.a321 === 3) {
+          this.controla3213 = true
+        }
+        if(answer.a331 === 3) {
+          this.controla3313 = true
+        }
+        if(answer.a341 === 3) {
+          this.controla3413 = true
+        }
+        if(answer.b311 === 3) {
+          this.controlb3113 = true
+        }
+        if(answer.b321 === 3) {
+          this.controlb3213 = true
+        }
+        if(answer.b331 === 3) {
+          this.controlb3313 = true
+        }
+        if(answer.b341 === 3) {
+          this.controlb3413 = true
+        }
+        if(answer.c311 === 3) {
+          this.controlc3113 = true
+        }
+        if(answer.c321 === 3) {
+          this.controlc3213 = true
+        }
+        if(answer.c331 === 3) {
+          this.controlc3313 = true
+        }
+        if(answer.c341 === 3) {
+          this.controlc3413 = true
+        }
+        if (answer.b3) {
+          splitArr = answer.b3.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controlb31 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controlb32 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.controlb33 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.controlb34 = true
+          }
+        }
+        if (answer.c3) {
+          splitArr = answer.c3.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controlc31 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controlc32 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.controlc33 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.controlc34 = true
+          }
+        }
+        if (answer.d3) {
+          splitArr = answer.d3.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controld31 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controld32 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.controld33 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.controld34 = true
+          }
+        }
+        if (answer.a42) {
+          splitArr = answer.a42.split(',')
+          if (splitArr.indexOf('0') > -1) {
+            this.controla420 = true
+          }
+          if (splitArr.indexOf('1') > -1) {
+            this.controla421 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controla422 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.controla423 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.controla424 = true
+          }
+          if (splitArr.indexOf('5') > -1) {
+            this.controla425 = true
+          }
+          if (splitArr.indexOf('6') > -1) {
+            this.controla426 = true
+          }
+          if (splitArr.indexOf('7') > -1) {
+            this.controla427 = true
+          }
+          if (splitArr.indexOf('8') > -1) {
+            this.controla428 = true
+          }
+          if (splitArr.indexOf('9') > -1) {
+            this.controla429 = true
+          }
+          if (splitArr.indexOf('10') > -1) {
+            this.controla4210 = true
+          }
+          if (splitArr.indexOf('11') > -1) {
+            this.controla4211 = true
+          }
+          if (splitArr.indexOf('12') > -1) {
+            this.controla4212 = true
+          }
+        }
+        if (data[1]) {
+          _.each(alList, function(v, i) {
+            if (data[1][v]) {
+              that.optionDataSource[i] = _.map(data[1][v], function(v, i) {
+                return {
+                  keyW: i,
+                  microbeName: v.microbeName,
+                  antibiotic: v.antibiotic,
+                  antibioticResult: v.antibioticResult,
+                  allergyValue: v.allergyValue
+                };
+              })
+            }
+          })
+          var other = _.filter(data[1], function(v, k) { return alList.indexOf(k) === -1 })
+          if (other && other.length) {
+            that.optionDataSource[7] = _.map(other[0], function(v, i) {
+              return {
+                keyW: i,
+                microbeName: v.microbeName,
+                antibiotic: v.antibiotic,
+                antibioticResult: v.antibioticResult,
+                allergyValue: v.allergyValue
+              };
+            })
+            that.otherName1 = other[0][0].microbeName
+          }
+        }
+        if (answer.b42) {
+          if (splitArr.indexOf('2') > -1) {
+            this.controlb422 = true
+          }
+        }
+        if (data[2]) {
+          _.each(alList, function(v, i) {
+            if (data[2][v]) {
+              that.optionDataSource2[i] = _.map(data[2][v], function(v, i) {
+                return {
+                  keyW: i,
+                  microbeName: v.microbeName,
+                  antibiotic: v.antibiotic,
+                  antibioticResult: v.antibioticResult,
+                  allergyValue: v.allergyValue
+                };
+              })
+            }
+          })
+          var other = _.filter(data[2], function(v, k) { return alList.indexOf(k) === -1 })
+          if (other && other.length) {
+            that.optionDataSource2[7] = _.map(other[0], function(v, i) {
+              return {
+                keyW: i,
+                microbeName: v.microbeName,
+                antibiotic: v.antibiotic,
+                antibioticResult: v.antibioticResult,
+                allergyValue: v.allergyValue
+              };
+            })
+            that.otherName2 = other[0][0].microbeName
+          }
+        }
+        if (answer.c41) {
+          splitArr = answer.c41.split(',')
+          if (splitArr.indexOf('5') > -1) {
+            this.controlc415 = true
+          }
+        }
+      }
+      return answer
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    showList(e, name, controlNode, isSimple) {
+      if (e.target.checked) {
+        this[controlNode] = true
+        if (name == "其他") return
+        this.getMedicineAllergyList(name, e.target.value, isSimple)
+      } else {
+        this[controlNode] = false
+        if (isSimple) {
+          this.$set(this.optionDataSource, e.target.value, [])
+        } else {
+          this.$set(this.optionDataSource2, e.target.value, [])
+        }
+
+      }
+    },
+    getMedicineAllergyList(value, index, isSimple) {
+      const that = this
+      const params = new URLSearchParams()
+      params.append('microbeName', value)
+      getMedicineAllergyList(params).then(res => {
+        const optionDataSource = _.map(res.data, function(v, i) {
+          return {
+            keyW: i,
+            microbeName: v.microbeName,
+            antibiotic: v.antibiotic,
+            antibioticResult: v.antibioticResult,
+            allergyValue: v.allergyValue
+          };
+        })
+        if (isSimple) {
+          that.$set(that.optionDataSource, index, optionDataSource)
+        } else {
+          that.$set(that.optionDataSource2, index, optionDataSource)
+        }
+      })
+    },
+    otherChange(e, index, isSimple) {
+      this.getMedicineAllergyList(e.target.value, index, isSimple)
+    },
+    changeType1(v) {
+      this.type1 = v
+    },
+    changePic1(e, index) {
+      this.picList1[index] = e
+    },
+    withdraw() {
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.bywsw.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    _importData() {
+      var that = this
+      this.$confirm({
+        title: '是否确定导入数据?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('basisMarkId', that.maskId)
+          params.append('patientBasisId', that.patientBasisId)
+          exportFormData(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              that.bywsw = _.extend(that.bywsw || {}, that.dealAnswers(res.data.data))
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    handleNone(e, d, v, arr, extra) {
+      if(e.target.checked){
+        let data = {}
+        data[d] = [v]
+        if(d === 'a') {
+          this.control1 = false
+          this.control2 = false
+          this.control3 = false
+          this.control5 = false
+          this[extra] = true
+        }
+        this.$nextTick(() => {
+          this.form.setFieldsValue(data)
+          arr.forEach((t) => {
+            this[t] = false
+          })
+        })
+      } else {
+        if(d === 'a') {
+          this.control4 = false
+        }
+        if(d === 'c4') {
+          this.initC4 = false
+        }
+      }
+    },
+    detect(d, v) {
+      if(Array.isArray(this.form.getFieldValue(d)) && this.form.getFieldValue(d).indexOf(v) > -1) {
+        return true
+      } else {
+        return false
+      }
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+
+      .treeSubTitle {
+        font-size: 14px;
+      }
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+    margin-top: 42px;
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 20px 20px 40px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+@media screen and (max-width: 1366px) {
+  .control-m-line.ant-checkbox-group {
+    top: 10px;
+    position: relative;
+  }
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/account/center/components/mask-7.vue b/src/views/account/center/components/mask-7.vue
new file mode 100644
index 0000000000..ced482ef4f
--- /dev/null
+++ b/src/views/account/center/components/mask-7.vue
@@ -0,0 +1,1248 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" :layout="formLayout" class="base-form">
+            <div class="clearfix" style="position:relative;top: 20px;">
+              <a-button class="btn fr" type="primary" @click="_importData">导入数据</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!(ICON患者,必须填写实际检测值。基线访视辅助检查可使用入组前6个月内的检查结果,但要求从检查日期到入组日期之间未发生急性加重,否则需要在基线数据收集时重新辅助检查)</p>
+              <div class="title">1.病因学相关检查</div>
+              <a-form-item class="border-dotted" label="(1) 胃食管反流病量表评分:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-popover>
+                  <template slot="content">评分标准:Gerd-Q计分>=8分,提示胃食管反流</template>
+                  <a-icon type="exclamation-circle" style="position: relative;left: -20px;color: #0399ec;cursor: pointer;" />
+                </a-popover>
+                <a-input style="width: 240px;" v-decorator="['z', {...inputRequired, initialValue: initValue('z')}]" autocomplete="off" :readOnly="true"></a-input>
+              </a-form-item>
+              <a-form-item label="评分日期" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-date-picker placeholder="请选择" v-decorator="['z7', { initialValue: initValue('z7', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+              </a-form-item>
+              <div class="font-w">回忆过去7天当中下列症状发生的频率:</div>
+              <a-form-item label="您胸骨后出现灼烧感(烧心)的频率?:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['z1', {...selectRequired, initialValue: initValue('z1')}]" @change="computeGerd">
+                  <a-radio value="1">0天/周</a-radio>
+                  <a-radio value="2">1天/周</a-radio>
+                  <a-radio value="3">2-3天/周</a-radio>
+                  <a-radio value="4">4-7天/周</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="感觉到有胃内容物(液体或食物)上返到您的喉咙或口腔(反流)的频率?:" :labelCol="labelCol10" :wrapperCol="wrapperHor14">
+                <a-radio-group v-decorator="['z2', {...selectRequired, initialValue: initValue('z2')}]" @change="computeGerd">
+                  <a-radio value="1">0天/周</a-radio>
+                  <a-radio value="2">1天/周</a-radio>
+                  <a-radio value="3">2-3天/周</a-radio>
+                  <a-radio value="4">4-7天/周</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="您感到上腹部中央疼痛的频率?:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['z3', {...selectRequired, initialValue: initValue('z3')}]" @change="computeGerd">
+                  <a-radio value="1">0天/周</a-radio>
+                  <a-radio value="2">1天/周</a-radio>
+                  <a-radio value="3">2-3天/周</a-radio>
+                  <a-radio value="4">4-7天/周</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="您感到恶心的频率?:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['z4', {...selectRequired, initialValue: initValue('z4')}]" @change="computeGerd">
+                  <a-radio value="1">0天/周</a-radio>
+                  <a-radio value="2">1天/周</a-radio>
+                  <a-radio value="3">2-3天/周</a-radio>
+                  <a-radio value="4">4-7天/周</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="由于您的烧心和/或反流而难以获得良好夜间睡眠的频率?:" :labelCol="labelCol10" :wrapperCol="wrapperHor14" class="border-dotted">
+                <a-radio-group v-decorator="['z5', {...selectRequired, initialValue: initValue('z5')}]" @change="computeGerd">
+                  <a-radio value="1">0天/周</a-radio>
+                  <a-radio value="2">1天/周</a-radio>
+                  <a-radio value="3">2-3天/周</a-radio>
+                  <a-radio value="4">4-7天/周</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="除以上告知服用的药物外,您额外服用药物来缓解烧心和/或反流的频率?(如碳酸钙、氢氧化铝等抗酸剂):" :labelCol="labelCol14" :wrapperCol="wrapperHor10">
+                <a-radio-group v-decorator="['z6', {...selectRequired, initialValue: initValue('z6')}]" @change="computeGerd">
+                  <a-radio value="1">0天/周</a-radio>
+                  <a-radio value="2">1天/周</a-radio>
+                  <a-radio value="3">2-3天/周</a-radio>
+                  <a-radio value="4">4-7天/周</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(2) ABPA相关检查:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a1', {...selectRequired, initialValue: initValue('a1')}]" @change="changeRadio($event, 'controla1')">
+                  <a-radio value="1">已做</a-radio>
+                  <a-radio value="-1">未做</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controla1">
+                <a-form-item label="检查日期" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" v-decorator="['b1', {...dateRequire, initialValue: initValue('b1', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="外周血嗜酸细胞(绝对值):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-input addonAfter="*10^9/L" style="width: 240px; margin-right: 20px;" v-decorator="['a11', {initialValue: initValue('a11')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-radio-group v-decorator="['a12', {...selectRequired, initialValue: initValue('a12')}]">
+                      <a-radio value="1">升高</a-radio>
+                      <a-radio value="2">正常</a-radio>
+                      <a-radio value="3">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="血总IgE:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-input addonAfter="IU/mL" style="width: 240px; margin-right: 20px;" v-decorator="['a13', {initialValue: initValue('a13')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-radio-group v-decorator="['a14', {...selectRequired, initialValue: initValue('a14')}]">
+                      <a-radio value="1">升高</a-radio>
+                      <a-radio value="2">正常</a-radio>
+                      <a-radio value="3">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="曲霉特异IgE:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-input addonAfter="IU/L" style="width: 240px; margin-right: 20px;" v-decorator="['a15', {initialValue: initValue('a15')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-radio-group v-decorator="['a16', {...selectRequired, initialValue: initValue('a16')}]">
+                      <a-radio value="1">升高</a-radio>
+                      <a-radio value="2">正常</a-radio>
+                      <a-radio value="3">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="曲霉皮肤点刺试验:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a17', {...selectRequired, initialValue: initValue('a17')}]">
+                    <a-radio value="1">阴性</a-radio>
+                    <a-radio value="2">阳性</a-radio>
+                    <a-radio value="3">未测量</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="胸部CT有无中心性支扩:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a18', {...selectRequired, initialValue: initValue('a18')}]">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="2">无</a-radio>
+                    <a-radio value="3">未测量</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="胸部CT提示高密度黏液栓嵌顿:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a19', {...selectRequired, initialValue: initValue('a19')}]">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="2">无</a-radio>
+                    <a-radio value="3">未测量</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+              </div>
+              <a-form-item label="(3) 自身免疫抗体检查:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a2', {...selectRequired, initialValue: initValue('a2')}]" @change="changeRadio($event, 'controla2')">
+                  <a-radio value="1">已做</a-radio>
+                  <a-radio value="-1">未做</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controla2">
+                <a-form-item label="自身免疫抗体检查时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" v-decorator="['b2', {...dateRequire, initialValue: initValue('b2', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="ANA:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a22', {...selectRequired, initialValue: initValue('a22')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <!-- <a-radio value="2">中间</a-radio> -->
+                    <a-radio value="2">阴性</a-radio>
+                    <a-radio value="3">未测量</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="ENA:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a23', {...selectRequired, initialValue: initValue('a23')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="2">阴性</a-radio>
+                    <a-radio value="3">未测量</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="ANCA:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a25', {...selectRequired, initialValue: initValue('a25')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="2">阴性</a-radio>
+                    <a-radio value="3">未测量</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他检查(记录阳性结果):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['a27', {...inputRequired, initialValue: initValue('a27')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(4-1) 球蛋白缺乏:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a3', {...selectRequired, initialValue: initValue('a3')}]" @change="changeRadio($event, 'controla3')">
+                  <a-radio value="1">已做</a-radio>
+                  <a-radio value="-1">未做</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <span slot="label">(4-2) 血清免疫球蛋白检查<span style="color: red;">(ICON):</span></span>
+                <a-radio-group v-decorator="['e2', {...selectRequired, initialValue: initValue('e2')}]" @change="changeRadio($event, 'controle2')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controla3 || controle2">
+                <div v-if="controle2">
+                  <a-form-item label="检查日期" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-date-picker placeholder="请选择" v-decorator="['b3', {...dateRequire, initialValue: initValue('b3', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                  </a-form-item>
+                </div>
+                <a-form-item label="IgM:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-input style="width: 240px; margin-right: 20px;" v-decorator="['a31', {...inputRequired, initialValue: initValue('a31')}]" autocomplete="off" addonAfter="g/L"></a-input>
+                  </a-form-item>
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-radio-group v-decorator="['a32', {...selectRequired, initialValue: initValue('a32')}]">
+                      <a-radio value="1">正常</a-radio>
+                      <a-radio value="2">降低</a-radio>
+                      <a-radio value="3">升高</a-radio>
+                      <a-radio value="4">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="IgG:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-input style="width: 240px; margin-right: 20px;" v-decorator="['a33', {...inputRequired, initialValue: initValue('a33')}]" autocomplete="off" addonAfter="g/L"></a-input>
+                  </a-form-item>
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-radio-group v-decorator="['a34', {...selectRequired, initialValue: initValue('a34')}]">
+                      <a-radio value="1">正常</a-radio>
+                      <a-radio value="2">降低</a-radio>
+                      <a-radio value="3">升高</a-radio>
+                      <a-radio value="4">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="IgA:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-input style="width: 240px; margin-right: 20px;" v-decorator="['a35', {...inputRequired, initialValue: initValue('a35')}]" autocomplete="off" addonAfter="g/L"></a-input>
+                  </a-form-item>
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-radio-group v-decorator="['a36', {...selectRequired, initialValue: initValue('a36')}]">
+                      <a-radio value="1">正常</a-radio>
+                      <a-radio value="2">降低</a-radio>
+                      <a-radio value="3">升高</a-radio>
+                      <a-radio value="4">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                </a-form-item>
+              </div>
+              <a-form-item label="(5-1) 补体缺乏:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a4', {...selectRequired, initialValue: initValue('a4')}]" @change="changeRadio($event, 'controla4')">
+                  <a-radio value="1">已做</a-radio>
+                  <a-radio value="-1">未做</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <span slot="label">(5-2) 血清补体检查<span style="color: red;">(ICON):</span></span>
+                <a-radio-group v-decorator="['e3', {...selectRequired, initialValue: initValue('e3')}]" @change="changeRadio($event, 'controle3')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controla4 || controle3">
+                <div v-if="controle3">
+                  <a-form-item label="检查日期" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-date-picker placeholder="请选择" v-decorator="['b4', {...dateRequire, initialValue: initValue('b4', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                  </a-form-item>
+                </div>
+                <a-form-item label="C3:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-input style="width: 240px; margin-right: 20px;" v-decorator="['a41', {...inputRequired, initialValue: initValue('a41')}]" autocomplete="off" addonAfter="g/L"></a-input>
+                  </a-form-item>
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-radio-group v-decorator="['a42', {...selectRequired, initialValue: initValue('a42')}]">
+                      <a-radio value="1">正常</a-radio>
+                      <a-radio value="2">降低</a-radio>
+                      <a-radio value="3">升高</a-radio>
+                      <a-radio value="4">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="C4:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-input style="width: 240px; margin-right: 20px;" v-decorator="['a43', {...inputRequired, initialValue: initValue('a43')}]" autocomplete="off" addonAfter="g/L"></a-input>
+                  </a-form-item>
+                  <a-form-item :style="{ display: 'inline-block'}">
+                    <a-radio-group v-decorator="['a44', {...selectRequired, initialValue: initValue('a44')}]">
+                      <a-radio value="1">正常</a-radio>
+                      <a-radio value="2">降低</a-radio>
+                      <a-radio value="3">升高</a-radio>
+                      <a-radio value="4">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                </a-form-item>
+              </div>
+              <a-form-item label="(6-1) α-1 抗蛋白酶缺乏:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a5', {...selectRequired, initialValue: initValue('a5')}]" @change="changeRadio($event, 'controla5')">
+                  <a-radio value="1">已做</a-radio>
+                  <a-radio value="-1">未做</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <span slot="label">(6-2) α-1 抗蛋白酶基因检查<span style="color: red;">(ICON):</span></span>
+                <a-radio-group v-decorator="['e4', {...selectRequired, initialValue: initValue('e4')}]" @change="changeRadio($event, 'controle4')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controla5 || controle4">
+                <div v-if="controle4">
+                  <a-form-item label="检查日期" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-date-picker placeholder="请选择" v-decorator="['b5', {...dateRequire, initialValue: initValue('b5', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                  </a-form-item>
+                </div>
+                <a-form-item label="基因:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a52', {...selectRequired, initialValue: initValue('a52')}]" @change="changeRadio($event, 'controla52')">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="2">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <!-- <a-form-item class="no-border" label="具体描述::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controla52">
+                  <a-input style="width: 240px;" v-decorator="['a53', {...inputRequired, initialValue: initValue('a53')}]" autocomplete="off"></a-input>
+                </a-form-item> -->
+              </div>
+              <a-form-item label="(7) 囊性纤维化:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a6', {...selectRequired, initialValue: initValue('a6')}]" @change="changeRadio($event, 'controla6')">
+                  <a-radio value="1">已做</a-radio>
+                  <a-radio value="-1">未做</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controla6">
+                <a-form-item label="汗液实验:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a61', { ...selectRequired, initialValue: initValue('a61')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="2">阴性</a-radio>
+                    <!-- <a-radio value="3">未测</a-radio> -->
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="基因检查:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a62', { ...selectRequired, initialValue: initValue('a62')}]">
+                    <a-radio value="1">纯合</a-radio>
+                    <a-radio value="2">杂合</a-radio>
+                    <a-radio value="3">无突变</a-radio>
+                    <!-- <a-radio value="4">未测</a-radio> -->
+                  </a-radio-group>
+                </a-form-item>
+              </div>
+              <a-form-item label="(8) 纤毛功能检测:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a7', {...selectRequired, initialValue: initValue('a7')}]" @change="changeRadio($event, 'controla7')">
+                  <a-radio value="1">已做</a-radio>
+                  <a-radio value="-1">未做</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controla7">
+                <a-form-item label="检查日期" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" v-decorator="['b7', {...dateRequire, initialValue: initValue('b7', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="FeNOppd:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a71', { ...selectRequired, initialValue: initValue('a71')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="2">阴性</a-radio>
+                    <a-radio value="3">未测量</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="电镜检测的活检:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a73', { ...selectRequired, initialValue: initValue('a73')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="2">阴性</a-radio>
+                    <a-radio value="3">未测量</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="分析纤毛摆动频率的活检:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a74', { ...selectRequired, initialValue: initValue('a74')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="2">阴性</a-radio>
+                    <a-radio value="3">未测量</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="基因检测:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a75', { ...selectRequired, initialValue: initValue('a75')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="2">阴性</a-radio>
+                    <a-radio value="3">未测量</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+              </div>
+              <a-form-item label="(9) 其他:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['a8', {initialValue: initValue('a8')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item class="font-w" label="(10) 小结:根据实验室检查及既往病史判断(单选):" :labelCol="{md: 20}" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a9', {...selectRequired, initialValue: initValue('a9')}]" @change="changeRadio($event, 'controla920')" style="line-height: 22px;">
+                  <a-radio value="1">特发性</a-radio>
+                  <a-radio value="2">感染后性</a-radio>
+                  <a-radio value="3">结核后性</a-radio>
+                  <a-radio value="4">原发性纤毛不动症</a-radio>
+                  <a-radio value="5">弥漫性泛细支气管炎</a-radio>
+                  <a-radio value="6">ABPA</a-radio>
+                  <a-radio value="7">炎症性肠病</a-radio>
+                  <a-radio value="8">结缔组织病(类风湿性关节炎)</a-radio>
+                  <a-radio value="21">结缔组织病(非类风湿性关节炎)</a-radio>
+                  <a-radio value="9">CF</a-radio>
+                  <a-radio value="10">α1-抗胰蛋白酶缺乏</a-radio>
+                  <a-radio value="11">误吸</a-radio>
+                  <a-radio value="12">胃食管返流病</a-radio>
+                  <a-radio value="13">大气道先天性异常</a-radio>
+                  <a-radio value="14">NTM</a-radio>
+                  <a-radio value="15">慢阻肺</a-radio>
+                  <a-radio value="16">哮喘</a-radio>
+                  <a-radio value="17">普通变异性免疫缺陷病(CVID)</a-radio>
+                  <a-radio value="18">血浆抗体缺乏</a-radio>
+                  <a-radio value="19">特异抗体缺乏性</a-radio>
+                  <a-radio value="20">其他</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="具体描述::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" class="border-dotted" v-if="controla920">
+                <a-input style="width: 240px;" v-decorator="['a91', {...inputRequiredNotEmpty, initialValue: initValue('a91')}]" autocomplete="off"></a-input>
+              </a-form-item>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, computeScore, recoverSubmit, exportFormData } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'mask7',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      formLayout: 'horizontal',
+      markName: 'byxxgjc',
+      title: '基线',
+      openKeys: [],
+      defaultSelectedKeys: [7],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: '100%',
+        "padding-right": "0px",
+        "border-right": "1px solid #ddd"
+      },
+      baselineFormStyle: {
+        // height: '444px',
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      labelCol10: {
+        xs: { span: 24 },
+        sm: { span: 10 },
+        md: { span: 10 }
+      },
+      labelCol14: {
+        xs: { span: 24 },
+        sm: { span: 14 },
+        md: { span: 14 }
+      },
+      wrapper18: {
+        md: { span: 20 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperHor14: {
+        xs: { span: 14 },
+        sm: { span: 14 },
+        md: { span: 14 }
+      },
+      wrapperHor10: {
+        xs: { span: 10 },
+        sm: { span: 10 },
+        md: { span: 10 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 6, offset: 6 }
+      },
+      wrapperOffset: {
+        md: { span: 12 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      inputRequiredNotEmpty: {
+        rules: [{ required: true, message: '请填写!', whitespace: true }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      byxxgjc: undefined,
+      controla1: false,
+      controla2: false,
+      controla3: false,
+      controla4: false,
+      controla5: false,
+      controla6: false,
+      controla7: false,
+      controla52: false,
+      controla9: false,
+      controla920: false,
+      controla75: false,
+      controle2: false,
+      controle3: false,
+      controle4: false,
+      controle5: false,
+      spinning: false,
+      executeStatus: false,
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined
+    }
+  },
+  created() {
+    var that = this
+    this.defaultSelectedKeys = [7]
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      if (t === 'controla920') {
+        if (e.target.value === '20') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (t === 'controla52' || t === 'controla75') {
+        if (e.target.value === '3') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      if (e.key >= 31 && e.key <= 36) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      } else {
+        this.$router.replace('/list/basis/' + this.patientBasisId + '/' + e.key)
+      }
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          var that = this
+          re = {
+            ...re,
+            'b1': typeof re['b1'] !== 'undefined' ? re['b1'].format('YYYY-MM-DD') : '',
+            'b2': typeof re['b2'] !== 'undefined' ? re['b2'].format('YYYY-MM-DD') : '',
+            'b3': typeof re['b3'] !== 'undefined' ? re['b3'].format('YYYY-MM-DD') : '',
+            'b4': typeof re['b4'] !== 'undefined' ? re['b4'].format('YYYY-MM-DD') : '',
+            'b5': typeof re['b5'] !== 'undefined' ? re['b5'].format('YYYY-MM-DD') : '',
+            'z7': typeof re['z7'] !== 'undefined' ? re['z7'].format('YYYY-MM-DD') : '',
+            'b7': typeof re['b7'] !== 'undefined' ? re['b7'].format('YYYY-MM-DD') : ''
+          }
+          console.log(re)
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.byxxgjc && this.byxxgjc.byxxgjcId) {
+            re.byxxgjcId = this.byxxgjc.byxxgjcId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', this.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    initValue(key, type = 'normal') {
+      if (!this.byxxgjc) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.byxxgjc[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.byxxgjc[key])
+      } else if (type === 'array') {
+        return this.byxxgjc[key].split(',')
+      } else {
+        return this.byxxgjc[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        if (answer.a1 === 1) {
+          this.controla1 = true
+        }
+        if (answer.a2 === 1) {
+          this.controla2 = true
+        }
+        if (answer.a3 === 1) {
+          this.controla3 = true
+        }
+        if (answer.a4 === 1) {
+          this.controla4 = true
+        }
+        if (answer.a5 === 1) {
+          this.controla5 = true
+        }
+        if (answer.a6 === 1) {
+          this.controla6 = true
+        }
+        if (answer.a7 === 1) {
+          this.controla7 = true
+        }
+        if (answer.a9 === 20) {
+          this.controla920 = true
+        }
+        if (answer.a52 === 3) {
+          this.controla52 = true
+        }
+        if (answer.a75 === 3) {
+          this.controla75 = true
+        }
+        if (answer.e2 === 1) {
+          this.controle2 = true
+        }
+        if (answer.e3 === 1) {
+          this.controle3 = true
+        }
+        if (answer.e4 === 1) {
+          this.controle4 = true
+        }
+        if (answer.e5 === 1) {
+          this.controle5 = true
+        }
+      }
+      return answer
+    },
+    getFormData() {
+      this.spinning = true
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          this.spinning = false
+          if (res.data && res.data.byxxgjc)
+            that.byxxgjc = that.dealAnswers(res.data.byxxgjc)
+        })
+        .catch(error => {
+          this.spinning = false
+          console.log(error)
+        })
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      var that = this
+      re = {
+        ...re,
+        'b1': typeof re['b1'] !== 'undefined' ? re['b1'].format('YYYY-MM-DD') : '',
+        'b2': typeof re['b2'] !== 'undefined' ? re['b2'].format('YYYY-MM-DD') : '',
+        'b3': typeof re['b3'] !== 'undefined' ? re['b3'].format('YYYY-MM-DD') : '',
+        'b4': typeof re['b4'] !== 'undefined' ? re['b4'].format('YYYY-MM-DD') : '',
+        'b5': typeof re['b5'] !== 'undefined' ? re['b5'].format('YYYY-MM-DD') : '',
+        'z7': typeof re['z7'] !== 'undefined' ? re['z7'].format('YYYY-MM-DD') : '',
+        'b7': typeof re['b7'] !== 'undefined' ? re['b7'].format('YYYY-MM-DD') : ''
+      }
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.byxxgjc && this.byxxgjc.byxxgjcId) {
+        re.byxxgjcId = this.byxxgjc.byxxgjcId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', this.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    computeGerd() {
+      var that = this
+      this.$nextTick(() => {
+        var params = new URLSearchParams()
+        params.append('scoreType', 'gerd')
+        params.append('byxxgjcStr', JSON.stringify(that.form.getFieldsValue()))
+        computeScore(params)
+          .then(res => {
+            console.log(res.data.z)
+            that.form.setFieldsValue({
+              z: res.data.z
+            })
+          })
+          .catch(error => {
+            console.log(error)
+          })
+      })
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    withdraw() {
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.byxxgjc.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    _importData() {
+      var that = this
+      this.$confirm({
+        title: '是否确定导入数据?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('basisMarkId', that.maskId)
+          params.append('patientBasisId', that.patientBasisId)
+          exportFormData(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              that.byxxgjc = _.extend(that.byxxgjc || {}, that.dealAnswers(res.data.data.byxxgjc))
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+/deep/ .font-w .ant-form-item-required {
+  font-weight: bold;
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+
+      .treeSubTitle {
+        font-size: 14px;
+      }
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+    margin-top: 42px;
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 20px 20px 50px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/account/center/components/mask-8.vue b/src/views/account/center/components/mask-8.vue
new file mode 100644
index 0000000000..9a5d57f80e
--- /dev/null
+++ b/src/views/account/center/components/mask-8.vue
@@ -0,0 +1,1500 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="clearfix" style="position:relative;top: 20px;">
+              <a-button class="btn fr" type="primary" @click="_importData">导入数据</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!(ICON患者,必须填写实际检测值。基线访视辅助检查可使用入组前6个月内的检查结果,但要求从检查日期到入组日期之间未发生急性加重,否则需要在基线数据收集时重新辅助检查)</p>
+              <div class="title">1.肺功能相关检查
+                <a style="float: right;font-size:12px;margin-right: 12px;" @click="showOcr = !showOcr">OCR</a>
+                <!-- <a-icon type="zoom-in" style="float: right;margin-top: 12px;margin-right: 12px;color: #ccc;" @click="changeOcr" /> -->
+              </div>
+              <a-form-item label="检查日期" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-date-picker placeholder="请选择" v-decorator="['t1', {initialValue: initValue('t1', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+              </a-form-item> 
+              <a-form-item label="报告上传 :" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="showOcr">
+                <div class="clearfix" style="margin-top: 10px;">
+                  <a-upload :action="uploadUrl" class="images1" v-viewer listType="picture-card" :fileList="fileList1" @preview="handlePreview1" @change="handleChange1">
+                    <div v-if="fileList1.length < 1">
+                      <a-icon type="plus" />
+                      <div class="ant-upload-text">Upload</div>
+                    </div>
+                  </a-upload>
+                  <a-button style="position: absolute;top: 84px;left: 120px;font-size: 12px;padding: 0 5px;height: 30px;" @click="_importF" v-if="fileList1.length === 1 && showOcr">OCR识别</a-button>
+                  <!-- <a-modal :visible="previewVisible1" :footer="null" @cancel="handleCancel1">
+                      <img alt="example" style="width: 100%" :src="previewImage1" />
+                    </a-modal> -->
+                </div>
+              </a-form-item>
+              <a-form-item label="简易肺功能仪:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['g1', {initialValue: initValue('g1')}]">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="0">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="肺功能测试名称" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-row type="flex">
+                  <a-col :span="12">实际值</a-col>
+                  <a-col :span="12">实/预%</a-col>
+                </a-row>
+              </a-form-item>
+              <a-form-item label="FVC::" :labelCol="labelXs" :wrapperCol="wrapperMx" class="requireIcon">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a21', {...inputRequired, initialValue: initValue('a21')}]" addonAfter="L" autocomplete="off" @change="notice($event, 'FVC', 0.5, 6)"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a22', {...inputRequired, initialValue: initValue('a22')}]" addonAfter="%" autocomplete="off" @change="notice($event, 'FVC%', 20, 150)"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="FEV1::" :labelCol="labelXs" :wrapperCol="wrapperMx" class="requireIcon">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a31', {...inputRequired, initialValue: initValue('a31')}]" addonAfter="L" autocomplete="off" @change="notice($event, 'FEV1', 0.2, 5)"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a32', {...inputRequired, initialValue: initValue('a32')}]" addonAfter="%" autocomplete="off" @change="notice($event, 'FEV1%', 20, 150)"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="FEV1%FVC::" :labelCol="labelXs" :wrapperCol="wrapperMx" class="requireIcon">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a41', {...inputRequired, initialValue: initValue('a41')}]" addonAfter="%" autocomplete="off" @change="notice($event, 'FEV1%FVC', undefined, 100)"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="FEV1%VC MAX::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a51', {initialValue: initValue('a51')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a52', {initialValue: initValue('a52')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="FEV3::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a61', {initialValue: initValue('a61')}]" addonAfter="L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a62', {initialValue: initValue('a62')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="FEV3%FVC::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b21', {initialValue: initValue('b21')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b22', {initialValue: initValue('b22')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="PEF::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b31', {initialValue: initValue('b31')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b32', {initialValue: initValue('b32')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="MEF 75::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b41', {initialValue: initValue('b41')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b42', {initialValue: initValue('b42')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="MEF 50::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b51', {initialValue: initValue('b51')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b52', {initialValue: initValue('b52')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="MEF 25::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b61', {initialValue: initValue('b61')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b62', {initialValue: initValue('b62')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="MMEF::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b71', {initialValue: initValue('b71')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b72', {initialValue: initValue('b72')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="MVV::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b81', {initialValue: initValue('b81')}]" addonAfter="L/min" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b82', {initialValue: initValue('b82')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="FEV 1*30::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b91', {initialValue: initValue('b91')}]" addonAfter="L/min" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b92', {initialValue: initValue('b92')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="RV::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <!-- <a-input v-decorator="['t1', {initialValue: '1'}]" style="display: none;"></a-input> -->
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b101', {initialValue: initValue('b101')}]" addonAfter="L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b102', {initialValue: initValue('b102')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="TLC::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b111', {initialValue: initValue('b111')}]" addonAfter="L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b112', {initialValue: initValue('b112')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="RV%TLC::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b121', {initialValue: initValue('b121')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b122', {initialValue: initValue('b122')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="ITGV::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b131', {initialValue: initValue('b131')}]" addonAfter="L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b132', {initialValue: initValue('b132')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="IC::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b141', {initialValue: initValue('b141')}]" addonAfter="L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b142', {initialValue: initValue('b142')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="ERV::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b151', {initialValue: initValue('b151')}]" addonAfter="L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b152', {initialValue: initValue('b152')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="DLCO SB::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b161', {initialValue: initValue('b161')}]" addonAfter="ml/min/mmHg" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b162', {initialValue: initValue('b162')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="DLCO/VA::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b171', {initialValue: initValue('b171')}]" addonAfter="ml/min/mmHg" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b172', {initialValue: initValue('b172')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="DLCO SB::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b163', {initialValue: initValue('b163')}]" addonAfter="mmol/min/kPa" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="DLCO/VA::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b173', {initialValue: initValue('b173')}]" addonAfter="mmol/min/kPa/L" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="(2) 是否做过其他舒张试验:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['c', {...require1, initialValue: initValue('c')}]" @change="changeRadio($event, 'controlc')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlc">
+                <a-form-item label="报告上传 :" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="showOcr">
+                  <div class="clearfix" style="margin-top: 10px;">
+                    <a-upload :action="uploadUrl" class="images2" v-viewer listType="picture-card" :fileList="fileList2" @preview="handlePreview2" @change="handleChange2">
+                      <div v-if="fileList2.length < 1">
+                        <a-icon type="plus" />
+                        <div class="ant-upload-text">Upload</div>
+                      </div>
+                    </a-upload>
+                    <a-button style="position: absolute;top: 84px;left: 120px;font-size: 12px;padding: 0 5px;height: 30px;" @click="_importS" v-if="fileList2.length === 1 && showOcr">OCR识别</a-button>
+                    <!-- <a-modal :visible="previewVisible2" :footer="null" @cancel="handleCancel2">
+                      <img alt="example" style="width: 100%" :src="previewImage2" />
+                    </a-modal> -->
+                  </div>
+                </a-form-item>
+                <a-form-item label="舒张试验名称" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-row type="flex">
+                    <a-col :span="6">前次</a-col>
+                    <a-col :span="6">前/预</a-col>
+                    <a-col :span="6">后次</a-col>
+                    <a-col :span="6">后/预</a-col>
+                  </a-row>
+                </a-form-item>
+                <a-form-item label="VC MAX::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c11', { initialValue: initValue('c11')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d11', { initialValue: initValue('d11')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c12', { initialValue: initValue('c12')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d12', { initialValue: initValue('d12')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="FVC::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c21', { initialValue: initValue('c21')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d21', { initialValue: initValue('d21')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c22', { initialValue: initValue('c22')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d22', { initialValue: initValue('d22')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="FEV1::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c31', { initialValue: initValue('c31')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d31', { initialValue: initValue('d31')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c32', { initialValue: initValue('c32')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d32', { initialValue: initValue('d32')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="FEV1%FVC::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c41', { initialValue: initValue('c41')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d41', { initialValue: initValue('d41')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c42', { initialValue: initValue('c42')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d42', { initialValue: initValue('d42')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="FEV1%VC MAX::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c51', { initialValue: initValue('c51')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d51', { initialValue: initValue('d51')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c52', { initialValue: initValue('c52')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d52', { initialValue: initValue('d52')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="FEV3::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c61', { initialValue: initValue('c61')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d61', { initialValue: initValue('d61')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c62', { initialValue: initValue('c62')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d62', { initialValue: initValue('d62')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="FEV3%FVC::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c71', { initialValue: initValue('c71')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d71', { initialValue: initValue('d71')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c72', { initialValue: initValue('c72')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d72', { initialValue: initValue('d72')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="PEF::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c81', { initialValue: initValue('c81')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d81', { initialValue: initValue('d81')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c82', { initialValue: initValue('c82')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d82', { initialValue: initValue('d82')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="MEF 75::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c91', { initialValue: initValue('c91')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d91', { initialValue: initValue('d91')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c92', { initialValue: initValue('c92')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d92', { initialValue: initValue('d92')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="MEF 50::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c101', { initialValue: initValue('c101')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d101', { initialValue: initValue('d101')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c102', { initialValue: initValue('c102')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d102', { initialValue: initValue('d102')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="MEF 25::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c111', { initialValue: initValue('c111')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d111', { initialValue: initValue('d111')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c112', { initialValue: initValue('c112')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d112', { initialValue: initValue('d112')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="MEF 75/25::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c121', { initialValue: initValue('c121')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d121', { initialValue: initValue('d121')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c122', { initialValue: initValue('c122')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d122', { initialValue: initValue('d122')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="V%FVC::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c131', { initialValue: initValue('c131')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d131', { initialValue: initValue('d131')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c132', { initialValue: initValue('c132')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d132', { initialValue: initValue('d132')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="MVV::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c141', { initialValue: initValue('c141')}]" addonAfter="L/min" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+              </div>
+              <a-form-item label="(3) 肺功能结论:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['d', {...require1, initialValue: initValue('d')}]" @change="changeRadio($event, 'controld')">
+                  <a-radio value="1">通气功能正常</a-radio>
+                  <a-radio value="-1">通气功能减退</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="通气功能减退类型:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" class="border-dotted" v-if="controld">
+                <a-radio-group v-decorator="['e12', {...require1, initialValue: initValue('e12')}]">
+                  <a-radio value="1">阻塞性</a-radio>
+                  <a-radio value="2">限制性</a-radio>
+                  <a-radio value="3">混合型</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(4) 呼出气一氧化氮(FeNO):" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-input addonAfter="ppb" style="width: 240px;" v-decorator="['d1', {initialValue: initValue('d1')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(5) 6分钟步行试验总距离:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-input addonAfter="m" style="width: 240px;" v-decorator="['e', { initialValue: initValue('e')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(6) 血气分析:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+              </a-form-item>
+              <a-form-item label="检查日期" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-date-picker placeholder="请选择" v-decorator="['f5', {initialValue: initValue('f5', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+              </a-form-item> 
+              <a-form-item label="PH:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                <a-input style="width: 240px;" v-decorator="['f', { initialValue: initValue('f')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="氧分压:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                <a-input style="width: 240px;" v-decorator="['f1', { initialValue: initValue('f1')}]" addonAfter="mmHg" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="二氧化碳分压:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                <a-input style="width: 240px;" v-decorator="['f2', { initialValue: initValue('f2')}]" addonAfter="mmHg" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="肺动脉氧分压差:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                <a-input style="width: 240px;" v-decorator="['f3', {initialValue: initValue('f3')}]" autocomplete="off" addonAfter="mmHg"></a-input>
+              </a-form-item>
+              <a-form-item label="氧饱和度:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                <a-input style="width: 240px;" v-decorator="['f4', { initialValue: initValue('f4')}]" autocomplete="off" addonAfter="%"></a-input>
+              </a-form-item>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, recoverSubmit, exportFormData } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { getOcrResult } from '@/api/basis'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+import _ from 'lodash'
+export default {
+  name: 'mask8',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      showOcr: false,
+      //   previewVisible1: false,
+      //   previewImage1: '',
+      //   previewVisible2: false,
+      //   previewImage2: '',
+      uploadUrl: process.env.VUE_APP_API_UPLOAD_URL,
+      viewPicUrl: process.env.VUE_APP_API_VIEW_PIC_URL,
+      fileList1: [],
+      fileList2: [],
+      markName: 'fgnxgjc',
+      title: '基线',
+      openKeys: [],
+      defaultSelectedKeys: [8],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: '100%',
+        "padding-right": "0px",
+        "border-right": "1px solid #ddd"
+      },
+      baselineFormStyle: {
+        // height: '444px',
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 7 },
+        md: { span: 7 }
+      },
+      labelXs: {
+        xs: { span: 24 },
+        sm: { span: 5 },
+        md: { span: 5 }
+      },
+      wrapperMx: {
+        xs: { span: 24 },
+        sm: { span: 19 },
+        md: { span: 19 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 17 },
+        md: { span: 17 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelNew: {
+        xs: { span: 2 },
+        sm: { span: 2 },
+        md: { span: 2 }
+      },
+      wrapperNew: {
+        xs: { span: 22 },
+        sm: { span: 22 },
+        md: { span: 22 }
+      },
+      labelColOffset: {
+        md: { span: 4, offset: 7 }
+      },
+      wrapperOffset: {
+        md: { span: 13 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      fgnxgjc: undefined,
+      controla21: false,
+      controla31: false,
+      controla41: false,
+      controla51: false,
+      controla61: false,
+      controlb23: false,
+      controlb33: false,
+      controlb43: false,
+      controlb53: false,
+      controlb63: false,
+      controlc: false,
+      controlc11: false,
+      controlc21: false,
+      controlc31: false,
+      controlc41: false,
+      controld: false,
+      spinning: false,
+      executeStatus: false,
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    this.getFormData()
+    // 创建节流版本,防止触发过快
+    this.notice = _.debounce(this.notice, 300)
+  },
+  activated() {
+    this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      if (t === 'controld') {
+        if (e.target.value === '-1') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      if (e.key >= 31 && e.key <= 36) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      } else {
+        this.$router.replace('/list/basis/' + this.patientBasisId + '/' + e.key)
+      }
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+
+          re = {
+            ...re,
+            't1': typeof re['t1'] !== 'undefined' ? re['t1'].format('YYYY-MM-DD') : '',
+            'f5': typeof re['f5'] !== 'undefined' ? re['f5'].format('YYYY-MM-DD') : ''
+          }
+          var that = this
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.fgnxgjc && this.fgnxgjc.fgnxgjcId) {
+            re.fgnxgjcId = this.fgnxgjc.fgnxgjcId
+          }
+          //附件
+          if (this.fileList1 && this.fileList1.length) {
+            var a = []
+            _.each(this.fileList1, function(v) {
+              if (v.response) a.push(v.response.fileName)
+              else a.push(v.name)
+            })
+            params.append('fileName', JSON.stringify(a))
+          }
+          //附件
+          if (this.fileList2 && this.fileList2.length) {
+            var a = []
+            _.each(this.fileList2, function(v) {
+              if (v.response) a.push(v.response.fileName)
+              else a.push(v.name)
+            })
+            params.append('fileNameOther', JSON.stringify(a))
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.fgnxgjc) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (this.fgnxgjc[key] !== 0) {
+        if (!this.fgnxgjc[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      }
+      if (type === 'time') {
+        return moment(this.fgnxgjc[key])
+      } else if (type === 'array') {
+        return this.fgnxgjc[key].split(',')
+      } else {
+        return this.fgnxgjc[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        if (answer.a21 === 1) {
+          this.controla21 = true
+        }
+        if (answer.a31 === 1) {
+          this.controla31 = true
+        }
+        if (answer.a41 === 1) {
+          this.controla41 = true
+        }
+        if (answer.a51 === 1) {
+          this.controla51 = true
+        }
+        if (answer.a61 === 1) {
+          this.controla61 = true
+        }
+        if (answer.b23 === 1) {
+          this.controlb23 = true
+        }
+        if (answer.b33 === 1) {
+          this.controlb33 = true
+        }
+        if (answer.b43 === 1) {
+          this.controlb43 = true
+        }
+        if (answer.b53 === 1) {
+          this.controlb53 = true
+        }
+        if (answer.b63 === 1) {
+          this.controlb63 = true
+        }
+        if (answer.c === 1) {
+          this.controlc = true
+        }
+        if (answer.c11 === 1) {
+          this.controlc11 = true
+        }
+        if (answer.c21 === 1) {
+          this.controlc21 = true
+        }
+        if (answer.c31 === 1) {
+          this.controlc31 = true
+        }
+        if (answer.c41 === 1) {
+          this.controlc41 = true
+        }
+        if (answer.d === '-1') {
+          this.controld = true
+        }
+      }
+      return answer
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    getFormData() {
+      this.spinning = true
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          if (res.data && res.data.fgnxgjc) {
+            that.fgnxgjc = that.dealAnswers(res.data.fgnxgjc)
+          } else {
+            that.fgnxgjc = {}
+            that.form.resetFields()
+          }
+          if (res.data.annexListFgn && res.data.annexListFgn.length) {
+            that.fileList1 = _.map(res.data.annexListFgn, function(v) {
+              return {
+                uid: v.annexId,
+                url: that.viewPicUrl + v.annexAddress,
+                name: v.annexAddress,
+                status: 'done'
+              }
+            })
+          } else {
+            that.fileList1 = []
+          }
+          if (res.data.annexListQH && res.data.annexListQH.length) {
+            that.fileList2 = _.map(res.data.annexListQH, function(v) {
+              return {
+                uid: v.annexId,
+                url: that.viewPicUrl + v.annexAddress,
+                name: v.annexAddress,
+                status: 'done'
+              }
+            })
+          } else {
+            that.fileList2 = []
+          }
+          this.spinning = false
+        })
+        .catch(error => {
+          this.spinning = false
+          console.log(error)
+        })
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      re = {
+        ...re,
+        't1': typeof re['t1'] !== 'undefined' ? re['t1'].format('YYYY-MM-DD') : '',
+        'f5': typeof re['f5'] !== 'undefined' ? re['f5'].format('YYYY-MM-DD') : ''
+      }
+      var that = this
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.fgnxgjc && this.fgnxgjc.fgnxgjcId) {
+        re.fgnxgjcId = this.fgnxgjc.fgnxgjcId
+      }
+      //附件
+      if (this.fileList1 && this.fileList1.length) {
+        var a = []
+        _.each(this.fileList1, function(v) {
+          if (v.response) a.push(v.response.fileName)
+          else a.push(v.name)
+        })
+        params.append('fileName', JSON.stringify(a))
+      }
+      //附件
+      if (this.fileList2 && this.fileList2.length) {
+        var a = []
+        _.each(this.fileList2, function(v) {
+          if (v.response) a.push(v.response.fileName)
+          else a.push(v.name)
+        })
+        params.append('fileNameOther', JSON.stringify(a))
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', that.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+            .catch(error => {
+              console.log(error)
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    // handleCancel1() {
+    //   this.previewVisible1 = false;
+    // },
+    handlePreview1(file) {
+      const viewer = this.$el.querySelector('.images1').$viewer
+      viewer.show()
+      //   this.previewImage1 = file.url || file.thumbUrl;
+      //   this.previewVisible1 = true;
+    },
+    handleChange1({ fileList }) {
+      var that = this
+      this.fileList1 = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList1.forEach((f,i) => {
+          if(f.response){
+              that.$set(that.fileList1,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    },
+    // handleCancel2() {
+    //   this.previewVisible2 = false;
+    // },
+    handlePreview2(file) {
+      const viewer = this.$el.querySelector('.images2').$viewer
+      viewer.show()
+      //   this.previewImage2 = file.url || file.thumbUrl;
+      //   this.previewVisible2 = true;
+    },
+    handleChange2({ fileList }) {
+      var that = this
+      this.fileList2 = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList2.forEach((f,i) => {
+          if(f.response){
+              that.$set(that.fileList2,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    },
+    _importF() {
+      this.spinning = true
+      var params = new URLSearchParams()
+      params.append('type', 4)
+      params.append('url', this.fileList1[0].url || this.fileList1[0].response.data.src)
+      var that = this
+      getOcrResult(params)
+        .then(res => {
+          console.log(res.data)
+          that.spinning = false
+          that.$message.success(res.data.info)
+          // debugger
+          that.fgnxgjc = _.extend(that.fgnxgjc || {}, that.dealAnswers(res.data))
+          // that.form.setFieldsValue(that.fgnxgjc)
+        })
+        .catch(error => {
+          that.confirmLoading = false
+        })
+    },
+    _importS() {
+      this.spinning = true
+      var params = new URLSearchParams()
+      params.append('type', 3)
+      params.append('url', this.fileList2[0].url || this.fileList2[0].response.data.src)
+      var that = this
+      getOcrResult(params)
+        .then(res => {
+          console.log(res.data)
+          that.spinning = false
+          that.$message.success(res.data.info)
+          that.fgnxgjc = _.extend(that.fgnxgjc || {}, that.dealAnswers(res.data))
+          // that.form.setFieldsValue(that.fgnxgjc)
+        })
+        .catch(error => {
+          this.confirmLoading = false
+        })
+    },
+    withdraw() {
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.fgnxgjc.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    changeOcr() {
+      this.showOcr = true
+    },
+    _importData() {
+      var that = this
+      this.$confirm({
+        title: '是否确定导入数据?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('basisMarkId', that.maskId)
+          params.append('patientBasisId', that.patientBasisId)
+          exportFormData(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              that.fgnxgjc = _.extend(that.fgnxgjc || {}, that.dealAnswers(res.data.data.fgnxgjc))
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    notice(e, name, low, high) {
+      let v = parseFloat(e.target.value)
+      if(!Number.isNaN(v)) {
+        if(low && v < low) {
+          this.$message.info(`请确认${name}的值`)
+        }
+        if(high && v > high) {
+          this.$message.info(`请确认${name}的值`)
+        }
+      }
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+
+      .treeSubTitle {
+        font-size: 14px;
+      }
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+    margin-top: 42px;
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 20px 20px 40px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+.requireIcon {
+  position: relative;
+}
+.requireIcon {
+  padding-left: 10px;
+}
+.requireIcon::before {
+  position: absolute;
+  top: 21px;
+  left: 0;
+  margin-right: 4px;
+  content: '*';
+  font-family: SimSun;
+  line-height: 1;
+  font-size: 14px;
+  color: #f5222d;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/account/center/components/mask-9.vue b/src/views/account/center/components/mask-9.vue
new file mode 100644
index 0000000000..2fc4859487
--- /dev/null
+++ b/src/views/account/center/components/mask-9.vue
@@ -0,0 +1,860 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="clearfix" style="position:relative;top: 20px;">
+              <a-button class="btn fr" type="primary" @click="_importData">导入数据</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!(ICON患者,必须填写实际检测值。基线访视辅助检查可使用入组前6个月内的检查结果,但要求从检查日期到入组日期之间未发生急性加重,否则需要在基线数据收集时重新辅助检查)</p>
+              <div style="background-color:#f7f8f8;overflow:hidden">
+                <a style="float: right;font-size:12px;line-height:40px;margin-right: 12px;font-weight: bold;" @click="showOcr = !showOcr">OCR</a>
+              </div>
+              <a-form-item label="报告上传:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="showOcr">
+                <div class="clearfix" style="margin-top: 10px;">
+                  <a-upload :action="uploadUrl" class="images" v-viewer listType="picture-card" :fileList="fileList" @preview="handlePreview" @change="handleChange">
+                    <div v-if="fileList.length < 1">
+                      <a-icon type="plus" />
+                      <div class="ant-upload-text">Upload</div>
+                    </div>
+                  </a-upload>
+                  <a-button style="position: absolute;top: 84px;left: 120px;font-size: 12px;padding: 0 5px;height: 30px;" @click="_import" v-if="fileList.length === 1 && showOcr">OCR识别</a-button>
+                </div>
+              </a-form-item>
+              <a-form-item label="有无心脏彩超" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a1', {...require2, initialValue: initValue('a1')}]" @change="changeRadio($event, 'controla1')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controla1">
+                <a-form-item label="(1) 主动脉根部内径:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b1', { initialValue: initValue('b1')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(2) 左房收缩末期内径:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b2', { initialValue: initValue('b2')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(3) 左室舒张末期内径:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b3', { initialValue: initValue('b3')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(4) 左室收缩末期内径:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b4', { initialValue: initValue('b4')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(5) 室间隔厚度:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b5', { initialValue: initValue('b5')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(6) 左室后壁厚度:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b6', { initialValue: initValue('b6')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(7) 肺动脉收缩压:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b8', { initialValue: initValue('b8')}]" addonAfter="mmHg" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(8) 主肺动脉内径:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b7', { initialValue: initValue('b7')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(9) 右房内径:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['e1', { initialValue: initValue('e1')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(10) 右室内径:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['e2', { initialValue: initValue('e2')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(11) 右室流出道:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['e3', { initialValue: initValue('e3')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(12) 左室射血分数:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c1', { initialValue: initValue('c1')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(13) 左室短轴缩短率:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c2', { initialValue: initValue('c2')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+                <div class="title">3.小结</div>
+                <a-form-item label="小结:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['d1', {initialValue: initValue('d1')}]">
+                    <a-radio value="1">肺动脉高压</a-radio>
+                    <a-radio value="2">肺源性心脏病</a-radio>
+                    <a-radio value="3">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+              </div>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, recoverSubmit, exportFormData } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { getOcrResult } from '@/api/basis'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'mask9',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      controla1: false,
+      showOcr: false,
+      markName: 'xzcc',
+      title: '基线',
+      openKeys: [],
+      defaultSelectedKeys: [9],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: '100%',
+        "padding-right": "0px",
+        "border-right": "1px solid #ddd"
+      },
+      baselineFormStyle: {
+        // height: '444px',
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 7 },
+        md: { span: 7 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 17 },
+        md: { span: 17 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 4, offset: 7 }
+      },
+      wrapperOffset: {
+        md: { span: 13 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      xzcc: undefined,
+      spinning: false,
+      executeStatus: false,
+      uploadUrl: process.env.VUE_APP_API_UPLOAD_URL,
+      viewPicUrl: process.env.VUE_APP_API_VIEW_PIC_URL,
+      fileList: [],
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      if (e.key >= 31 && e.key <= 36) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      } else {
+        this.$router.replace('/list/basis/' + this.patientBasisId + '/' + e.key)
+      }
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          re = {
+            ...re,
+            't1': typeof re['t1'] !== 'undefined' ? re['t1'].format('YYYY-MM-DD') : ''
+          }
+          var that = this
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.xzcc && this.xzcc.xzccId) {
+            re.xzccId = this.xzcc.xzccId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.xzcc) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.xzcc[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.xzcc[key])
+      } else if (type === 'array') {
+        return this.xzcc[key].split(',')
+      } else {
+        return this.xzcc[key] + ''
+      }
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        if (answer.a1 === '1') {
+          this.controla1 = true
+        }
+      }
+      return answer
+    },
+    getFormData() {
+      this.spinning = true
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          this.spinning = false
+          if (res.data && res.data.xzcc)
+            that.xzcc = that.dealAnswers(res.data.xzcc)
+        })
+        .catch(error => {
+          this.spinning = false
+          console.log(error)
+        })
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      re = {
+        ...re,
+        't1': typeof re['t1'] !== 'undefined' ? re['t1'].format('YYYY-MM-DD') : ''
+      }
+      var that = this
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.xzcc && this.xzcc.xzccId) {
+        re.xzccId = this.xzcc.xzccId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', that.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+            .catch(error => {
+              console.log(error)
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    _import() {
+      this.spinning = true
+      var params = new URLSearchParams()
+      params.append('type', 5)
+      params.append('url', this.fileList[0].url || this.fileList[0].response.data.src)
+      var that = this
+      getOcrResult(params)
+        .then(res => {
+          console.log(res.data)
+          this.spinning = false
+          this.$message.success(res.data.info)
+          this.xzcc = _.extend(this.xzcc || {}, this.dealAnswers(res.data))
+          that.form.setFieldsValue(that.xzcc)
+        })
+        .catch(error => {
+          this.confirmLoading = false
+        })
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    handlePreview() {
+      const viewer = this.$el.querySelector('.images').$viewer
+      viewer.show()
+    },
+    handleChange({ fileList }) {
+      var that = this
+      this.fileList = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList.forEach((f,i) => {
+          if(f.response){
+              that.$set(that.fileList,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    },
+    withdraw() {
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.xzcc.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    changeOcr() {
+      this.showOcr = true
+    },
+    _importData() {
+      var that = this
+      this.$confirm({
+        title: '是否确定导入数据?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('basisMarkId', that.maskId)
+          params.append('patientBasisId', that.patientBasisId)
+          exportFormData(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              that.xzcc = _.extend(that.xzcc || {}, that.dealAnswers(res.data.data.xzcc))
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+
+      .treeSubTitle {
+        font-size: 14px;
+      }
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+    margin-top: 42px;
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 20px 20px 80px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/account/center/jxjzq.vue b/src/views/account/center/jxjzq.vue
new file mode 100644
index 0000000000..aaa00ac03b
--- /dev/null
+++ b/src/views/account/center/jxjzq.vue
@@ -0,0 +1,1204 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height: 100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+
+            <div class="baselineForm" :style="baselineFormStyle">
+              <div class="title">1.急性加重期</div>
+              <a-form-item label="(1) 急性加重的症状(多选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-checkbox-group v-decorator="['d1', {...selectRequired, initialValue: initValue('d1', 'array')}]" class="control-m-line">
+                  <a-checkbox value="1">咳嗽加重</a-checkbox>
+                  <a-checkbox value="2">痰量增多</a-checkbox>
+                  <a-checkbox value="3">痰液黏度增加</a-checkbox>
+                  <a-checkbox value="4">痰脓性增加</a-checkbox>
+                  <a-checkbox value="5">呼吸急促加重</a-checkbox>
+                  <a-checkbox value="6">活动耐量下降</a-checkbox>
+                  <a-checkbox value="7">咯血新增或增多</a-checkbox>
+                  <a-checkbox value="8">其他系统症状(如:乏力,发热等)</a-checkbox>
+                  <a-checkbox value="9" :checked="controld1" @change="changeSelect($event, 'controld1')">其他症状</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="其他症状:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controld1">
+                <a-input v-decorator="['d2', {...inputRequired, initialValue: initValue('d2')}]" style="width: 240px;" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(2) 痰量:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input v-decorator="['d3', {...inputRequired, initialValue: initValue('d3')}]" style="width: 240px;" autocomplete="off" addonAfter="ml/日"></a-input>
+              </a-form-item>
+              <a-form-item label="(3) 痰液粘稠Murry评分" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-popover>
+                  <template slot="content">
+                    <img src="../../../assets/murry.png" style="height: 260px;" />
+                  </template>
+                  <a-icon type="exclamation-circle" style="position: relative;left: -20px;color: #0399ec;cursor: pointer;" />
+                </a-popover>
+                <a-radio-group v-decorator="['d31', {...selectRequired, initialValue: initValue('d31')}]">
+                  <a-radio value="1">黏液性</a-radio>
+                  <a-radio value="2">黏脓性</a-radio>
+                  <a-radio value="3">脓性</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(4) 痰血最多量:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input v-decorator="['d32', {...inputRequired, initialValue: initValue('d32')}]" style="width: 240px;" autocomplete="off" addonAfter="ml/日"></a-input>
+              </a-form-item>
+              <a-form-item label="(5) 咯血量(最多)" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input addonAfter="ml/日" style="width: 240px;" v-decorator="['d33', {...inputRequired, initialValue: initValue('d33')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(6) 有无胸痛" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['d4', {...require2, initialValue: initValue('d4')}]">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(7) 急性加重期入院方式" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['d5', {...selectRequired, initialValue: initValue('d5')}]" @change="changeRadio($event, 'controld5')">
+                  <a-radio value="1">住院</a-radio>
+                  <a-radio value="2">门诊</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controld5">
+                <a-form-item label="记录住院天数::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset">
+                  <a-input v-decorator="['d51', {...inputRequired, initialValue: initValue('d51')}]" style="width: 240px;" autocomplete="off" addonAfter="天"></a-input>
+                </a-form-item>
+                <a-form-item label="住院总费用::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset">
+                  <a-input v-decorator="['d52', {...inputRequired, initialValue: initValue('d52')}]" style="width: 240px;" autocomplete="off" addonAfter="元"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(8) 急性加重发生时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-date-picker placeholder="请选择" style="width: 240px;" :disabledDate="disabledDate" v-decorator="['d6', {...dateRequire, initialValue: initValue('d6', 'time')}]"></a-date-picker>
+              </a-form-item>
+              <a-form-item label="(9) 持续时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input v-decorator="['d7', {...inputRequired, initialValue: initValue('d7')}]" style="width: 240px;" autocomplete="off" addonAfter="天"></a-input>
+              </a-form-item>
+              <a-form-item label="(10) 采样性质(多选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-checkbox-group v-decorator="['a', {...selectRequired, initialValue: initValue('a', 'array')}]">
+                  <a-checkbox value="1" :disabled="detect('a', '4')" @change="changeSelect($event, 'control1')">细菌</a-checkbox>
+                  <a-checkbox value="2" :disabled="detect('a', '4')" @change="changeSelect($event, 'control2')">真菌</a-checkbox>
+                  <a-checkbox value="3" :disabled="detect('a', '4')" @change="changeSelect($event, 'control3')">分枝杆菌</a-checkbox>
+                  <a-checkbox value="4" @change="handleNone($event, 'a', '4', ['control1', 'control2', 'control3', 'control5'])">无</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <div v-if="control1">
+                <div class="title">1.细菌</div>
+                <a-form-item label="(1) 取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['a1', {...dateRequire, initialValue: initValue('a1', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="(2) 是否本院:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-radio-group v-decorator="['a2', {...require1, initialValue: initValue('a2')}]" @change="changeRadio($event, 'controla2')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="医院名称" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controla2">
+                  <a-input style="width: 240px;" v-decorator="['a21', {...inputRequired, initialValue: initValue('a21')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(3) 标本类型(单选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a3', {...require1, initialValue: initValue('a3')}]">
+                    <a-radio value="1">痰液</a-radio>
+                    <a-radio value="2">诱导痰</a-radio>
+                    <a-radio value="3">支气管肺泡灌洗液</a-radio>
+                     <a-radio value="4">血标本</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="(4) 是否分离到微生物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a4', {...require1, initialValue: initValue('a4')}]" @change="changeRadio($event, 'controla4')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="药敏方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla4">
+                  <a-radio-group v-decorator="['a41', {...selectRequired, initialValue: initValue('a41')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="分离到微生物:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla4">
+                  <a-checkbox-group v-decorator="['a42', {...selectRequired, initialValue: initValue('a42', 'array')}]" class="control-m-line">
+                    <a-checkbox value="0" @change="showList($event, '铜绿假单胞菌', 'controla420', true)">铜绿假单胞菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[0]" v-if="controla420" :type1="type" @listen="changeType" :isFirst="true" :picSource="picList[0]" @changePic1="changePic($event, 0)"></add-table>
+                    <a-checkbox value="1" @change="showList($event, '肺炎链球菌', 'controla421', true)">肺炎链球菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[1]" v-if="controla421" :isFirst="true" :picSource="picList[1]" @changePic1="changePic($event, 1)"></add-table>
+                    <a-checkbox value="2" @change="showList($event, '肺炎克雷伯菌', 'controla422', true)">肺炎克雷伯菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[2]" v-if="controla422" :isFirst="true" :picSource="picList[2]" @changePic1="changePic($event, 2)"></add-table>
+                    <a-checkbox value="3" @change="showList($event, '阴沟肠杆菌', 'controla423', true)">阴沟肠杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[3]" v-if="controla423" :isFirst="true" :picSource="picList[3]" @changePic1="changePic($event, 3)"></add-table>
+                    <a-checkbox value="4" @change="showList($event, '副流感嗜血杆菌', 'controla424', true)">副流感嗜血杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[4]" v-if="controla424" :isFirst="true" :picSource="picList[4]" @changePic1="changePic($event, 4)"></add-table>
+                    <a-checkbox value="5" @change="showList($event, '鲍曼不动杆菌', 'controla425', true)">鲍曼不动杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[5]" v-if="controla425" :isFirst="true" :picSource="picList[5]" @changePic1="changePic($event, 5)"></add-table>
+                    <a-checkbox value="6" @change="showList($event, '金黄色葡萄球菌', 'controla426', true)">金黄色葡萄球菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[6]" v-if="controla426" :isFirst="true" :picSource="picList[6]" @changePic1="changePic($event, 6)"></add-table>
+                    <a-checkbox value="7" @change="showList($event, '其他', 'controla427', true)">其他</a-checkbox>
+                    <a-input style="width: 240px;margin-right: 10px;" v-if="controla427" @change="otherChange($event, 7, true)" autocomplete="off" v-decorator="['otherName1', {...inputRequired, initialValue: otherName1}]"></a-input>
+                    <add-table :dataSource="optionDataSource[7]" v-if="controla427" :isFirst="true" :picSource="picList[7]" @changePic1="changePic($event, 7)"></add-table>
+                  </a-checkbox-group>
+                </a-form-item>
+              </div>
+              <div v-if="control2">
+                <div class="title">2.真菌</div>
+                <a-form-item label="取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b1', {...dateRequire, initialValue: initValue('b1', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="是否本院:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-radio-group v-decorator="['b2', {...require1, initialValue: initValue('b2')}]" @change="changeRadio($event, 'controlb2')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="医院名称" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb2">
+                  <a-input style="width: 240px;" v-decorator="['b21', {...inputRequired, initialValue: initValue('b21')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="标本类型(单选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b3', {...require1, initialValue: initValue('b3')}]">
+                    <a-radio value="1">痰液</a-radio>
+                    <a-radio value="2">诱导痰</a-radio>
+                    <a-radio value="3">支气管肺泡灌洗液</a-radio>
+                     <a-radio value="4">血标本</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="是否分离到微生物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b4', {...require1, initialValue: initValue('b4')}]" @change="changeRadio($event, 'controlb4')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="真菌:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb4">
+                  <a-checkbox-group v-decorator="['b42', {...selectRequired, initialValue: initValue('b42', 'array')}]">
+                    <a-checkbox value="1">曲霉</a-checkbox>
+                    <a-checkbox value="2" :checked="controlb42" @change="changeSelect($event, 'controlb42')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="其他真菌" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb42">
+                  <a-input style="width: 240px;" v-decorator="['b43', {...inputRequired, initialValue: initValue('b43')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <div v-if="control3">
+                <div class="title">3.分枝杆菌</div>
+                <a-form-item label="(1) 取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['c1', {...dateRequire, initialValue: initValue('c1', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="(2) 是否本院:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-radio-group v-decorator="['c2', {...require1, initialValue: initValue('c2')}]" @change="changeRadio($event, 'controlc2')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="医院名称" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlc2">
+                  <a-input style="width: 240px;" v-decorator="['c21', {...inputRequired, initialValue: initValue('c21')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(3) 标本类型(单选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['c3', {...require1, initialValue: initValue('c3')}]">
+                    <a-radio value="1">痰液</a-radio>
+                    <a-radio value="2">诱导痰</a-radio>
+                    <a-radio value="3">支气管肺泡灌洗液</a-radio>
+                    <a-radio value="4">血标本</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="(4) 分离到微生物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['c4', {...selectRequired, initialValue: initValue('c4', 'array')}]">
+                    <a-checkbox value="0">结核分枝杆菌</a-checkbox>
+                    <a-checkbox value="1" @change="changeSelect($event, 'controlc4')">非结核分枝杆菌</a-checkbox>
+                    <a-checkbox value="2">阴性</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <div v-if="controlc4">
+                  <a-form-item label="非结核分枝杆菌:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['c41', {...selectRequired, initialValue: initValue('c41', 'array')}]">
+                      <a-checkbox value="1">堪萨斯分枝杆菌</a-checkbox>
+                      <a-checkbox value="2">龟分枝杆菌</a-checkbox>
+                      <a-checkbox value="3">脓肿分枝杆菌</a-checkbox>
+                      <a-checkbox value="4">鸟分枝杆菌复合群(MAC)</a-checkbox>
+                      <a-checkbox value="5" @change="changeSelect($event, 'controlc415')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <a-form-item label="其他非结核分枝杆菌名称:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlc415">
+                    <a-input style="width: 240px;margin-right: 10px;" autocomplete="off"></a-input>
+                  </a-form-item>
+                </div>
+              </div>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, getMedicineAllergyList, recoverSubmit } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import AddTable from "@/views/account/center/model/table"
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+export default {
+  name: 'jxjzq',
+  components: {
+    STree,
+    MyIcon,
+    AddTable
+  },
+  data() {
+    return {
+      markName: 'sf_jxjzq',
+      title: '急性加重期',
+      openKeys: [],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      defaultSelectedKeys: [],
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      baselineFormStyle: {
+        // height: '444px',
+        'padding-top': '52px'
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 5, offset: 3 }
+      },
+      wrapperOffset: {
+        md: { span: 16 }
+      },
+      labelColOffset2: {
+        md: { span: 6, offset: 3 }
+      },
+      wrapperOffset2: {
+        md: { span: 15 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      patientBasisId: this.$route.params.id,
+      jxjzq: undefined,
+      controld1: false,
+      controld5: false,
+      maskId: undefined,
+      spinning: false,
+      executeStatus: false,
+      optionDataSource: [],
+      picList: [],
+      type: '',
+      control1: false,
+      control2: false,
+      control3: false,
+      control4: false,
+      controla2: false,
+      controla4: false,
+      controlb2: false,
+      controlb4: false,
+      controlc2: false,
+      controlc4: false,
+      controla420: false,
+      controla421: false,
+      controla422: false,
+      controla423: false,
+      controla424: false,
+      controla425: false,
+      controla426: false,
+      controla427: false,
+      controlb42: false,
+      controlc415: false,
+      otherName1: '',
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false
+    }
+  },
+  created() {
+    var that = this
+
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.maskId = res.data.list[0].basisMarkId
+        that.defaultSelectedKeys = [that.maskId]
+        that.executeStatus = res.data.list[0].executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+        that.getFormData()
+      })
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeSelect(e, t) {
+      var that = this
+      this[t] = e.target.checked
+      if (t === 'control4' && e.target.checked) {
+        this.control1 = false
+        this.control2 = false
+        this.control3 = false
+        //赋值必须要延时
+        setTimeout(function() {
+          that.form.setFieldsValue({ a: ['4'] })
+        }, 0)
+      }
+    },
+    changeRadio(e, t) {
+      if (t === 'controla2' || t === 'controlb2' || t === 'controlc2') {
+        if (e.target.value === '-1') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (t === 'controla4' && e.target.value === '-1') {
+        this.controla4 = false
+        this.controla420 = false
+        this.controla421 = false
+        this.controla422 = false
+        this.controla423 = false
+        this.controla424 = false
+        this.controla425 = false
+        this.controla426 = false
+        this.controla427 = false
+      } else if (t === 'controlb4' && e.target.value === '-1') {
+        this.controlb4 = false
+        this.controlb42 = false
+      } else if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      if (e.key >= 57 && e.key <= 62) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      }
+      return false
+    },
+    handleSubmit(e) {
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      this.confirmLoading = true
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          console.log('values', values)
+          var re = this.form.getFieldsValue()
+          re = {
+            ...re,
+            'd1': typeof re['d1'] !== 'undefined' ? re['d1'].join(',') : '',
+            'd6': typeof re['d6'] !== 'undefined' ? re['d6'].format('YYYY-MM-DD') : '',
+            'a': typeof re['a'] !== 'undefined' ? re['a'].join(',') : '',
+            'a1': typeof re['a1'] !== 'undefined' ? re['a1'].format('YYYY-MM-DD') : '',
+            'b1': typeof re['b1'] !== 'undefined' ? re['b1'].format('YYYY-MM-DD') : '',
+            'c1': typeof re['c1'] !== 'undefined' ? re['c1'].format('YYYY-MM-DD') : '',
+            'a42': typeof re['a42'] !== 'undefined' ? re['a42'].join(',') : '',
+            'b42': typeof re['b42'] !== 'undefined' ? re['b42'].join(',') : '',
+            'c4': typeof re['c4'] !== 'undefined' ? re['c4'].join(',') : '',
+            'c41': typeof re['c41'] !== 'undefined' ? re['c41'].join(',') : ''
+          }
+          var that = this
+          console.log(re)
+          const allergy = []
+          for (var key in this.optionDataSource) {
+            _.each(this.optionDataSource[key], function(item) {
+              allergy.push({
+                markId: 1,
+                microbeName: item.microbeName,
+                antibiotic: item.antibiotic,
+                antibioticResult: item.antibioticResult,
+                allergyValue: item.allergyValue
+              })
+            })
+          }
+          //处理附件
+          var alList = ['铜绿假单胞菌', '阴沟肠杆菌', '肺炎克雷伯菌', '肺炎链球菌', '副流感嗜血杆菌', '鲍曼不动杆菌', '金黄色葡萄球菌', this.form.getFieldValue('otherName1')]
+
+          var pic = _.map(this.picList, function(v, i) {
+            return '1-' + alList[i] + '-' + v
+          })
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.jxjzq && this.jxjzq.jxjzqId) {
+            re.jxjzqId = this.jxjzq.jxjzqId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          params.append('allergy', JSON.stringify(allergy))
+          params.append('fileNameForMa', JSON.stringify(pic))
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', this.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.maskId = res.data.list[0].basisMarkId
+                  that.defaultSelectedKeys = [that.maskId]
+                  that.executeStatus = res.data.list[0].executeStatus
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.jxjzq) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.jxjzq[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.jxjzq[key])
+      } else if (type === 'array') {
+        return this.jxjzq[key].split(',')
+      } else {
+        return this.jxjzq[key] + ''
+      }
+    },
+    getFormData() {
+      this.spinning = true
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', that.maskId)
+      getBasisForm(params)
+        .then(res => {
+          this.spinning = false
+          if (res.data && res.data.sf_jxjzq)
+            that.jxjzq = that.dealAnswers(res.data)
+        })
+        .catch(error => {
+          this.spinning = false
+          console.log(error)
+        })
+    },
+    dealAnswers(data) {
+      var that = this
+      var answer = data.sf_jxjzq
+      var alList = ['铜绿假单胞菌', '阴沟肠杆菌', '肺炎克雷伯菌', '肺炎链球菌', '副流感嗜血杆菌', '鲍曼不动杆菌', '金黄色葡萄球菌']
+      if (answer && !_.isEmpty(answer)) {
+        var splitArr = []
+        if (answer.d1) {
+          splitArr = answer.d1.split(',')
+          if (splitArr.indexOf('9') > -1) {
+            this.controld1 = true
+          }
+        }
+        if (answer.d5 === 1) {
+          this.controld5 = true
+        }
+        if (answer.a) {
+          splitArr = answer.a.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.control1 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.control2 = true
+          }
+        }
+        if (answer.a2 && answer.a2 === -1) {
+          this.controla2 = true
+        }
+        if (answer.a4 && answer.a4 === 1) {
+          this.controla4 = true
+        }
+        if (answer.b2 && answer.b2 === -1) {
+          this.controlb2 = true
+        }
+        if (answer.b4 && answer.b4 === 1) {
+          this.controlb4 = true
+        }
+        if (answer.c2 && answer.c2 === -1) {
+          this.controlc2 = true
+        }
+        if (answer.c4) {
+          splitArr = answer.c4.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controlc4 = true
+          }
+        }
+        if (answer.a42) {
+          splitArr = answer.a42.split(',')
+          if (splitArr.indexOf('0') > -1) {
+            this.controla420 = true
+          }
+          if (splitArr.indexOf('1') > -1) {
+            this.controla421 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controla422 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.controla423 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.controla424 = true
+          }
+          if (splitArr.indexOf('5') > -1) {
+            this.controla425 = true
+          }
+          if (splitArr.indexOf('6') > -1) {
+            this.controla426 = true
+          }
+          if (splitArr.indexOf('7') > -1) {
+            this.controla427 = true
+          }
+        }
+        if (data[1]) {
+          _.each(alList, function(v, i) {
+            if (data[1][v]) {
+              that.optionDataSource[i] = _.map(data[1][v], function(v, i) {
+                return {
+                  keyW: i,
+                  microbeName: v.microbeName,
+                  antibiotic: v.antibiotic,
+                  antibioticResult: v.antibioticResult,
+                  allergyValue: v.allergyValue
+                };
+              })
+            }
+          })
+          var other = _.filter(data[1], function(v, k) { return alList.indexOf(k) === -1 })
+          if (other && other.length) {
+            that.optionDataSource[7] = _.map(other[0], function(v, i) {
+              return {
+                keyW: i,
+                microbeName: v.microbeName,
+                antibiotic: v.antibiotic,
+                antibioticResult: v.antibioticResult,
+                allergyValue: v.allergyValue
+              };
+            })
+          }
+        }
+        if (answer.b42) {
+          splitArr = answer.b42.split(',')
+          if (splitArr.indexOf('2') > -1) {
+            this.controlb42 = true
+          }
+        }
+        if (answer.c41) {
+          splitArr = answer.c41.split(',')
+          if (splitArr.indexOf('5') > -1) {
+            this.controlc415 = true
+          }
+        }
+      }
+      return answer
+    },
+    detect(d, v) {
+      if(Array.isArray(this.form.getFieldValue(d)) && this.form.getFieldValue(d).indexOf(v) > -1) {
+        return true
+      } else {
+        return false
+      }
+    },
+    handleNone(e, d, v, arr) {
+      if(e.target.checked){
+        let data = {}
+        data[d] = [v]
+        this.$nextTick(() => {
+          this.form.setFieldsValue(data)
+          arr.forEach((t) => {
+            this[t] = false
+          })
+        })
+      }
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      re = {
+        ...re,
+        'd1': typeof re['d1'] !== 'undefined' ? re['d1'].join(',') : '',
+        'd6': typeof re['d6'] !== 'undefined' ? re['d6'].format('YYYY-MM-DD') : '',
+        'a': typeof re['a'] !== 'undefined' ? re['a'].join(',') : '',
+        'a1': typeof re['a1'] !== 'undefined' ? re['a1'].format('YYYY-MM-DD') : '',
+        'b1': typeof re['b1'] !== 'undefined' ? re['b1'].format('YYYY-MM-DD') : '',
+        'c1': typeof re['c1'] !== 'undefined' ? re['c1'].format('YYYY-MM-DD') : '',
+        'a42': typeof re['a42'] !== 'undefined' ? re['a42'].join(',') : '',
+        'b42': typeof re['b42'] !== 'undefined' ? re['b42'].join(',') : '',
+        'c4': typeof re['c4'] !== 'undefined' ? re['c4'].join(',') : '',
+        'c41': typeof re['c41'] !== 'undefined' ? re['c41'].join(',') : ''
+      }
+      var that = this
+      console.log(re)
+      const allergy = []
+      for (var key in this.optionDataSource) {
+        _.each(this.optionDataSource[key], function(item) {
+          allergy.push({
+            markId: 1,
+            microbeName: item.microbeName,
+            antibiotic: item.antibiotic,
+            antibioticResult: item.antibioticResult,
+            allergyValue: item.allergyValue
+          })
+        })
+      }
+      //处理附件
+      var alList = ['铜绿假单胞菌', '阴沟肠杆菌', '肺炎克雷伯菌', '肺炎链球菌', '副流感嗜血杆菌', '鲍曼不动杆菌', '金黄色葡萄球菌', this.form.getFieldValue('otherName1')]
+
+      var pic = _.map(this.picList, function(v, i) {
+        return '1-' + alList[i] + '-' + v
+      })
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.jxjzq && this.jxjzq.jxjzqId) {
+        re.jxjzqId = this.jxjzq.jxjzqId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      params.append('allergy', JSON.stringify(allergy))
+      params.append('fileNameForMa', JSON.stringify(pic))
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', this.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.maskId = res.data.list[0].basisMarkId
+              that.defaultSelectedKeys = [that.maskId]
+              that.executeStatus = res.data.list[0].executeStatus
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    changeType(v) {
+      this.type = v
+    },
+    changePic(e, index) {
+      this.picList[index] = e
+    },
+    showList(e, name, controlNode) {
+      if (e.target.checked) {
+        this[controlNode] = true
+        if (name == "其他") return
+        this.getMedicineAllergyList(name, e.target.value)
+      } else {
+        this[controlNode] = false
+        this.$set(this.optionDataSource, e.target.value, [])
+      }
+    },
+    getMedicineAllergyList(value, index) {
+      const that = this
+      const params = new URLSearchParams()
+      params.append('microbeName', value)
+      getMedicineAllergyList(params).then(res => {
+        const optionDataSource = _.map(res.data, function(v, i) {
+          return {
+            keyW: i,
+            microbeName: v.microbeName,
+            antibiotic: v.antibiotic,
+            antibioticResult: v.antibioticResult,
+            allergyValue: v.allergyValue
+          };
+        })
+        that.$set(that.optionDataSource, index, optionDataSource)
+      })
+    },
+    otherChange(e, index) {
+      this.getMedicineAllergyList(e.target.value, index)
+    },
+    withdraw(){
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.jxjzq.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+.single-line {
+  height: 56px;
+  overflow: hidden;
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+    // padding-top: 52px;
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .label-overflow .ant-form-item-label {
+      line-height: 20px;
+      position: relative;
+      top: 12px;
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+
+.control-m-line.ant-checkbox-group {
+  top: 10px;
+  position: relative;
+}
+
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/account/center/model/table.vue b/src/views/account/center/model/table.vue
new file mode 100644
index 0000000000..e74c4846a0
--- /dev/null
+++ b/src/views/account/center/model/table.vue
@@ -0,0 +1,362 @@
+<template>
+  <span class="editMcroorganism">
+    <p @click="showMicroorganism">
+      <a-icon type="edit" class="mcroorganism" /><span>编辑药敏结果</span>
+    </p>
+    <a-modal ref="picUpload" title="药敏检查" width="800px" :visible="visible" :footer="null" :maskClosable="false" :centered="centered" @cancel="handleCancel" :bodyStyle="bodyStyle">
+      <a-spin :spinning="confirmLoading">
+        <a-form :form="form">
+          <a-form-item label="药敏类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="typeof type1 !== 'undefined' || typeof type2 !== 'undefined'">
+            <a-radio-group v-model="t1" @change="changeType1($event)" v-if="typeof type1 !== 'undefined'">
+              <a-radio value="1">粘液型</a-radio>
+              <a-radio value="2">非粘液型</a-radio>
+            </a-radio-group>
+            <a-radio-group v-model="t2" @change="changeType2($event)" v-if="typeof type2 !== 'undefined'">
+              <a-radio value=" 1">粘液型</a-radio>
+              <a-radio value="2">非粘液型</a-radio>
+            </a-radio-group>
+          </a-form-item>
+          <a-form-item label="上传图像" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="showOcr">
+            <div class="clearfix" style="margin-top: 10px;">
+              <a-upload :action="uploadUrl" listType="picture-card" class="images" v-viewer @preview="handlePreview" :fileList="fileList" @change="picChange">
+                <div v-if="fileList.length < 1">
+                  <a-icon type="plus" />
+                  <div class="ant-upload-text">Upload</div>
+                </div>
+              </a-upload>
+              <a-button style="position: absolute;top: 84px;left: 120px;font-size: 12px;padding: 0 5px;height: 30px;" @click="_import" v-if="fileList.length === 1 && showOcr">OCR识别</a-button>
+            </div>
+          </a-form-item>
+        </a-form>
+        <a style="float: right;font-size:12px;line-height:32px;margin-left: 12px;" @click="showOcr = !showOcr">OCR</a>
+        <!-- <a-icon type="zoom-in" style="float: right;margin-top: 12px;margin-left: 12px;color: #ccc;" @click="changeOcr" /> -->
+        <p style="text-align: right">
+          <a-button class="editable-add-btn" @click="handleAdd">添加抗生素</a-button>
+        </p>
+        <a-table rowKey="keyW" size="middle" :pagination="pagination" :columns="columns" :dataSource="data">
+          <template v-for="col in [ 'antibiotic', , 'antibioticResult']" :slot="col" slot-scope="text, record">
+            <div :key="col">
+              <a-input v-if="record.editable" style="margin: -5px 0;" :value="text" @change="e => handleChange(e.target.value, record.keyW, col)" />
+              <template v-else>
+                {{ text }}
+              </template>
+            </div>
+          </template>
+          <template slot="allergyValue" slot-scope="text, record">
+            <div>
+              <a-select defaultValue="S" v-if="record.editable" style="margin: -5px 0;width: 100%" :value="text" @change="value => handleSelectChange(value, record.keyW)">
+                <a-select-option value="S">S</a-select-option>
+                <a-select-option value="R">R</a-select-option>
+                <a-select-option value="I">I</a-select-option>
+                <a-select-option value="*">*</a-select-option>
+              </a-select>
+              <template v-else>{{text}}</template>
+            </div>
+          </template>
+          <template slot="operation" slot-scope="text, record">
+            <div class="editable-row-operations">
+              <span v-if="record.editable">
+                <a @click="() => save(record.keyW)">保存</a>
+                <a-popconfirm title="确定取消?" @confirm="() => cancel(record.keyW)"><a>取消</a></a-popconfirm>
+              </span>
+              <span v-else>
+                <a @click="() => edit(record.keyW)">编辑</a>
+                <a-popconfirm v-if="data.length" title="确定删除?" @confirm="() => onDelete(record.keyW)"><a href="javascript:;">删除</a></a-popconfirm>
+              </span>
+            </div>
+          </template>
+        </a-table>
+      </a-spin>
+    </a-modal>
+  </span>
+</template>
+<script>
+import { getOcrResult } from '@/api/basis'
+import _ from 'lodash'
+
+const columns = [{
+    title: '微生物名称',
+    dataIndex: 'microbeName',
+    width: '20%',
+    scopedSlots: { customRender: 'microbeName' }
+  },
+  {
+    title: '抗生素',
+    dataIndex: 'antibiotic',
+    width: '20%',
+    scopedSlots: { customRender: 'antibiotic' }
+  },
+  {
+    title: 'MIC值',
+    dataIndex: 'antibioticResult',
+    width: '20%',
+    scopedSlots: { customRender: 'antibioticResult' }
+  },
+  {
+    title: '药敏结果',
+    dataIndex: 'allergyValue',
+    width: '20%',
+    scopedSlots: { customRender: 'allergyValue' }
+  },
+  {
+    title: '操作',
+    width: '20%',
+    dataIndex: 'operation',
+    scopedSlots: { customRender: 'operation' }
+  }
+];
+export default {
+  props: {
+    dataSource: {
+      type: Array,
+      default: () => {
+        return []
+      }
+    },
+    type1: {
+      type: String
+    },
+    type2: {
+      type: String
+    },
+    isFirst: {
+      type: Boolean,
+      default: () => {
+        return true
+      }
+    },
+    picSource: {
+      type: String
+    }
+  },
+  data() {
+    this.cacheData = this.dataSource.map(item => ({ ...item }));
+    return {
+      showOcr: false,
+      pagination: false,
+      data: this.dataSource,
+      columns,
+      count: this.dataSource.length + 1,
+      vitamin: '',
+      visible: false,
+      bodyStyle: {
+        height: '500px',
+        overflow: 'auto'
+      },
+      centered: true,
+      t1: '',
+      t2: '',
+      form: this.$form.createForm(this),
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 3 },
+        md: { span: 3 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 19 },
+        md: { span: 19 }
+      },
+      uploadUrl: process.env.VUE_APP_API_UPLOAD_URL,
+      viewPicUrl: process.env.VUE_APP_API_VIEW_PIC_URL,
+      fileList: [],
+      confirmLoading: false,
+      picData: this.picSource
+    };
+  },
+  methods: {
+    showMicroorganism() {
+      if (this.vitamin){
+        this.visible = true
+      }else{
+        this.$message.warn('请输入其他菌种名称')
+      }
+    },
+    handleCancel() {
+      this.visible = false
+    },
+    handleChange(value, key, column) {
+      const newData = [...this.data]
+      const target = newData.filter(item => key === item.keyW)[0]
+      if (target) {
+        target[column] = value
+        this.data = newData
+      }
+    },
+    handlePreview() {
+      const viewer = document.querySelector('.images').$viewer;
+      viewer.show()
+    },
+    handleSelectChange(value, key, column) {
+      const newData = [...this.data]
+      const target = newData.filter(item => key === item.keyW)[0]
+      if (target) {
+        target['allergyValue'] = value
+        this.data = newData
+      }
+    },
+    edit(key) {
+      const newData = [...this.data];
+      const target = newData.filter(item => key === item.keyW)[0]
+      if (target) {
+        target.editable = true
+        this.data = newData
+      }
+    },
+    save(key) {
+      const newData = [...this.data]
+      const target = newData.filter(item => key === item.keyW)[0]
+      if (target) {
+        delete target.editable
+        this.data = newData
+        this.cacheData = newData.map(item => ({ ...item }))
+      }
+    },
+    cancel(key) {
+      const newData = [...this.data];
+      const target = newData.filter(item => key === item.keyW)[0];
+      if (target) {
+        Object.assign(target, this.cacheData.filter(item => key === item.keyW)[0]);
+        delete target.editable;
+        this.data = newData;
+      }
+    },
+    onDelete(key) {
+      console.log("key", key)
+      const newData = [...this.data]
+      this.data = newData.filter(item => item.keyW !== key)
+      console.log("this.data", this.data)
+      console.log("newData", newData)
+
+      // this.$emit('mySign', this.data);
+    },
+    handleAdd() {
+      const { count, data } = this
+      const newData = {
+        keyW: count + 1,
+        antibiotic: '',
+        microbeName: this.vitamin,
+        antibioticResult: '',
+        allergyValue: ''
+      };
+      this.data = [newData, ...data]
+      this.count = count + 1
+
+      // this.$emit('mySign', this.data);
+    },
+    changeType1(e) {
+      this.$emit('listen', e.target.value)
+    },
+    changeType2(e) {
+      this.$emit('listen', e.target.value)
+    },
+    picChange({ fileList }) {
+      this.fileList = fileList
+      if (fileList && fileList[0] && fileList[0].response) {
+        this.picData = fileList[0].response.fileName
+        if (this.isFirst) {
+          this.$emit('changePic1', this.picData)
+        } else {
+          this.$emit('changePic2', this.picData)
+        }
+      }
+    },
+    _import() {
+      this.confirmLoading = true
+      var params = new URLSearchParams()
+      params.append('type', 7)
+      params.append('url', this.fileList[0].response.data.src)
+      var that = this
+      getOcrResult(params)
+        .then(res => {
+          console.log(res.data)
+          this.confirmLoading = false
+          if (res.data.microbeName !== this.vitamin) {
+            this.$message.warn('请上传' + this.vitamin || '其他菌种' + '的图片')
+          } else {
+            this.$message.success(res.data.info)
+            this.data.splice(0, this.data.length)
+            _.each(res.data.maList, function(v, k) {
+              that.data.push({ keyW: k, ...v })
+            })
+            that.cacheData = res.data.maList.map(item => ({ ...item }))
+            // this.$emit('changeSource1')
+            // if (this.isFirst) {
+            //   this.$emit('changeSource1', this.data)
+            // }
+          }
+        })
+        .catch(error => {
+          this.confirmLoading = false
+        })
+    },
+    changeOcr() {
+      this.showOcr = true
+    }
+  },
+  watch: {
+    dataSource: {
+      immediate: true,
+      handler(val) {
+        this.data = val
+        console.log('val', val)
+        this.vitamin = val[0] ? val[0].microbeName : ''
+        this.count = val.length > 0 ? val[val.length - 1].keyW : 0
+        // this.$emit('mySign', this.data)
+      }
+    },
+    picSource: {
+      immediate: true,
+      handler(val) {
+        this.picData = val
+      }
+    },
+    type1: {
+      immediate: true,
+      handler(val) {
+        this.t1 = val
+      }
+    },
+    type2: {
+      immediate: true,
+      handler(val) {
+        this.t2 = val
+      }
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.editable-row-operations a {
+  margin-right: 8px;
+}
+
+.editMcroorganism {
+  display: inline-block;
+  margin: 0;
+  margin-right: 20px;
+
+  .mcroorganism {
+    font-size: 14px;
+    color: #0399EC;
+  }
+
+  span {
+    color: #0399EC;
+
+  }
+
+  &:hover {
+    cursor: pointer;
+
+    span {
+      text-decoration: underline;
+    }
+  }
+}
+
+.editable-add-btn {
+  background-color: #00a59b;
+  color: #fff;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/account/center/model/upload.vue b/src/views/account/center/model/upload.vue
new file mode 100644
index 0000000000..30a20f41f0
--- /dev/null
+++ b/src/views/account/center/model/upload.vue
@@ -0,0 +1,100 @@
+<template>
+   <div class="clearfix">
+     <a-spin :spinning="spinning">
+    <a-upload
+      name="file"
+      :action="url"
+      listType="picture-card"
+      @preview="handlePreview"
+      @change="handleChange"
+      :remove="handleRemove"
+    >
+     <div v-if="fileList.length<1">
+        <a-icon type="plus" />
+        <div class="ant-upload-text">OCR识别</div>
+      </div>
+    </a-upload>
+    <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
+      <img alt="example" style="width: 100%" :src="previewImage" />
+    </a-modal>
+    </a-spin>
+  </div>
+</template>
+<script>
+import { ocrResult } from '@/api/report';
+
+export default {
+  props:{
+    basisMaskId:{
+      type:[String,Number],
+      default:''
+    },
+    reportCollectBaseId:{
+      type:[String,Number],
+      default:''
+    },
+  },
+  data() {
+    return {
+      spinning:false,
+      url: process.env.VUE_APP_API_BASE_URL,
+      previewVisible: false,
+      previewImage: '',
+      fileList:[]
+    };
+  },
+  methods: {
+     handleCancel () {
+      this.previewVisible = false
+    },
+    handleRemove(file){
+        this.fileList=[]
+        console.log("file11",file)
+    },
+    handlePreview (file) {
+      console.log("file",file)
+      this.previewImage = file.response.data.src;
+      this.previewVisible = true;
+    },
+    handleChange(info) {
+      const that=this;
+      this.spinning=true;
+      const status = info.file.status;
+      if (status !== 'uploading') {
+      }
+      if (status === 'done') {
+        const Params = new URLSearchParams();
+        if (info.file.response.data.src) {
+          that.fileList.push(info.file)
+          that.$emit("imgUrl",info.file.response.data.src)
+          Params.append('url', info.file.response.data.src);
+          Params.append('basisMarkId', that.basisMaskId);
+          Params.append('reportCollectBaseId', that.reportCollectBaseId);
+          ocrResult(Params).then(res => {
+            that.$emit('OCRload', res)
+            that.spinning=false;
+            that.$message.success(`识别成功`);
+          });
+        }
+      } else if (status === 'error') {
+        this.$message.error(`${info.file.name} file upload failed.`);
+      }
+    }
+  }
+};
+</script>
+<style>
+  /* you can make up upload button and sample style by using stylesheets */
+  .clearfix{
+    display: inline-block;
+  }
+  .ant-upload-select-picture-card i {
+    font-size: 32px;
+    color: #999;
+  }
+
+  .ant-upload-select-picture-card .ant-upload-text {
+    margin-top: 8px;
+    color: #666;
+  }
+</style>
diff --git a/src/views/account/center/page/dragger.vue b/src/views/account/center/page/dragger.vue
new file mode 100644
index 0000000000..b1f01e91aa
--- /dev/null
+++ b/src/views/account/center/page/dragger.vue
@@ -0,0 +1,47 @@
+
+
+<template>
+  <div>
+     <p class="formSubtitle">{{formSubtitle}} <span @click="show"></span></p>
+      <a-upload-dragger name="file" :multiple="true" action="https://www.mocky.io/v2/5cc8019d300000980a055e76" @change="handleChange">
+       <p class="ant-upload-drag-icon">
+         <a-icon type="inbox" />
+       </p>
+       <p class="ant-upload-text">Click or drag file to this area to upload</p>
+       <p class="ant-upload-hint">Support for a single or bulk upload. Strictly prohibit from uploading company data or other band files</p>
+     </a-upload-dragger>
+  </div>
+ 
+</template>
+<script>
+export default {
+  name:"dagger",
+  props:{
+    formSubtitle: {
+      type: String,
+      default: ''
+    }
+  },
+  data () {
+    return {
+      isShow:false
+    }
+  },
+  methods: {
+    handleChange(info) {
+      const status = info.file.status;
+      if (status !== 'uploading') {
+        console.log(info.file, info.fileList);
+      }
+      if (status === 'done') {
+        this.$message.success(`${info.file.name} file uploaded successfully.`);
+      } else if (status === 'error') {
+        this.$message.error(`${info.file.name} file upload failed.`);
+      }
+    },
+    show(){
+      this.isShow=!this.isShow
+    }
+  },
+}
+</script>
\ No newline at end of file
diff --git a/src/views/account/center/question.vue b/src/views/account/center/question.vue
new file mode 100644
index 0000000000..277dbdee6f
--- /dev/null
+++ b/src/views/account/center/question.vue
@@ -0,0 +1,887 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :selectedKeys="selectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleChange">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="head-bar">
+              <a-row type="flex" style="flex:1">
+                <span class="head-icon"></span>
+                <div v-if="question.name && question.name" class="question-title">{{question.name}}</div>
+                <span v-if="(score) && (questionTask.questionId !== 36)" class="question-score">{{`(得分:${score}分)`}}</span>
+                <span v-if="(score) && (questionTask.questionId === 36) && (!questionTask.score9)" class="question-score">{{`(得分:${score}分)`}}</span>
+                <span v-if="(score) && (questionTask.questionId === 36) && (questionTask.score9)" class="question-score">{{`(HADS-A得分:${questionTask.score}分;`}}<span v-if="questionTask.score9">{{` HADS-D得分:${questionTask.score9}分`}}</span>)</span>
+                <!-- <a-row v-if="questionId === 36" type="flex" style="flex:1;margin-left:40px">
+                  <a-col :span="6"><strong>HAD-A(<span style="color: #3398dc">{{ questionTask.score }}分</span>)</strong></a-col>
+                  <a-col :span="6"><strong>HAD-D(<span style="color: #3398dc">{{ questionTask.score9 }}分</span>)</strong></a-col>
+                </a-row> -->
+                <a-row v-if="(questionId === 32 || questionId === 38 || questionId === 46 || questionId === 58 || questionId === 66) && (questionTask.status === 1 || questionTask.status === 5) && typeof questionTask.score1 !== 'undefined'" type="flex" style="flex:1;margin-left:40px">
+                  <a-col :span="6"><strong>身体功能性维度(<span style="color: #3398dc">{{ questionTask.score1 }}分</span>)</strong></a-col>
+                  <a-col :span="6"><strong>角色功能性维度(<span style="color: #3398dc">{{ questionTask.score2 }}分</span>)</strong></a-col>
+                  <a-col :span="6"><strong>活力性维度(<span style="color: #3398dc">{{ questionTask.score3 }}分</span>)</strong></a-col>
+                  <a-col :span="6"><strong>情绪功能性维度(<span style="color: #3398dc">{{ questionTask.score4 }}分</span>)</strong></a-col>
+                  <a-col :span="6"><strong>社会功能性维度(<span style="color: #3398dc">{{ questionTask.score5 }}分</span>)</strong></a-col>
+                  <a-col :span="6"><strong>医疗负担性维度(<span style="color: #3398dc">{{ questionTask.score6 }}分</span>)</strong></a-col>
+                  <a-col :span="6"><strong>健康感觉性维度(<span style="color: #3398dc">{{ questionTask.score7 }}分</span>)</strong></a-col>
+                  <a-col :span="6"><strong>呼吸症状性维度(<span style="color: #3398dc">{{ questionTask.score8 }}分</span>)</strong></a-col>
+                </a-row>
+                <a-row v-if="(questionId === 33 || questionId === 59) && questionTask.status === 1 && typeof questionTask.score1 !== 'undefined'" type="flex" align="middle" style="flex:1;margin-left:40px;">
+                  <a-col :span="6"><strong>症状symptom(<span style="color: #3398dc">{{ questionTask.score1 }}分</span>)</strong></a-col>
+                  <a-col :span="6"><strong>活动activity(<span style="color: #3398dc">{{ questionTask.score2 }}分</span>)</strong></a-col>
+                  <a-col :span="6"><strong>影响impact(<span style="color: #3398dc">{{ questionTask.score3 }}分</span>)</strong></a-col>
+                  <a-col :span="6"><strong>合计(<span style="color: #3398dc">{{ questionTask.score }}分</span>)</strong></a-col>
+                </a-row>
+                <a-row v-if="(questionId === 35 || questionId === 41 || questionId === 61) && questionTask.status === 1 && typeof questionTask.score1 !== 'undefined'" type="flex" align="middle" style="flex:1;margin-left:40px;">
+                  <a-col :span="6"><strong>生理(<span style="color: #3398dc">{{ questionTask.score1 }}分</span>)</strong></a-col>
+                  <a-col :span="6"><strong>心理(<span style="color: #3398dc">{{ questionTask.score2 }}分</span>)</strong></a-col>
+                  <a-col :span="6"><strong>社会(<span style="color: #3398dc">{{ questionTask.score3 }}分</span>)</strong></a-col>
+                  <a-col :span="6"><strong>合计(<span style="color: #3398dc">{{ questionTask.score }}分</span>)</strong></a-col>
+                </a-row>
+              </a-row>
+              <a-row type="flex" align="middle" class="btn-group" v-if="executeStatus !== 2 && questionTask.status !== 5 && canEdit">
+                <a-button class="btn fr" @click="save">保存</a-button>
+                <a-button class="btn fr" type="primary" html-type="submit">提交</a-button>
+              </a-row>
+            </div>
+            <!-- <a-form-item class="ques-box date" :colon="false" label="问卷调查时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+              <a-date-picker placeholder="请选择" v-decorator="['taskTime', {...dateRequire, initialValue: questionTask.taskTime ? moment(questionTask.taskTime): ''}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+            </a-form-item> -->
+            <div class="baselineForm" :style="baselineFormStyle">
+              <!-- 调查问卷 -->
+              <div v-if="question.remark && question.remark" class="question-des"><span style="color:#3398dc">说明:</span>{{question.remark}}</div>
+              <div v-for="item in listArr" :key="item.questionTitleId">
+                <div class="question-t">
+                  <span class="question-icon"></span>
+                  <span>{{item.name}}</span>
+                </div>
+                <div v-for="(qu1, index) in item.childrens" :key="index">
+                  <div v-if="showFlag || [37,38,39].indexOf(parseInt(qu1.inputType)) < 0">
+                    <a-form-item class="ques-box" :colon="false" :label="qu1.type !== 5 ? qu1.name : ''">
+                      <p v-if="qu1.type == 5" class="question-tip">
+                        <span class="tip-icon"></span>
+                        <span>{{qu1.name}}</span>
+                      </p>
+                      <a-input v-if="qu1.type === 3" style="width: 200px" :addonAfter="qu1.unit" :name="qu1.inputType" v-decorator="[qu1.inputType, { initialValue: qu1.answers && qu1.answers.length ? qu1.answers[0].questionOptionValue : null , rules: [{ required: qu1.isRequired && qu1.isRequired === 1, message: '该选项必填' }] }]" />
+                      <a-radio-group @change="handleClick" v-if="qu1.type === 1" :name="qu1.inputType" v-decorator="[qu1.inputType, { initialValue: qu1.answers && qu1.answers.length ? qu1.answers[0].questionOptionId : (qu1.questionTitleId === 16 ? (patient.sex === 0 ? 76 : 75) : null), rules: [{ required: qu1.isRequired && qu1.isRequired === 1, message: '该选项必填' }] }]">
+                        <a-radio :style="disBlock" v-for="(item, index) in qu1.options" :key="index" :value="item.questionOptionId">{{item.name}}</a-radio>
+                      </a-radio-group>
+                      <a-checkbox-group v-if="qu1.type === 2" :name="qu1.inputType" v-decorator="[qu1.inputType, { initialValue: qu1.inputTypes, rules: [{ required: qu1.isRequired && qu1.isRequired === 1, message: '该选项必填' }] }]">
+                        <a-checkbox :style="disBlock" v-for="(item, index) in qu1.options" :key="index" :value="item.questionOptionId">{{item.name}}</a-checkbox>
+                      </a-checkbox-group>
+                      <a-date-picker v-if="qu1.type === 6" :name="qu1.inputType" v-decorator="[qu1.inputType, { initialValue: qu1.answers && qu1.answers.length ? moment(qu1.answers[0].questionOptionValue, 'YYYY/MM/DD') : (qu1.questionTitleId === 15 ? moment(patient.birthDate) : null), rules: [{ required: qu1.isRequired && qu1.isRequired === 1, message: '该选项必填' }] }]" format="YYYY-MM-DD" :disabledDate="disabledDate" />
+                    </a-form-item>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import { mapActions } from 'vuex'
+import { getPatientBasis, getQuestionDetail, saveQuestion } from '@/api/basis'
+import _ from 'lodash'
+import $ from 'jquery'
+import moment from 'moment'
+import { MyIcon } from '@/components/_util/util'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+
+export default {
+  name: 'BasisQuestion',
+  components: {
+    STree,
+    MyIcon
+  },
+  data() {
+    return {
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        paddingRight: "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      baselineFormStyle: {
+        overflow: 'auto',
+        padding: '20px 20px 80px',
+        height: 'calc(100% - 150px)'
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      title: '',
+      openKeys: [],
+      defaultSelectedKeys: [],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      question: {},
+      score: "",
+      patientBasisId: parseInt(this.$route.params.id),
+      questionId: parseInt(this.$route.params.qid),
+      form: this.$form.createForm(this),
+      listArr: [],
+      questionFinished: false,
+      disBlock: {
+        display: 'block'
+      },
+      spinning: false,
+      executeStatus: false,
+      questionTask: {},
+      showFlag: true,
+      selectedKeys: [],
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      }
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.defaultSelectedKeys = [that.questionId]
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+        if (that.patientBasis.type === 1) {
+          that.title = '基线'
+          that.executeStatus = _.find(res.data.list[4].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+        }
+        if (that.patientBasis.type === 2) {
+          that.title = '半年随访'
+          that.executeStatus = _.find(res.data.list[1].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+        }
+        if (that.patientBasis.type === 3) {
+          that.title = '年访视'
+          that.executeStatus = _.find(res.data.list[4].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+        }
+        if (that.patientBasis.type === 4) {
+          that.title = '急性加重期'
+          that.executeStatus = _.find(res.data.list[1].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+        }
+        if (that.patientBasis.type === 7) {
+          that.title = '急性加重期'
+          that.executeStatus = _.find(res.data.list[1].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+        }
+      })
+  },
+  watch: {
+    $route: {
+      handler(to, from) {
+        if (to.name === 'BasisQuestion') {
+          this.questionId = parseInt(to.params.qid)
+          this.getFormData()
+          this.defaultSelectedKeys = this.selectedKeys = [this.questionId]
+          document.querySelector('.baselineForm').scrollTop = 0
+        }
+      },
+      immediate: true
+    }
+  },
+  activated() {
+    // console.log(document.querySelector('.baselineForm').scrollTop)
+  },
+  mounted() {
+    console.log(document.querySelector('.baselineForm').scrollTop)
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    handleChange(e) {
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      var that = this
+      getPatientBasis(params)
+        .then(res => {
+          that.patientBasis = res.data.patientBasis
+          if (that.patientBasis.type === 1) {
+            that.executeStatus = _.find(res.data.list[4].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+          }
+          if (that.patientBasis.type === 2) {
+            that.title = '半年随访'
+            that.executeStatus = _.find(res.data.list[1].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+          }
+          if (that.patientBasis.type === 3) {
+            that.title = '年访视'
+            that.executeStatus = _.find(res.data.list[4].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+          }
+          if (that.patientBasis.type === 4) {
+            that.title = '急性加重期'
+            that.executeStatus = _.find(res.data.list[1].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+          }
+          if (that.patientBasis.type === 7) {
+            that.title = '急性加重期'
+            that.executeStatus = _.find(res.data.list[1].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+          }
+        })
+      if (e.key >= 31 && e.key <= 42 || (e.key >= 57 && e.key <= 62) || (e.key >= 45 && e.key <= 50) || (e.key > 64)) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      } else if (this.patientBasis.type === 1) {
+        this.$router.replace('/list/basis/' + this.patientBasisId + '/' + e.key)
+      } else if (this.patientBasis.type === 4) {
+        this.$router.replace('/jxjzq/' + this.patientBasisId)
+      } else if(this.patientBasis.type === 7){
+        this.$router.replace('/icon/jxjzq/' + this.patientBasisId)
+      }else {
+        this.$router.replace('/list/task/' + this.patientBasisId + '/' + e.key)
+      }
+    },
+    handleClick(e) {
+      if (e.target.value == '149') {
+        this.showFlag = false
+      } else if (e.target.value == '148') {
+        this.showFlag = true
+      }
+    },
+    getFormData() {
+      this.spinning = true
+      var that = this
+      var params = new URLSearchParams()
+      params.append('questionId', this.questionId)
+      params.append('patientBasisId', this.patientBasisId)
+      getQuestionDetail(params)
+        .then(res => {
+          that.spinning = false
+          that.listArr = that.initQuestionAnswers(res.data.topTitles)
+          that.question = res.data.question
+          that.questionTask = res.data.questionTask || {}
+          that.score = that.questionId !== 33 && that.questionId !== 59 && res.data.questionTask && res.data.questionTask.score
+          if (res.data.isFinish === '0') {
+            that.questionFinished = false
+          } else {
+            that.questionFinished = true
+          }
+        })
+    },
+    initQuestionAnswers(list) {
+      _.each(list, function(a) {
+        if (a.childrens && a.childrens.length) {
+          _.each(a.childrens, function(b) {
+            if (b.type === 2) {
+              if (b.answers && b.answers.length) {
+                b.inputTypes = _.map(b.answers, function(v) { return v.questionOptionId })
+              } else {
+                b.inputTypes = []
+              }
+            }
+          })
+        }
+      })
+      return list
+    },
+    handleSubmit(e) {
+      e.preventDefault()
+      this.spinning = true
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          const that = this
+          var result = this.generateQuestionAnswers()
+          var params = new URLSearchParams()
+          params.append('answers', JSON.stringify(result))
+          params.append('patientBasisId', this.patientBasisId)
+          params.append('questionId', this.questionId)
+          params.append('patientId', this.patient.patientId)
+          params.append('type', 2)
+          params.append('taskTime', typeof values.taskTime !== 'undefined' ? values.taskTime.format('YYYY-MM-DD'): '')
+          saveQuestion(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              that.getFormData()
+              params = new URLSearchParams()
+              params.append('patientBasisId', this.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.selectedKeys = [that.questionId]
+                  if (that.patientBasis.type === 1) {
+                    that.executeStatus = _.find(res.data.list[4].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+                  } else if (that.patientBasis.type === 2 || that.patientBasis.type === 4) {
+                    that.executeStatus = _.find(res.data.list[1].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+                  } else if (that.patientBasis.type === 3) {
+                    that.executeStatus = _.find(res.data.list[5].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+                  }
+                })
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    generateQuestionAnswers() {
+      let that = this
+      var result = []
+      var titleObject = {}
+      var childrenObject = []
+      var subOp = {}
+      _.each(this.listArr, function(title) {
+        titleObject = {
+          options: []
+        }
+        titleObject.titleId = title.inputType
+        childrenObject = []
+        if (title.childrens && title.childrens.length) {
+          _.each(title.childrens, function(sub) {
+            if (sub.type === 3) {
+              childrenObject.push({
+                titleId: sub.inputType,
+                value: $('input[name="' + sub.inputType + '"]').val()
+              })
+            }
+            if (sub.type === 6) {
+              childrenObject.push({
+                titleId: sub.inputType,
+                value: $('[name="' + sub.inputType + '"] input').val()
+              })
+            }
+            if (sub.type === 2 && sub.options && sub.options.length) {
+              // console.log(that.form.getFieldValue(sub.inputType))
+              subOp = {
+                titleId: sub.inputType,
+                options: []
+              }
+              if (that.form.getFieldValue(sub.inputType) != null) {
+                that.form.getFieldValue(sub.inputType).forEach(item => {
+                  subOp.options.push({
+                    questionTitleId: sub.inputType,
+                    questionOptionId: item
+                  })
+                })
+              }
+              childrenObject.push(subOp)
+            }
+            if ((sub.type === 1) && sub.options && sub.options.length) {
+              subOp = {
+                titleId: sub.inputType,
+                options: []
+              }
+              $('input[name="' + sub.inputType + '"]:checked').each(function() {
+                console.log("checked......");
+
+                subOp.options.push({
+                  questionTitleId: sub.inputType,
+                  questionOptionId: $(this).val()
+                })
+                console.log($(this).val());
+
+              })
+              childrenObject.push(subOp)
+            }
+          })
+        }
+        titleObject.childrens = childrenObject
+        result.push(titleObject)
+      })
+      return result
+    },
+    save() {
+      const that = this
+      var result = this.generateQuestionAnswers()
+      console.log(result)
+      var params = new URLSearchParams()
+      params.append('answers', JSON.stringify(result))
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('questionId', this.questionId)
+      params.append('patientId', this.patient.patientId)
+      params.append('type', 1)
+      this.spinning = true
+      saveQuestion(params)
+        .then(res => {
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', this.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.selectedKeys = [that.questionId]
+              if (that.patientBasis.type === 1) {
+                that.executeStatus = _.find(res.data.list[4].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+              } else if (that.patientBasis.type === 2 || that.patientBasis.type === 4) {
+                that.executeStatus = _.find(res.data.list[1].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+              } else if (that.patientBasis.type === 3) {
+                that.executeStatus = _.find(res.data.list[5].childList, function(v) { return v.basisMarkId === that.questionId }).executeStatus
+              }
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+        })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+.head-bar {
+  height: 60px;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  background-color: #f7ffff;
+  border: 2px solid #079ce9;
+  box-shadow: 4px 4px 0px #b9b4ac;
+  margin: 10px 20px 0;
+  padding: 0 15px;
+
+  .head-icon {
+    width: 50px;
+    height: 50px;
+    background-image: url('../../../assets/head-icon.png');
+    background-size: 100% 100%;
+  }
+
+  .question-title {
+    font-size: 30px;
+    color: #3398dc;
+    font-weight: bold;
+    margin-left: 15px;
+  }
+
+  .question-score {
+    font-size: 30px;
+    color: #3398dc;
+    font-weight: bold;
+  }
+}
+
+.btn-group {
+  width: 140px;
+  justify-content: space-between;
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+
+  &.date {
+    height: auto;
+    margin-top: 20px;
+
+    .ant-form-item-label {
+      background-color: transparent;
+      border-top: none;
+    }
+  }
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+
+      .treeSubTitle {
+        font-size: 14px;
+      }
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    padding: 40px 20px;
+  }
+}
+
+.question-des {
+  font-size: 16px;
+  margin-bottom: 30px;
+}
+
+.question-t {
+  display: flex;
+  line-height: 40px;
+  font-size: 18px;
+  font-weight: 700;
+  border-bottom: 2px solid #3398dc;
+  padding-bottom: 5px;
+
+  .question-icon {
+    width: 40px;
+    height: 40px;
+    background-image: url('../../../assets/question-icon.png');
+    background-size: 100% 100%;
+    margin-right: 10px;
+  }
+}
+
+.question-tip {
+  line-height: 40px;
+  display: flex;
+  margin-top: 12px;
+
+  .tip-icon {
+    width: 30px;
+    height: 40px;
+    background-image: url('../../../assets/tip-icon.png');
+    background-size: 60% 50%;
+    background-position: center;
+    background-repeat: no-repeat;
+  }
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+/deep/ .ant-radio-disabled+span {
+  color: inherit;
+}
+
+/deep/.ant-checkbox-disabled+span {
+  color: inherit;
+}
+
+.question-des {
+  font-size: 16px;
+  margin-bottom: 25px;
+}
+
+.question-t {
+  display: flex;
+  line-height: 40px;
+  font-size: 18px;
+  font-weight: 700;
+  border-bottom: 2px solid #3398dc;
+  padding-bottom: 5px;
+
+  .question-icon {
+    width: 40px;
+    height: 40px;
+    background-image: url('../../../assets/question-icon.png');
+    background-size: 100% 100%;
+    margin-right: 10px;
+  }
+}
+
+.question-tip {
+  height: 50px;
+  display: flex;
+  align-items: center;
+
+  .tip-icon {
+    width: 20px;
+    height: 20px;
+    background-image: url('../../../assets/tip-icon.png');
+    background-size: 100% 100%;
+    margin-right: 5px;
+  }
+}
+
+.ant-form-item {
+  margin-bottom: 0px;
+  border-bottom: 1px solid #eee;
+}
+
+/deep/ .ant-form-item-label {
+  text-align: left;
+  display: block;
+  background-color: #f7f8f8;
+  color: #231815;
+  font-size: 16px;
+  font-weight: bold;
+  padding-left: 15px;
+  border-top: 1px solid #eee;
+}
+
+/deep/ .ant-form-item-control-wrapper {
+  padding: 5px 0;
+  padding-left: 20px;
+
+  label {
+    margin: 5px 0;
+  }
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+
+  .time-span {
+    line-height: 50px;
+    color: #3398dc;
+    margin-left: 10px;
+    font-weight: 500;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/account/center/task.vue b/src/views/account/center/task.vue
new file mode 100644
index 0000000000..9d97134521
--- /dev/null
+++ b/src/views/account/center/task.vue
@@ -0,0 +1,1125 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+     <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;">
+           <a-row :gutter="30" style="line-height: 34px;">
+       <a-col :md="1" :sm="4"><a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" /></a-col>
+       <a-col :md="4" :sm="20" class="UserNameCard">
+         <my-icon type="iconshoufangzhe_huaban" />
+         受访者:{{ patient.name }}
+       </a-col>
+       <a-col :md="6" :sm="24" class="UserNameCard">   
+       <my-icon type="iconshenfenzheng_huaban" />
+         {{ patient.card }}
+       </a-col>
+       <a-col :md="13" :sm="24" style="fontSize: 18px;textAlign: right;">创建时间:{{ visitTask.createDate | moment }}</a-col>
+     </a-row>
+    </a-card>
+    <a-card :bordered="false" :bodyStyle="bodyStyle" style="margin-top: 10px;padding-left: 0">
+     <a-row :gutter="8">
+       <a-col :span="5" :style="baselineInfoStyle">
+        <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+        </s-tree>
+       </a-col>
+       <a-col :span="19">
+         <div style="overflow: hidden;">
+           <!-- <a-button class="btn fr" @click="">导入</a-button> -->
+           <a-button class="btn fr" @click="save">保存</a-button>
+           <!-- <a-button class="btn fr" type="primary" @click="submit">提交</a-button> -->
+         </div>
+         <div class="baselineForm" :style="baselineFormStyle">
+              <a-form :form="form">
+                <!-- 基线或访视 -->
+                <a-form-item v-for="(qu1, index) in list" :key="index" :label="[qu1.sort + '.' + qu1.questionName]" :labelCol="qu1.type === 0 ? labelColVer : labelColHor" :wrapperCol="qu1.type === 0 ? wrapperVer : wrapperHor">
+                    <a-radio-group v-if="qu1.simple === 1" :name="qu1.basisElementCopyId+''" v-model="qu1.basisElementId">
+                      <a-radio :value="1">是</a-radio>
+                      <a-radio :value="-1">否</a-radio>
+                    </a-radio-group>
+                    <a-radio-group v-if="qu1.simple === 2" :name="qu1.basisElementCopyId+''" :defaultValue="qu1.taskExecuteRecord && qu1.taskExecuteRecord.length && qu1.taskExecuteRecord[0].elementNumValue">
+                      <a-radio :value="1">有</a-radio>
+                      <a-radio :value="-1">无</a-radio>
+                    </a-radio-group>
+                    <!-- <br v-if="qu1.simple > 0"> -->
+                    <a-input :name="qu1.basisElementCopyId+''" v-if="qu1.simple < 0 && qu1.isWrite > 0 && qu1.event === 'compute'" :defaultValue="qu1.taskExecuteRecord && qu1.taskExecuteRecord.length && qu1.taskExecuteRecord[0].elementTextValue" style="width: 240px" :addonAfter="qu1.unit" @blur="compute(qu1.computeElement)" />
+                    <a-input :name="qu1.basisElementCopyId+''" v-if="qu1.simple < 0 && qu1.isWrite > 0 && !qu1.event && typeof qu1.computeElement !== 'undefined' && qu1.computeElement === 0" :defaultValue="qu1.taskExecuteRecord && qu1.taskExecuteRecord.length && qu1.taskExecuteRecord[0].elementTextValue" style="width: 240px" :addonAfter="qu1.unit"  v-model="computeMap[qu1.basisElementCopyId]" />
+                    <a-input :name="qu1.basisElementCopyId+''" v-if="qu1.simple < 0 && qu1.isWrite > 0 && !qu1.event && typeof qu1.computeElement === 'undefined'" :defaultValue="qu1.taskExecuteRecord && qu1.taskExecuteRecord.length && qu1.taskExecuteRecord[0].elementTextValue" style="width: 240px" :addonAfter="qu1.unit" />
+                    <a-date-picker :name="qu1.basisElementCopyId+''" v-if="qu1.simple < 0 && qu1.isWrite > 0 && qu1.event === 'showDate' && (!qu1.taskExecuteRecord || qu1.taskExecuteRecord.length === 0 || qu1.taskExecuteRecord[0].elementTextValue === '')" />
+                    <a-date-picker :name="qu1.basisElementCopyId+''" v-if="qu1.simple < 0 && qu1.isWrite > 0 && qu1.event === 'showDate' && (qu1.taskExecuteRecord && qu1.taskExecuteRecord.length && qu1.taskExecuteRecord[0].elementTextValue)" :defaultValue="moment(qu1.taskExecuteRecord[0].elementTextValue)" />
+                    <a-checkbox-group v-if="qu1.hasChild > 0 && qu1.isRadio < 0 && (qu1.logicValue <= 0 || (qu1.logicValue > 0 && qu1.basisElementId === 1))" v-model="qu1.elementId">
+                      <a-checkbox  v-if="op.event!=='showList'" v-for="(op,index) in qu1.childList" :key="index" :value="op.basisElementCopyId" :name="qu1.basisElementCopyId+''">{{op.questionName}}</a-checkbox>
+                    </a-checkbox-group>
+                    <div v-if="qu1.hasChild > 0 && qu1.isRadio > 0">
+                      <a-radio-group :name="qu1.basisElementCopyId+''" v-model="qu1.basisElementId">
+                        <a-radio v-for="(op,index) in qu1.childList" :key="index" :value="op.basisElementCopyId">{{op.questionName}}</a-radio>
+                      </a-radio-group>
+                      <div v-for="(sub, index) in qu1.childList" v-if="sub.hasChild > 0">
+                        <a-row v-if="sub.isRadio > 0 && sub.logicValue > 0 && qu1.basisElementId === sub.basisElementCopyId">
+                          <a-radio-group :name="sub.basisElementCopyId+''" v-model="sub.basisElementId">
+                            <a-radio v-for="(third,index) in sub.childList" :key="index" :value="third.basisElementCopyId">{{third.questionName}}</a-radio>
+                          </a-radio-group>
+                        </a-row>
+                        <a-row v-for="(third, index) in sub.childList" v-if="sub.isRadio === 0 && (sub.logicValue <= 0 || (sub.logicValue > 0 && qu1.basisElementId === sub.basisElementCopyId))">
+                          <a-col :span="6">({{third.sort}}) {{third.questionName}}</a-col>
+                          <!-- <br> -->
+                          <a-col :span="18">
+                            <a-col :span="6" v-if="third.simple > 0 && third.isRadio < 0">
+                              <a-radio-group v-if="third.simple === 1" :name="third.basisElementCopyId+''" v-model="third.basisElementId">
+                                  <a-radio :value="1">是</a-radio>
+                                  <a-radio :value="-1">否</a-radio>
+                                </a-radio-group>
+                                <a-radio-group v-if="third.simple === 2" :name="third.basisElementCopyId+''" v-model="third.basisElementId">
+                                  <a-radio :value="1">有</a-radio>
+                                  <a-radio :value="-1">无</a-radio>
+                                </a-radio-group>
+                            </a-col>
+                            <a-col :span="8" v-if="third.simple > 0 && third.logicValue > 0 && third.hasChild > 0 && third.childList[0].isWrite > 0 && third.basisElementId === 1">
+                              <a-input :name="third.childList[0].basisElementCopyId+''" :addonAfter="third.childList[0].unit" style="width:240px" :defaultValue="third.childList[0].taskExecuteRecord && third.childList[0].taskExecuteRecord.length && third.childList[0].taskExecuteRecord[0].elementTextValue"></a-input>
+                            </a-col>
+                            <a-row v-for="(fourth, index) in third.childList" v-if="third.hasChild > 0 && third.isRadio === 0">
+                              <a-col :span="6">{{fourth.questionName}}</a-col>
+                              <a-col :span="6">
+                                <a-radio-group v-if="fourth.simple === 1" :name="fourth.basisElementCopyId+''" v-model="fourth.basisElementId">
+                                  <a-radio :value="1">是</a-radio>
+                                  <a-radio :value="-1">否</a-radio>
+                                </a-radio-group>
+                                <a-radio-group v-if="fourth.simple === 2" :name="fourth.basisElementCopyId+''" v-model="fourth.basisElementId">
+                                  <a-radio :value="1">有</a-radio>
+                                  <a-radio :value="-1">无</a-radio>
+                                </a-radio-group>
+                              </a-col>
+                              <a-col :span="12" v-if="fourth.logicValue <= 0 || (fourth.logicValue > 0 && fourth.basisElementId === 1) && fourth.hasChild > 0 && fourth.childList[0].isWrite > 0">
+                                <a-col :span="6">{{fourth.childList[0].questionName}}</a-col>
+                                <a-col :span="12">
+                                  <a-input :addonAfter="fourth.childList[0].unit" :name="fourth.childList[0].basisElementCopyId+''" style="width:240px" :defaultValue="fourth.childList[0].taskExecuteRecord && fourth.childList[0].taskExecuteRecord.length && fourth.childList[0].taskExecuteRecord[0].elementTextValue"></a-input>
+                                </a-col>
+                              </a-col>
+                            </a-row>
+                          </a-col>
+                        </a-row>
+                      </div>
+                    </div>
+                    <!-- 一级联动 -->
+                    <a-row v-for="(sub, index) in qu1.childList" :key="index" v-if="qu1.isRadio < 0 && sub.logicValue > 0 && qu1.elementId.indexOf(sub.basisElementCopyId) > -1">
+                      <a-col :span="4">{{sub.childList[0].questionName}}</a-col>
+                      <a-col :span="4"><a-input :name="sub.childList[0].basisElementCopyId+''" :addonAfter="sub.childList[0].unit" :defaultValue="sub.childList[0].taskExecuteRecord && sub.childList[0].taskExecuteRecord.length && sub.childList[0].taskExecuteRecord[0].elementTextValue" style="width:240px" /></a-col>
+                    </a-row>
+                    <!-- 有第二层 -->
+                    <div v-if="qu1.hasChild > 0 && qu1.isRadio === 0">
+                      <a-row class="itemRow" v-for="(sub, index) in qu1.childList" :key="index" :class="{'no-border': index === qu1.childList.length - 1}" v-if="qu1.logicValue <= 0 || (qu1.logicValue > 0 && qu1.basisElementId === 1)">
+                        <!-- 第二层开始 -->
+                        <a-col :span="sub.questionName.length > 16 ? 24 : 6">({{sub.sort}}) {{sub.questionName}}</a-col>
+                        <!-- 为了体格检查中的啰音的排版 -->
+                        <!-- <br v-if="sub.showType === 2 && sub.hasChild > 0 && sub.isRadio === 0 && sub.simple < 0 && sub.isWrite < 0"> -->
+                        <a-col :span="18" :class="{'ant-col-push-6': sub.questionName.length > 16}">
+                          <!-- 是否,有无以及填写值 -->
+                          <a-col :span="6" v-if="sub.isWrite > 0">
+                            <a-input v-if="sub.isWrite > 0 && !sub.event && typeof sub.computeElement !== 'undefined' && sub.computeElement === 0" :name="sub.basisElementCopyId+''" :defaultValue="sub.taskExecuteRecord && sub.taskExecuteRecord.length && sub.taskExecuteRecord[0].elementTextValue" :addonAfter="sub.unit" :readOnly="sub.computeElement === 0" v-model="computeMap[sub.basisElementCopyId]" style="width:240px" />
+                            <a-input v-if="sub.isWrite > 0 && !sub.event && typeof sub.computeElement === 'undefined'" :name="sub.basisElementCopyId+''" :defaultValue="sub.taskExecuteRecord && sub.taskExecuteRecord.length && sub.taskExecuteRecord[0].elementTextValue" :addonAfter="sub.unit" style="width:240px" />
+                            <a-input v-if="sub.isWrite > 0 && sub.event === 'compute'" :name="sub.basisElementCopyId+''" :defaultValue="sub.taskExecuteRecord && sub.taskExecuteRecord.length && sub.taskExecuteRecord[0].elementTextValue" :addonAfter="sub.unit" @blur="compute(sub.computeElement)" style="width:240px" />
+                            <a-date-picker v-if="sub.isWrite > 0 && sub.event === 'showDate' && (!sub.taskExecuteRecord || sub.taskExecuteRecord.length === 0 || sub.taskExecuteRecord[0].elementTextValue === '')" :name="sub.basisElementCopyId+''" style="width:240px" />
+                            <a-date-picker v-if="sub.isWrite > 0 && sub.event === 'showDate' && sub.taskExecuteRecord && sub.taskExecuteRecord.length && sub.taskExecuteRecord[0].elementTextValue" :name="sub.basisElementCopyId+''" :defaultValue="moment(sub.taskExecuteRecord[0].elementTextValue)" style="width:240px" />
+                          </a-col>
+                          <br v-if="sub.isWrite > 0">
+                          <a-radio-group v-if="sub.simple === 1" v-model="sub.basisElementId" :name="sub.basisElementCopyId+''">
+                            <a-radio :value="1">是</a-radio>
+                            <a-radio :value="-1">否</a-radio>
+                          </a-radio-group>
+                          <a-radio-group v-if="sub.simple === 2" v-model="sub.basisElementId" :name="sub.basisElementCopyId+''">
+                            <a-radio :value="1">有</a-radio>
+                            <a-radio :value="-1">无</a-radio>
+                          </a-radio-group>
+                          <!--   -->
+                          <!-- <br v-if="sub.showType === 2" /> -->
+                          <div class="clear" v-if="sub.simple > 0"></div>
+                          <a-col :span="6" v-if="(sub.logicValue <= 0 || sub.basisElementId === 1) && sub.childEleName">{{sub.childEleName}}</a-col>
+                          <a-checkbox-group v-if="sub.hasChild > 0 && sub.isRadio < 0 &&(sub.logicValue <= 0 || sub.basisElementId === 1) && sub.childList[0].event !== 'showList'" v-model="sub.elementId">
+                            <a-checkbox v-for="(subOp,index) in sub.childList" :key="index" :name="subOp.parentId+''" :value="subOp.basisElementCopyId">{{subOp.questionName}}</a-checkbox>
+                          </a-checkbox-group>
+                          <a-checkbox-group v-if="sub.hasChild > 0 && sub.isRadio < 0 && (sub.logicValue <= 0 || sub.basisElementId === 1) && sub.childList[0].event === 'showList'" v-model="sub.elementId" style="width: 80%;">
+                           <span v-for="(subOp, index) in sub.childList">
+                             <a-checkbox v-if="subOp.event=='showList'" :name="subOp.parentId+''"    @change="showList($event,subOp.event,subOp.questionName)" :key="index" :value="subOp.basisElementCopyId">{{subOp.questionName}}</a-checkbox>
+                             <div  v-if="subOp.event=='showList' && sub.elementId.indexOf(subOp.basisElementCopyId) > -1&&subOp.questionName=='其他' "  style="display: inline-block;width: 300px;argin-right: 10px;">
+                                <a-input :name="subOp.childList[0].basisElementCopyId+''" :defaultValue="subOp.childList[0].taskExecuteRecord && subOp.childList[0].taskExecuteRecord.length&&subOp.childList[0].taskExecuteRecord[0].elementTextValue" @blur="blurInput($event,subOp.childList[0])"  :addonAfter="subOp.childList[0].unit"  />
+                             </div>
+                             <add-table v-if="subOp.event=='showList' && sub.elementId.indexOf(subOp.basisElementCopyId) > -1&&subOp.questionName!=='其他'"  v-model="optionDataSource[subOp.basisElementCopyId]" :dataSource=" subOp.medicineAllergyList?subOp.medicineAllergyList:optionDataSource[subOp.basisElementCopyId]"></add-table>
+                             <add-table  v-if="subOp.event == 'showList' && subOp.questionName == '其他' && sub.elementId.indexOf(subOp.basisElementCopyId) > -1"  v-model="optionDataSource[subOp.childList[0].parentId]" :dataSource="subOp.medicineAllergyList?subOp.medicineAllergyList:optionDataSource[subOp.childList[0].parentId]"></add-table>
+                           </span>
+                          </a-checkbox-group>
+                          <!-- 二级联动 -->
+                          <a-row v-for="(third, index) in sub.childList" :key="index" v-if="sub.hasChild > 0 && sub.isRadio < 0 && third.hasChild > 0 && third.logicValue > 0 && sub.elementId.indexOf(third.basisElementCopyId) > -1" class="no-border">
+                            <a-col :span="6" v-if="third.childList[0].isWrite > 0">{{third.childList[0].questionName}}</a-col>
+                            <a-col :span="8" v-if="third.childList[0].isWrite > 0">
+                              <a-date-picker v-if="third.childList[0].event === 'showDate' && third.childList[0].taskExecuteRecord && third.childList[0].taskExecuteRecord.length && third.childList[0].taskExecuteRecord[0].elementTextValue" :defaultValue="moment(third.childList[0].taskExecuteRecord[0].elementTextValue)" :name="third.childList[0].basisElementCopyId+''" style="width:240px" />
+                              <a-date-picker v-if="third.childList[0].event === 'showDate' && (!third.childList[0].taskExecuteRecord || !third.childList[0].taskExecuteRecord.length || !third.childList[0].taskExecuteRecord[0].elementTextValue)" :name="third.childList[0].basisElementCopyId+''" style="width:240px" />
+                              <a-input v-if="!third.childList[0].event&&third.event!=='showList'" :addonAfter="third.childList[0].unit" :name="third.childList[0].basisElementCopyId+''" :defaultValue="third.childList[0].taskExecuteRecord && third.childList[0].taskExecuteRecord.length && third.childList[0].taskExecuteRecord[0].elementTextValue" style="width:240px" />
+                            </a-col>
+                            <a-col :span="6" v-if="third.isRadio > 0 && third.hasChild > 0">{{third.questionName}}</a-col>
+                            <a-col :span="16" v-if="third.isRadio > 0 && third.hasChild > 0">
+                              <a-radio-group :name="third.basisElementCopyId+''" v-model="third.basisElementId">
+                                <a-radio v-for="(fourth, index) in third.childList" :key="index" :value="fourth.basisElementCopyId">{{fourth.questionName}}</a-radio>
+                              </a-radio-group>
+                            </a-col>
+                          </a-row>
+                          <a-radio-group v-if="sub.hasChild > 0 && sub.isRadio > 0 && sub.childList[0].event === 'compute'" v-model="sub.basisElementId" :name="sub.basisElementCopyId+''" @change="compute(sub.childList[0].computeElement)">
+                            <a-radio v-for="(subOp,index) in sub.childList" :value="subOp.basisElementCopyId" :key="index">{{subOp.questionName}}</a-radio>
+                          </a-radio-group>
+                          <a-radio-group v-if="sub.hasChild > 0 && sub.isRadio > 0 && (!sub.childList[0].event || sub.childList[0].event !== 'compute')" v-model="sub.basisElementId" :name="sub.basisElementCopyId+''">
+                            <a-radio v-for="(subOp,index) in sub.childList" :value="subOp.basisElementCopyId" :key="index">{{subOp.questionName}}</a-radio>
+                          </a-radio-group>
+                          <div v-if="sub.hasChild > 0 && sub.isRadio > 0 && sub.logicValue <= 0 && thirdSub.logicValue > 0 && thirdSub.hasChild > 0 && thirdSub.basisElementCopyId === sub.basisElementId" v-for="(thirdSub, index) in sub.childList">
+                            <div v-if="thirdSub.isRadio === 0">
+                              <a-row v-for="(fourth, index) in thirdSub.childList" :class="{'no-border': index === thirdSub.childList.length - 1}">
+                                <!-- total lung capacity -->
+                                <a-col :span="6">{{fourth.questionName}}</a-col>
+                                <a-radio-group v-if="fourth.simple === 2" v-model="fourth.basisElementId" :name="fourth.basisElementCopyId+''">
+                                  <a-radio :value="1">有</a-radio>
+                                  <a-radio :value="-1">无</a-radio>
+                                </a-radio-group>
+                                <a-input v-if="fourth.isWrite > 0" :addonAfter="fourth.unit" :name="fourth.basisElementCopyId+''" :defaultValue="fourth.taskExecuteRecord && fourth.taskExecuteRecord.length && fourth.taskExecuteRecord[0].elementTextValue" style="width: 240px"></a-input>
+                                <div v-if="fourth.hasChild > 0 && fourth.isRadio === 0">
+                                  <a-row class="no-border" v-for="fifth in fourth.childList" v-if="fourth.logicValue <= 0 || fourth.basisElementId === 1">
+                                    <a-col :span="6">{{fifth.questionName}}</a-col>
+                                    <a-col :span="4" v-if="fifth.simple === 2">
+                                      <a-radio-group v-model="fifth.basisElementId" :name="fifth.basisElementCopyId+''">
+                                        <a-radio :value="1">有</a-radio>
+                                        <a-radio :value="-1">无</a-radio>
+                                      </a-radio-group>
+                                    </a-col>
+                                    <div v-if="fifth.hasChild > 0 && (fifth.logicValue <= 0 || fifth.basisElementId === 1) && fifth.isRadio === 0">
+                                      <a-col :span="4">{{fifth.childList[0].questionName}}</a-col>
+                                      <a-input v-if="fifth.childList[0].isWrite > 0" :span="8" style="width: 240px" :name="fifth.childList[0].basisElementCopyId+''" :defaultValue="fifth.childList[0].taskExecuteRecord && fifth.childList[0].taskExecuteRecord.length && fifth.childList[0].taskExecuteRecord[0].elementTextValue" :addonAfter="fifth.childList[0].unit"></a-input>
+                                    </div>
+                                    <a-col :span="4" v-if="fifth.isWrite > 0">
+                                      <a-input :name="fifth.basisElementCopyId+''" :addonAfter="fifth.unit" :defaultValue="fifth.taskExecuteRecord && fifth.taskExecuteRecord.length && fifth.taskExecuteRecord[0].elementTextValue" style="width:240px"></a-input>
+                                    </a-col>
+                                  </a-row>
+                                </div>
+                              </a-row>
+                            </div>
+                            <div v-if="thirdSub.isRadio > 0">
+                              <a-row class="no-border">
+                                <a-radio-group :name="thirdSub.basisElementCopyId+''" v-model="thirdSub.basisElementId">
+                                  <a-radio v-for="fourth in thirdSub.childList" :value="fourth.basisElementCopyId">{{fourth.questionName}}</a-radio>
+                                </a-radio-group>
+                              </a-row>
+                            </div>
+                          </div>
+                          <a-col v-if="sub.hasChild > 0 && sub.isRadio > 0 && sub.childList[0].isWrite > 0">
+                            <a-col :span="6">{{sub.childList[0].questionName}}</a-col>
+                            <a-col :span="8"><a-input :name="sub.childList[0].basisElementCopyId+''" style="width:240px" :defaultValue="sub.childList[0].taskExecuteRecord && sub.childList[0].taskExecuteRecord.length && sub.childList[0].taskExecuteRecord[0].elementTextValue" /></a-col>
+                          </a-col>
+                          <a-row class="no-border" v-if="sub.hasChild > 0 && sub.isRadio > 0 && sub.logicValue > 0 && secondSub.hasChild > 0" v-for="(secondSub, index) in sub.childList" :key="index">
+                            <a-col :span="3" v-if="sub.basisElementId === secondSub.basisElementId">{{secondSub.childList[0].questionName}}</a-col>
+                            <a-col :span="8" v-if="sub.basisElementId === secondSub.basisElementId"><a-input :addonAfter="secondSub.childList[0].unit" :defaultValue="secondSub.childList[0].taskExecuteRecord && secondSub.childList[0].taskExecuteRecord.length && secondSub.childList[0].taskExecuteRecord[0].elementTextValue" :name="secondSub.childList[0].basisElementCopyId+''" style="width:240px" /></a-col>
+                          </a-row>
+                          <a-row v-if="sub.hasChild > 0 && sub.isRadio === 0 && (sub.logicValue <= 0 || sub.basisElementId === 1)" v-for="(subOp,index) in sub.childList" :class="{'ant-col-pull-6': subOp.level > 3 || subOp.display > 0, 'no-border': index === sub.childList.length - 1}">
+                            <!-- <br> -->
+                              <!-- 调脂那一层,如果是紧跟后面的单选框或者输入框就占8格;否则就是子问题,占12格 -->
+                              <a-col :span="subOp.simple > 0 || subOp.isRadio > 0 || (subOp.questionName.length <= 16 && subOp.isWrite > 0) ? 6 : 24">{{subOp.questionName}}</a-col>
+                              <a-radio-group v-if="subOp.simple === 1" v-model="subOp.basisElementId" :name="subOp.basisElementCopyId+''">
+                                <a-radio :value="1">是</a-radio>
+                                <a-radio :value="-1">否</a-radio>
+                              </a-radio-group>
+                              <a-radio-group v-if="subOp.simple === 2" v-model="subOp.basisElementId" :name="subOp.basisElementCopyId+''">
+                                <a-radio :value="1">有</a-radio>
+                                <a-radio :value="-1">无</a-radio>
+                              </a-radio-group>
+                              <a-col :span="6" v-if="subOp.isWrite > 0">
+                                <a-date-picker v-if="subOp.event === 'showDate' && subOp.taskExecuteRecord && subOp.taskExecuteRecord.length && subOp.taskExecuteRecord[0].elementTextValue" :name="subOp.basisElementCopyId+''" :defaultValue="moment(subOp.taskExecuteRecord[0].elementTextValue)" style="width:240px" />
+                                <a-date-picker v-if="subOp.event === 'showDate' && (!subOp.taskExecuteRecord || !subOp.taskExecuteRecord.length || !subOp.taskExecuteRecord[0].elementTextValue)" :name="subOp.basisElementCopyId+''" style="width:240px" />
+                                <a-input :name="subOp.basisElementCopyId+''" v-if="!subOp.event || subOp.event !== 'showDate'" :defaultValue="subOp.taskExecuteRecord && subOp.taskExecuteRecord.length && subOp.taskExecuteRecord[0].elementTextValue" :addonAfter="subOp.unit" style="width:240px" />
+                              </a-col>
+                              <a-col :span="24" v-if="subOp.hasChild > 0 && subOp.isRadio < 0 && (subOp.logicValue <= 0 || subOp.basisElementId === 1)">
+                                <a-checkbox-group v-model="subOp.elementId" v-if="subOp.childList[0].event !== 'showList'">
+                                  <a-checkbox v-for="(secondSub,index) in subOp.childList" :key="index" :name="secondSub.parentId+''" :value="secondSub.basisElementCopyId">{{secondSub.questionName}}</a-checkbox>
+                                </a-checkbox-group>
+                                <a-checkbox-group v-if="subOp.hasChild > 0 && subOp.isRadio < 0&& (subOp.logicValue <= 0 || subOp.basisElementId === 1) && subOp.childList[0].event === 'showList'" v-model="subOp.elementId" style="width: 100%;">
+                                  <span v-for="(secondSub, index) in subOp.childList" >
+                                    <a-checkbox v-if="secondSub.event=='showList'"  :name="secondSub.parentId+''" @change="showList($event,secondSub.event,secondSub.questionName)" :key="index" :value="secondSub.basisElementCopyId">{{secondSub.questionName}}</a-checkbox>
+                                    <div  v-if="secondSub.event=='showList' && subOp.elementId.indexOf(secondSub.basisElementCopyId) > -1&&secondSub.questionName=='其他' "  style="display: inline-block;width: 300px;margin-right: 10px;">
+                                       <a-input :name="secondSub.childList[0].basisElementCopyId+''"  @blur="blurInput($event,secondSub.childList[0])"  :addonAfter="secondSub.childList[0].unit" :defaultValue="secondSub.childList[0].taskExecuteRecord && secondSub.childList[0].taskExecuteRecord.length && secondSub.childList[0].taskExecuteRecord[0].elementTextValue" />
+                                    </div>
+                                    <add-table v-if="secondSub.event=='showList' && subOp.elementId.indexOf(secondSub.basisElementCopyId) > -1&&secondSub.questionName!=='其他'"  v-model="optionDataSource[secondSub.basisElementCopyId]" :dataSource="secondSub.medicineAllergyList?secondSub.medicineAllergyList:optionDataSource[secondSub.basisElementCopyId]"></add-table>
+                                    <add-table v-if="secondSub.event=='showList' &&secondSub.questionName=='其他'&& subOp.elementId.indexOf(secondSub.basisElementCopyId) > -1"  v-model="optionDataSource[secondSub.childList[0].parentId]" :dataSource="secondSub.medicineAllergyList?secondSub.medicineAllergyList:optionDataSource[secondSub.childList[0].parentId]"></add-table>
+                                  </span>
+                                 </a-checkbox-group>
+                              </a-col>
+                              <div v-if="subOp.hasChild > 0 && subOp.isRadio < 0 && (subOp.logicValue <= 0 || subOp.basisElementId === 1) && subOp.elementId.indexOf(secondSub.basisElementCopyId) > -1" v-for="(secondSub, index) in subOp.childList" :key="index">
+                                <div v-if="secondSub.hasChild > 0 && secondSub.isRadio === 0">
+                                  <a-row v-for="(thirdSub, index) in secondSub.childList" class="no-border">
+                                    <a-col :span="6" v-if="thirdSub.questionName">{{thirdSub.questionName}}</a-col>
+                                    <a-col :span="8" v-if="thirdSub.isWrite > 0">
+                                      <a-input style="width: 240px;" :name="thirdSub.basisElementCopyId+''" :defaultValue="thirdSub.taskExecuteRecord && thirdSub.taskExecuteRecord.length && thirdSub.taskExecuteRecord[0].elementTextValue" v-if="!thirdSub.event && thirdSub.event == 'showList'" :addonAfter="thirdSub.unit"></a-input>
+                                      <a-date-picker v-if="thirdSub.event === 'showDate' && thirdSub.taskExecuteRecord && thirdSub.taskExecuteRecord.length && thirdSub.taskExecuteRecord[0].elementTextValue" :name="thirdSub.basisElementCopyId+''" :defaultValue="moment(thirdSub.taskExecuteRecord[0].elementTextValue)" style="width:240px" />
+                                      <a-date-picker v-if="thirdSub.event === 'showDate' && (!thirdSub.taskExecuteRecord || !thirdSub.taskExecuteRecord.length || !thirdSub.taskExecuteRecord[0].elementTextValue)" :name="thirdSub.basisElementCopyId+''" style="width:240px" />
+                                    </a-col>
+                                  </a-row>
+                                </div>
+                                <div v-if="secondSub.hasChild > 0 && secondSub.isRadio > 0">
+                                  <a-row class="no-border">
+                                    <a-col :span="6">{{secondSub.questionName}}</a-col>
+                                    <a-radio-group v-model="secondSub.basisElementId" :name="secondSub.basisElementCopyId+''">
+                                      <a-radio v-for="(thirdSub, index) in secondSub.childList" :value="thirdSub.basisElementCopyId" :key="index">{{thirdSub.questionName}}</a-radio>
+                                    </a-radio-group>
+                                  </a-row>
+                                </div>
+                              </div>
+                              <!-- <a-col :span="6" v-if="secondSub.hasChild > 0 && (secondSub.logicValue === 0 || subOp.elementId.indexOf(secondSub.basisElementCopyId) > -1) && secondSub.isWrite > 0" v-for="(secondSub,index) in subOp.childList">
+                                <a-input style="width:240px;" :name="secondSub.basisElementCopyId+''" :defaultValue="secondSub.taskExecuteRecord && secondSub.taskExecuteRecord.length && secondSub.taskExecuteRecord[0].elementTextValue"></a-input>
+                              </a-col> -->
+                              <a-col :span="18" v-if="subOp.hasChild > 0 && subOp.isRadio > 0">
+                                <a-radio-group :name="subOp.basisElementCopyId+''" v-model="subOp.basisElementId">
+                                  <a-radio v-for="(secondSub,index) in subOp.childList" :key="index" :value="secondSub.basisElementId">{{secondSub.questionName}}</a-radio>
+                                </a-radio-group>
+                              </a-col>
+                              <div v-for="(secondSub, index) in subOp.childList" v-if="subOp.hasChild > 0 && subOp.isRadio > 0 && secondSub.hasChild > 0 && secondSub.isRadio === 0 && (secondSub.logicValue <= 0 || subOp.basisElementId === secondSub.basisElementCopyId)">
+                                <a-col v-for="(thirdSub,index) in secondSub.childList">
+                                  <a-col :span="6">{{thirdSub.questionName}}</a-col>
+                                  <a-col :span="6" v-if="thirdSub.isWrite > 0">
+                                    <a-input :name="thirdSub.basisElementCopyId+''" :defaultValue="thirdSub.taskExecuteRecord && thirdSub.taskExecuteRecord.length && thirdSub.taskExecuteRecord[0].elementTextValue" style="width:240px" :addonAfter="thirdSub.unit"></a-input>
+                                  </a-col>
+                                </a-col>
+                              </div>
+                              <a-row v-if="subOp.hasChild > 0 && subOp.isRadio === 0  && (!subOp.logicValue || subOp.basisElementId === 1)" v-for="(thirdSub, index) in subOp.childList" :key="index" class="no-border">
+                                <!-- 雾化治疗 -->
+                                <a-col :span="6">{{thirdSub.questionName}}</a-col>
+                                <a-col :span="16">
+                                  <a-radio-group v-if="thirdSub.simple === 1" :name="thirdSub.basisElementCopyId+''" v-model="thirdSub.basisElementId">
+                                    <a-radio :value="1">是</a-radio>
+                                    <a-radio :value="-1">否</a-radio>
+                                  </a-radio-group>
+                                  <a-date-picker v-if="thirdSub.event === 'showDate' && thirdSub.taskExecuteRecord && thirdSub.taskExecuteRecord.length && thirdSub.taskExecuteRecord[0].elementTextValue" :defaultValue="moment(thirdSub.taskExecuteRecord[0].elementTextValue)" :name="thirdSub.basisElementCopyId+''" style="width:240px" />
+                                  <a-date-picker v-if="thirdSub.event === 'showDate' && (!thirdSub.taskExecuteRecord || !thirdSub.taskExecuteRecord.length || !thirdSub.taskExecuteRecord[0].elementTextValue)" :name="thirdSub.basisElementCopyId+''" style="width:240px" />
+                                  <a-input v-if="thirdSub.isWrite > 0 && !thirdSub.event" :name="thirdSub.basisElementCopyId + ''" :defaultValue="thirdSub.taskExecuteRecord && thirdSub.taskExecuteRecord.length && thirdSub.taskExecuteRecord[0].elementTextValue" style="width:240px" :addonAfter="thirdSub.unit" />
+                                    <!-- 注掉br是因为啰音类型会掉下去,别处需要换行再调整 -->
+                                  <!-- <br v-if="thirdSub.hasChild > 0 && thirdSub.isRadio > 0 && thirdSub.simple > 0"> -->
+                                  <a-radio-group v-if="thirdSub.hasChild > 0 && thirdSub.isRadio > 0 && (thirdSub.logicValue <= 0 || thirdSub.basisElementId === 1)" :name="thirdSub.basisElementCopyId+''" v-model="thirdSub.basisElementId" style="width: 100%">
+                                    <a-radio v-for="(fourth, index) in thirdSub.childList" :key="index" :value="fourth.basisElementCopyId">{{fourth.questionName}}</a-radio>
+                                  </a-radio-group>
+                                  <div v-if="thirdSub.hasChild > 0 && thirdSub.isRadio > 0 && (thirdSub.logicValue <= 0 || thirdSub.basisElementId === 1)">
+                                    <div v-for="(fourth, index) in thirdSub.childList" :key="index" v-if="fourth.hasChild > 0 && fourth.isRadio === 0 && (fourth.logicValue <= 0 || thirdSub.basisElementId === fourth.basisElementCopyId)">
+                                      <a-row class="no-border">
+                                        <a-col :span="6">{{fourth.childList[0].questionName}}</a-col>
+                                        <a-col :span="16" v-if="fourth.childList[0].isWrite > 0">
+                                          <a-input :name="fourth.childList[0].basisElementCopyId+''" style="width: 240px;" :defaultValue="fourth.childList[0].taskExecuteRecord && fourth.childList[0].taskExecuteRecord.length && fourth.childList[0].taskExecuteRecord[0].elementTextValue" :addonAfter="fourth.childList[0].unit"></a-input>
+                                        </a-col>
+                                      </a-row>
+                                    </div>
+                                  </div>
+                                  <a-checkbox-group v-if="thirdSub.isRadio < 0 && thirdSub.hasChild > 0" v-model="thirdSub.elementId">
+                                    <a-checkbox v-for="(fourth,index) in thirdSub.childList" :key="index" :name="fourth.parentId+''" :value="fourth.basisElementCopyId">{{fourth.questionName}}</a-checkbox>
+                                  </a-checkbox-group>
+                                  <div v-if="thirdSub.hasChild > 0 && thirdSub.isRadio === 0 && (thirdSub.logicValue <= 0 || thirdSub.basisElementId === 1)">
+                                    <a-row v-for="(fourth, index) in thirdSub.childList" :key="index" class="ant-col-pull-12 no-border">
+                                      <a-col :span="12">{{fourth.questionName}}</a-col>
+                                      <a-col :span="12">
+                                        <a-radio-group v-if="fourth.simple === 1" :name="fourth.basisElementCopyId+''" v-model="fourth.basisElementId">
+                                          <a-radio :value="1">是</a-radio>
+                                          <a-radio :value="-1">否</a-radio>
+                                        </a-radio-group>
+                                      </a-col>
+                                    </a-row>
+                                  </div>
+                                </a-col>
+                              </a-row>
+                          </a-row>
+                        </a-col>
+                      </a-row>
+                    </div>
+                </a-form-item>
+              </a-form>
+         </div>
+       </a-col>
+     </a-row>
+     </a-card>
+  </div>
+</template>
+
+<script>
+import STree from '@/components/Tree/Tree'
+import { mapActions } from 'vuex'
+import { getElementsAnswer, saveVisitTask, getMedicineAllergyList,computeScore,getAllQuestionList, getTaskDetail } from '@/api/basis'
+import _ from 'lodash'
+import $ from 'jquery'
+import moment from 'moment'
+import AddTable from "./model/table"
+import { MyIcon } from '@/components/_util/util';
+export default {
+  name: 'taskDetail',
+  components: {
+    STree,
+    AddTable,
+    MyIcon
+  },
+  data() {
+    return {
+      baselineInfoStyle:{
+         overflow:"auto",
+         height:(window.screen.height-330)+'px',
+         "padding-right":"0px",
+         "border-right":"1px solid #ddd"
+       },
+      baselineFormStyle:{
+        height:(window.screen.height-350)+'px',
+      }, 
+      optionDataSource:[],
+      checkedList:[],
+      title: '访视任务',
+      openKeys: [],
+      defaultSelectedKeys: [],
+      orgTree: [],
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6}
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24}
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      visible: false,
+      confirmLoading: false,
+      patient: {},
+      list: [],
+      listArr: [],
+      list1: [],
+      question:{},
+      basisMaskId: undefined,
+      validateFlag: false,
+      visitTaskId: this.$route.params.id,
+      computeMap: {
+        4207: ''
+      },
+      disBlock :{
+        display: 'block',
+      },
+      bodyStyle: {
+        'padding-left': '0px'
+      },
+      visitTask: {}
+    }
+  },
+  beforeCreate (){
+    this.form = this.$form.createForm(this, {onFieldsChange: this.onFieldsChange, onValuesChange: this.onValuesChange})
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    // this.compute = _.debounce(this.compute, 300) //节流阀
+    var params = new URLSearchParams()
+    params.append('visitTaskId', this.visitTaskId)
+    getTaskDetail(params)
+    .then(res => {
+      that.patient = res.data.patient
+      that.visitTask = res.data.visitTask
+      that.list = that.initList(res.data.basisElementList)
+      that.orgTree = res.data.bmList
+      that.basisMaskId = that.orgTree[0].basisMarkId
+    })
+  },
+  computed: {
+    validate() {
+      return function(index){
+        if(!this.validateFlag) return ''
+        var first = this.list[index]
+        if(first.required > 0) return 'error'
+      }
+    }
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    showList(e,type,name){
+      if(type !== 'showList') return;
+      if(e.target.checked){
+        if(name=="其他") return;
+        this.getMedicineAllergyList(name,e.target.value)
+      }else{
+         this.$set(this.optionDataSource,e.target.value,[])
+      }
+       
+    },
+    getMedicineAllergyList(value,index){
+       const that = this
+       const params = new URLSearchParams()
+       params.append('microbeName', value)
+       getMedicineAllergyList(params).then(res => {
+        const  optionDataSource = _.map(res.data, function(v) {
+          return {
+            keyW: v.keyW,
+            microbeName: v.microbeName,
+            antibiotic: v.antibiotic,
+            antibioticResult: v.antibioticResult,
+            allergyValue: v.allergyValue
+          };
+       })   
+        that.$set(that.optionDataSource,index, optionDataSource)
+      }) 
+    },
+    blurInput(e,item){
+       this.getMedicineAllergyList(e.target.value,item.parentId)
+    },
+    handleClick(e) {
+      this.basisMaskId = e.key
+      this.getElementsAnswer()
+    },
+    handleSubmit () {
+      const { form: { validateFieldsAndScroll } } = this
+      this.confirmLoading = true
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          console.log('values', values)
+          setTimeout(() => {
+            this.visible = false
+            this.confirmLoading = false
+            this.$emit('ok', values)
+          }, 1500)
+        } else {
+          this.confirmLoading = false
+        }
+      })
+    },
+    handleCancel () {
+      this.visible = false
+    },
+    onChange(info) {
+      const { status } = info.file;
+      if (status !== 'uploading') {
+        console.log(info.file, info.fileList);
+      }
+      if (status === 'done') {
+        message.success(`${info.file.name} file uploaded successfully.`);
+      } else if (status === 'error') {
+        message.error(`${info.file.name} file upload failed.`);
+      }
+    },
+    getElementsAnswer (){
+      var that = this;
+      var params = new URLSearchParams();
+      if (this.basisMaskId > 30) {
+        that.list = [];
+        params.append('questionId', this.basisMaskId)
+        getAllQuestionList(params)
+        .then(res => {
+          res.data.topTitles.forEach((item,index,arr)=> {
+            that.listArr = arr;
+         })
+         that.question = that.initList(res.data.question);
+          // that.logicList = _.filter(_.flatten(_.map(res.data, function(v){return _.flatMap(v)})),function(v){return v.logicValue > 0})
+        })
+        
+      }else{
+        that.question = {};
+        that.listArr = [];
+        params.append('basisMaskId', this.basisMaskId)
+        params.append('patientBasisId', this.patientBasisId)
+        getElementsAnswer(params)
+        .then(res => {
+          that.list = that.initList(res.data)
+          // that.logicList = _.filter(_.flatten(_.map(res.data, function(v){return _.flatMap(v)})),function(v){return v.logicValue > 0})
+        })
+      }
+     
+    },
+    generateAnswers (){
+      var result = []
+      _.each(this.list, function(item){
+        if(item.simple > 0){
+          result.push({
+            taskExecuteRecordId: (item.taskExecuteRecord && item.taskExecuteRecord.length) ? item.taskExecuteRecord[0].taskExecuteRecordId : '',
+            basisElementId: item.basisElementCopyId,
+            elementNumValue: typeof $('input[name="' + item.basisElementCopyId + '"]:checked').val() !== 'undefined' ? $('input[name="' + item.basisElementCopyId + '"]:checked').val() : '',
+            elementTextValue: ''
+          })
+        }else if(item.isWrite > 0){
+          var text = $('[name="' + item.basisElementCopyId + '"]').hasClass('ant-calendar-picker') ? $('[name="' + item.basisElementCopyId + '"] input').val() : $('[name="' + item.basisElementCopyId + '"]').val()
+          result.push({
+            taskExecuteRecordId: (item.taskExecuteRecord && item.taskExecuteRecord.length) ? item.taskExecuteRecord[0].taskExecuteRecordId : '',
+            basisElementId: item.basisElementCopyId,
+            elementTextValue: text,
+            elementNumValue: ''
+          }) 
+        }
+        if(item.hasChild > 0){
+          if(item.childList[0].type === 1){
+            _.each(item.childList, function(sub){
+              if(sub.isWrite > 0){
+                var text = $('[name="' + sub.basisElementCopyId + '"]').hasClass('ant-calendar-picker') ? $('[name="' + sub.basisElementCopyId + '"] input').val() : $('[name="' + sub.basisElementCopyId + '"]').val()
+                result.push({
+                  taskExecuteRecordId: (sub.taskExecuteRecord && sub.taskExecuteRecord.length) ? sub.taskExecuteRecord[0].taskExecuteRecordId : '',
+                  basisElementId: sub.basisElementCopyId,
+                  elementTextValue: text,
+                  elementNumValue: ''
+                })
+              }
+              if(sub.simple > 0){
+                result.push({
+                  taskExecuteRecordId: (sub.taskExecuteRecord && sub.taskExecuteRecord.length) ? sub.taskExecuteRecord[0].taskExecuteRecordId : '',
+                  basisElementId: sub.basisElementCopyId,
+                  elementNumValue: typeof $('input[name="' + sub.basisElementCopyId + '"]:checked').val() !== 'undefined' ? $('input[name="' + sub.basisElementCopyId + '"]:checked').val() : '',
+                  elementTextValue: ''
+                })
+              }
+              
+              if(sub.hasChild > 0){
+                if(sub.isRadio !== 0){
+                  _.each(sub.childList, function(third){
+                    result.push({
+                      taskExecuteRecordId: third.taskExecuteRecord && third.taskExecuteRecord.length ? third.taskExecuteRecord[0].taskExecuteRecordId : '',
+                      basisElementId: third.basisElementCopyId,
+                      elementNumValue: $('[value="' + third.basisElementCopyId + '"][name="' + third.parentId + '"]').prop('checked') ? 1 : -1,
+                      elementTextValue: ''
+                    })
+                  })
+                }
+                _.each(sub.childList, function(third){
+                  if(third.simple > 0){
+                    result.push({
+                      taskExecuteRecordId: (third.taskExecuteRecord && third.taskExecuteRecord.length) ? third.taskExecuteRecord[0].taskExecuteRecordId : '',
+                      basisElementId: third.basisElementCopyId,
+                      elementNumValue: typeof $('input[name="' + third.basisElementCopyId + '"]:checked').val() !== 'undefined' ? $('input[name="' + third.basisElementCopyId + '"]:checked').val() : '',
+                      elementTextValue: ''
+                    })
+                  }
+                  if(third.isWrite > 0){
+                    var text = $('[name="' + third.basisElementCopyId + '"]').hasClass('ant-calendar-picker') ? $('[name="' + third.basisElementCopyId + '"] input').val() : $('[name="' + third.basisElementCopyId + '"]').val()
+                    result.push({
+                      taskExecuteRecordId: (third.taskExecuteRecord && third.taskExecuteRecord.length) ? third.taskExecuteRecord[0].taskExecuteRecordId : '',
+                      basisElementId: third.basisElementCopyId,
+                      elementTextValue: text || '',
+                      elementNumValue: ''
+                    })
+                  }
+                  if(third.hasChild > 0){
+                    
+                    _.each(third.childList,function(fourth){
+                      if(third.isRadio !== 0){
+                        result.push({
+                          taskExecuteRecordId: fourth.taskExecuteRecord && fourth.taskExecuteRecord.length ? fourth.taskExecuteRecord[0].taskExecuteRecordId : '',
+                          basisElementId: fourth.basisElementCopyId,
+                          elementNumValue: $('[value="' + fourth.basisElementCopyId + '"][name="' + fourth.parentId + '"]').prop('checked') ? 1 : -1,
+                          elementTextValue: ''
+                        })
+                      }
+                      if(fourth.simple > 0){
+                        result.push({
+                          taskExecuteRecordId: (fourth.taskExecuteRecord && fourth.taskExecuteRecord.length) ? fourth.taskExecuteRecord[0].taskExecuteRecordId : '',
+                          basisElementId: fourth.basisElementCopyId,
+                          elementNumValue: typeof $('input[name="' + fourth.basisElementCopyId + '"]:checked').val() !== 'undefined' ? $('input[name="' + fourth.basisElementCopyId + '"]:checked').val() : '',
+                          elementTextValue: ''
+                        })
+                      }
+                      if(fourth.isWrite > 0){
+                        var text = $('[name="' + fourth.basisElementCopyId + '"]').hasClass('ant-calendar-picker') ? $('[name="' + fourth.basisElementCopyId + '"] input').val() : $('[name="' + fourth.basisElementCopyId + '"]').val()
+                        result.push({
+                          taskExecuteRecordId: (fourth.taskExecuteRecord && fourth.taskExecuteRecord.length) ? fourth.taskExecuteRecord[0].taskExecuteRecordId : '',
+                          basisElementId: fourth.basisElementCopyId,
+                          elementTextValue: text || '',
+                          elementNumValue: ''
+                        })
+                      }
+                      if(fourth.hasChild > 0 && fourth.isRadio === 0){
+                        _.each(fourth.childList, function(fifth){
+                          if(fifth.isWrite > 0){
+                            var text = $('[name="' + fifth.basisElementCopyId + '"]').hasClass('ant-calendar-picker') ? $('[name="' + fifth.basisElementCopyId + '"] input').val() : $('[name="' + fifth.basisElementCopyId + '"]').val()
+                            result.push({
+                              taskExecuteRecordId: (fifth.taskExecuteRecord && fifth.taskExecuteRecord.length) ? fifth.taskExecuteRecord[0].taskExecuteRecordId : '',
+                              basisElementId: fifth.basisElementCopyId,
+                              elementTextValue: text || '',
+                              elementNumValue: ''
+                            })
+                          }
+                          if(fifth.simple > 0){
+                            result.push({
+                              taskExecuteRecordId: (fifth.taskExecuteRecord && fifth.taskExecuteRecord.length) ? fifth.taskExecuteRecord[0].taskExecuteRecordId : '',
+                              basisElementId: fifth.basisElementCopyId,
+                              elementNumValue: typeof $('input[name="' + fifth.basisElementCopyId + '"]:checked').val() !== 'undefined' ? $('input[name="' + fifth.basisElementCopyId + '"]:checked').val() : '',
+                              elementTextValue: ''
+                            })
+                          }
+                          if(fifth.hasChild > 0 && fifth.isRadio === 0){
+                            _.each(fifth.childList, function(sixth){
+                              if(sixth.isWrite > 0){
+                                var text = $('[name="' + sixth.basisElementCopyId + '"]').hasClass('ant-calendar-picker') ? $('[name="' + sixth.basisElementCopyId + '"] input').val() : $('[name="' + sixth.basisElementCopyId + '"]').val()
+                                result.push({
+                                  taskExecuteRecordId: (sixth.taskExecuteRecord && sixth.taskExecuteRecord.length) ? sixth.taskExecuteRecord[0].taskExecuteRecordId : '',
+                                  basisElementId: sixth.basisElementCopyId,
+                                  elementTextValue: text || '',
+                                  elementNumValue: ''
+                                })
+                              }
+                            })
+                          }
+                        })
+                      }else if(fourth.hasChild > 0 && fourth.isRadio !== 0){
+                        _.each(fourth.childList, function(fifth){
+                          result.push({
+                            taskExecuteRecordId: fifth.taskExecuteRecord && fifth.taskExecuteRecord.length ? fifth.taskExecuteRecord[0].taskExecuteRecordId : '',
+                            basisElementId: fifth.basisElementCopyId,
+                            elementNumValue: $('[value="' + fifth.basisElementCopyId + '"][name="' + fifth.parentId + '"]').prop('checked') ? 1 : -1,
+                            elementTextValue: ''
+                          })
+                        })
+                      }
+                    })
+                  }
+                })
+              }
+            })
+          }else{
+            // 是选项,单选或多选
+            if(item.isRadio !== 0){
+              _.each(item.childList, function(sub){
+                result.push({
+                  taskExecuteRecordId: sub.taskExecuteRecord && sub.taskExecuteRecord.length ? sub.taskExecuteRecord[0].taskExecuteRecordId : '',
+                  basisElementId: sub.basisElementCopyId,
+                  elementNumValue: $('[value="' + sub.basisElementCopyId + '"][name="' + sub.parentId + '"]').prop('checked') ? 1 : -1,
+                  elementTextValue: ''
+                })
+                // TODO:此处后面需看还有没有更多情况
+                if(sub.hasChild > 0 && sub.isWrite > 0){
+                  result.push({
+                    basisAnswer: sub.childList[0].taskExecuteRecord && sub.childList[0].taskExecuteRecord.length ? sub.childList[0].taskExecuteRecord[0].taskExecuteRecordId : '',
+                    basisElementId: sub.childList[0].basisElementCopyId,
+                    elementTextValue: $('[name="' + sub.childList[0].basisElementCopyId + '"]').val(),
+                    elementNumValue: ''
+                  })
+                }
+              })
+            }
+          }
+        }
+      })
+      return result
+    },
+    save (){
+      var that = this
+      var result = this.generateAnswers()
+      console.log(result)
+      var params = new URLSearchParams();
+      const allergy=[]
+       for(var key in this.optionDataSource){
+          _.each(this.optionDataSource[key], function(item){
+            allergy.push({
+              basisElementId:key,
+              microbeName:item.microbeName,
+              antibiotic:item.antibiotic,
+              antibioticResult:item.antibioticResult,
+              allergyValue:item.allergyValue
+            })
+          })
+      }
+      params.append('visitTaskStr', JSON.stringify(this.visitTask))
+      params.append('taskExecuteRecord', JSON.stringify(result))
+      params.append('allergy', JSON.stringify(allergy))
+      saveVisitTask(params)
+      .then(res => {
+        that.$message.success('保存成功', function(){
+          var href = location.href.replace(/\?markId=[\d]+/,'')
+          location.href = href + '?markId=' + that.basisMaskId
+        })
+      })
+      .catch(error => {
+        console.log(error)
+      })
+    },
+    submit (){
+      this.form.validateFieldsAndScroll((err, values) => {
+        if (!err) {
+          // eslint-disable-next-line no-console
+          console.log('Received values of form: ', values)
+        }
+      })
+      return false
+    },
+    initList (list){
+      var that = this
+      _.each(list, function(a){
+        if(a.simple > 0 && a.taskExecuteRecord && a.taskExecuteRecord.length){
+          a.basisElementId = a.taskExecuteRecord[0].elementNumValue
+        }
+        if(typeof a.computeElement !== 'undefined' && a.computeElement === 0 && a.taskExecuteRecord && a.taskExecuteRecord.length) {
+          that.computeMap[a.basisElementCopyId] = a.taskExecuteRecord[0].elementTextValue
+        }
+        if(a.hasChild > 0 && a.isRadio === 0){
+          _.each(a.childList,function(b){
+            if(typeof b.computeElement !== 'undefined' && b.computeElement === 0 && b.taskExecuteRecord && b.taskExecuteRecord.length) {
+              that.computeMap[b.basisElementCopyId] = b.taskExecuteRecord[0].elementTextValue
+            }
+            if(b.simple > 0 && b.taskExecuteRecord && b.taskExecuteRecord.length){
+              b.basisElementId = b.taskExecuteRecord[0].elementNumValue
+            }
+            //单选
+            if(b.hasChild > 0 && b.isRadio > 0){
+              var re = _.filter(b.childList, function(v){return v.taskExecuteRecord && v.taskExecuteRecord.length && v.taskExecuteRecord[0].elementNumValue > 0})
+              if(re.length) b.basisElementId = re[0].basisElementId
+              _.each(b.childList, function(c){
+                if(c.logicValue > 0 && c.hasChild > 0 && c.isRadio === 0){
+                  _.each(c.childList, function(d){
+                    if(d.simple > 0 && d.taskExecuteRecord && d.taskExecuteRecord.length){
+                      d.basisElementId = d.taskExecuteRecord[0].elementNumValue
+                    }
+                    if(d.hasChild > 0 && d.isRadio === 0){
+                      _.each(d.childList, function(e){
+                        if(e.simple > 0 && e.taskExecuteRecord && e.taskExecuteRecord.length){
+                          e.basisElementId = e.taskExecuteRecord[0].elementNumValue
+                        }
+                      })
+                    }
+                  })
+                }
+                if(c.logicValue > 0 && c.hasChild > 0 && c.isRadio > 0){
+
+                }
+              })
+            }
+            //多选
+            if(b.hasChild > 0 && b.isRadio < 0){
+              if(b.childList[0].taskExecuteRecord && b.childList[0].taskExecuteRecord.length){
+                b.elementId = _.map(_.filter(_.flatten(_.map(b.childList,function(v){return v.taskExecuteRecord})),function(v){return v.elementNumValue > 0}),function(v){return v.basisElementId})
+              }else{
+                b.elementId = []
+              }
+              //多选框控制子选项
+              _.each(b.childList,function(c){
+                if(c.logicValue > 0 && c.taskExecuteRecord && c.taskExecuteRecord.length && c.taskExecuteRecord[0].elementNumValue > 0){
+                  var selected = _.filter(_.flatten(_.map(c.childList,function(v){return v.taskExecuteRecord})),function(v){return v.elementNumValue > 0})
+                  if(selected.length){
+                    c.basisElementId = _.map(selected,function(v){return v.basisElementId})[0]
+                  }
+                }
+              })
+            }
+            //子选项,第三层
+            if(b.hasChild > 0 && b.isRadio === 0){
+              _.each(b.childList, function(c){
+                if(c.simple > 0 && c.taskExecuteRecord && c.taskExecuteRecord.length){
+                  c.basisElementId = c.taskExecuteRecord[0].elementNumValue
+                }
+                if(c.hasChild > 0 && c.isRadio === 0){
+                  _.each(c.childList, function(d){
+                    if(d.simple > 0 && d.taskExecuteRecord && d.taskExecuteRecord.length){
+                      d.basisElementId = d.taskExecuteRecord[0].elementNumValue
+                    }
+                    if(d.hasChild > 0 && d.isRadio < 0){
+                      if(d.childList[0].taskExecuteRecord && d.childList[0].taskExecuteRecord.length){
+                        d.elementId = _.map(_.filter(_.flatten(_.map(d.childList,function(v){return v.taskExecuteRecord})),function(v){return v.elementNumValue > 0}),function(v){return v.basisElementId})
+                      }else{
+                        d.elementId = []
+                      }
+                    }else if(d.hasChild > 0 && d.isRadio > 0){
+                      if(d.childList[0].taskExecuteRecord && d.childList[0].taskExecuteRecord.length){
+                        var selected = _.filter(_.flatten(_.map(d.childList,function(v){ return v.taskExecuteRecord })),function(v){ return v.elementNumValue > 0 })
+                        if(selected.length){
+                          d.basisElementId = _.map(selected,function(v){ return v.basisElementId })[0]
+                        }
+                      }
+                    }
+                  })
+                }
+                if(c.hasChild > 0 && c.isRadio < 0){
+                  if(c.childList[0].taskExecuteRecord && c.childList[0].taskExecuteRecord.length){
+                    c.elementId = _.map(_.filter(_.flatten(_.map(c.childList,function(v){return v.taskExecuteRecord})),function(v){return v.elementNumValue > 0}),function(v){return v.basisElementId})
+                  }else{
+                    c.elementId = []
+                  }
+                  _.each(c.childList, function(d){
+                    if(d.hasChild > 0 && d.isRadio > 0){
+                      if(d.childList[0].taskExecuteRecord && d.childList[0].taskExecuteRecord.length){
+                        var selected = _.filter(_.flatten(_.map(d.childList,function(v){ return v.taskExecuteRecord })),function(v){ return v.elementNumValue > 0 })
+                        if(selected.length){
+                          d.basisElementId = _.map(selected,function(v){ return v.basisElementId })[0]
+                        }
+                      }
+                    }
+                  })
+                }
+                if(c.hasChild > 0 && c.isRadio > 0){
+                  if(c.childList[0].taskExecuteRecord && c.childList[0].taskExecuteRecord.length){
+                    var selected = _.filter(_.flatten(_.map(c.childList,function(v){ return v.taskExecuteRecord })),function(v){ return v.elementNumValue > 0 })
+                    if(selected.length){
+                      c.basisElementId = _.map(selected,function(v){ return v.basisElementId })[0]
+                    }
+                  }
+                }
+              })
+            }
+          })
+        }else if(a.hasChild > 0 && a.isRadio < 0){
+          if(a.childList[0].taskExecuteRecord && a.childList[0].taskExecuteRecord.length){
+            a.elementId = _.map(_.filter(_.flatten(_.map(a.childList,function(v){return v.taskExecuteRecord})),function(v){return v.elementNumValue > 0}),function(v){return v.basisElementId})
+          }else{
+            a.elementId = []
+          }
+        }else if(a.hasChild > 0 && a.isRadio > 0){
+          var re = _.filter(a.childList, function(v){return v.taskExecuteRecord && v.taskExecuteRecord.length && v.taskExecuteRecord[0].elementNumValue > 0})
+          if(re.length) a.basisElementId = re[0].basisElementId
+        }
+      })
+      return list
+    },
+    compute (id){
+      console.log(id)
+      var that = this
+      var result = this.generateAnswers()
+      var params = new URLSearchParams();
+      params.append('basisElementId', id)
+      params.append('basisAnswer', JSON.stringify(result))
+      computeScore(params)
+        .then(res => {
+          console.log(res)
+          console.log('计算成功,结果为:' + res.data[id])
+          if(typeof res.data[id] !== 'undefined') {
+            that.computeMap[id] = res.data[id]
+          }
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+ /deep/ #baselineHeader{
+    .ant-card-body{
+      padding: 10px
+    }
+  }
+  
+  .ml-10{
+    margin-left: 10px; 
+  }
+ .UserNameCard{
+   font-size: 20px;
+   .anticon{
+         font-size: 26px;
+    vertical-align: text-bottom;
+        position: relative;
+    left: -5px;
+   }
+ }
+.clear {
+  clear: both;
+}
+.ant-col-4 .ant-calendar-picker,
+.ant-col-6 .ant-calendar-picker {
+  width: 100%;
+}
+.ant-checkbox-wrapper + .ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+    background-color: #CFF4FF;
+}
+
+
+/deep/.ant-menu-vertical .ant-menu-item:after, .ant-menu-vertical-left .ant-menu-item:after, .ant-menu-vertical-right .ant-menu-item:after, .ant-menu-inline .ant-menu-item:after{
+      border-right: 6px solid #1890ff;
+}
+/deep/ .ant-row {
+  clear: both;
+}
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 10px 15px;
+  }
+  /deep/ .tree-title {
+    border-right: 1px solid #e8e8e8;
+    color: #25aefe;
+    font-size: 22px;
+    padding-left: 70px;
+    padding-top: 5px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    padding-left: 20p;
+    background-position-x: 15px;
+    padding-bottom: 26px;
+  }
+  /deep/ .ant-menu-inline > .ant-menu-submenu > .ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245,251,255);
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245,251,255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+            height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+    /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+    .ant-menu-item:hover,
+    .ant-menu-item-active,
+    .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+    .ant-menu-submenu-active,
+    .ant-menu-submenu-title:hover {
+      background-color: #eaf2fd;
+    }
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+  /deep/ .ant-menu-submenu {
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+      .action {
+        font-size: 18px;
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+  .fr {
+    float: right;
+  }
+  .btn {
+    margin-right: 10px;
+  }
+  .baselineForm {
+    height: 350px;
+    overflow: auto;
+
+    padding: 40px 20px;
+    .ant-row {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+      &.no-border{
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+      &:hover {
+      }
+    }
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      label:after {
+        content: '';
+      }
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+      }
+    }
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+.question-title{
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+.question-des{
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding:0 10px ;
+}
+.question-t{
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle{
+  width: 120px;
+}
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+     padding-right: 0px;
+}
+</style>
diff --git a/src/views/account/index.vue b/src/views/account/index.vue
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/views/account/maskWrap.vue b/src/views/account/maskWrap.vue
new file mode 100644
index 0000000000..5647613e7f
--- /dev/null
+++ b/src/views/account/maskWrap.vue
@@ -0,0 +1,710 @@
+<template>
+<div>
+<a-form :form="form" @submit="handleSubmit">
+     <div style="overflow: hidden;">
+       <a-button class="btn fr" v-if="patientBasis.type === 3" @click="_import">导入</a-button>
+       <a-button class="btn fr" type="primary" html-type="submit">提交</a-button>
+       <a-button class="btn fr" @click="save">保存</a-button>
+     </div>
+  <div class="baselineForm" :style="baselineFormStyle" v-if="maskId === 1">
+    <div class="title">1.基本病史</div>
+    <a-form-item label="(1) 留全血:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['a_1', require1]">
+        <a-radio value="1">是</a-radio>
+        <a-radio value="-1">否</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item label="(2) 留血清:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['a_2', require1]">
+        <a-radio value="1">是</a-radio>
+        <a-radio value="-1">否</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item label="(3) 患者支扩确诊时间:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-date-picker placeholder="请选择" @change="changeDate" :disabled-date="disabledDate" v-decorator="['a_3', dateRequire]" style="width: 200px;"></a-date-picker>
+    </a-form-item>
+    <a-form-item label="(4) 主要临床症状(多选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-checkbox-group v-decorator="['a_4', selectRequired]">
+        <a-checkbox value="1">咳嗽</a-checkbox>
+        <a-checkbox value="2" :checked="controlList[maskId].control_a_4_1" @change="changeSelect($event, 'control_a_4_1')">咳痰</a-checkbox>
+        <a-checkbox value="3">痰血</a-checkbox>
+        <a-checkbox value="4" :checked="controlList[maskId].control_a_4_2" @change="changeSelect($event, 'control_a_4_2')">咯血</a-checkbox>
+        <a-checkbox value="5">胸闷</a-checkbox>
+        <a-checkbox value="6">喘息</a-checkbox>
+        <a-checkbox value="7">活动后气促</a-checkbox>
+        <a-checkbox value="8">胸痛</a-checkbox>
+        <a-checkbox value="9">发热</a-checkbox>
+        <a-checkbox value="10">全身疲乏</a-checkbox>
+        <a-checkbox value="11">纳差</a-checkbox>
+        <a-checkbox value="12">消瘦</a-checkbox>
+      </a-checkbox-group>
+    </a-form-item>
+    <a-form-item label="痰量" v-if="controlList[maskId].control_a_4_1" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-input addonAfter="ml/日" style="width: 200px;" v-decorator="['a_4_1', inputRequired]"></a-input>
+    </a-form-item>
+    <a-form-item label="咯血量(最多)" v-if="controlList[maskId].control_a_4_2" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-input addonAfter="ml/日" style="width: 200px;" v-decorator="['a_4_2', inputRequired]"></a-input>
+    </a-form-item>
+    <div class="title">2.既往病史</div>
+    <a-form-item label="(1) 过去一年的急性加重次数:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-input addonAfter="次" style="width: 200px;" v-decorator="['b_1', inputRequired]"></a-input>
+    </a-form-item>
+    <a-form-item label="(2) 过去一年的住院急性加重次数:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-input addonAfter="次" style="width: 200px;" v-decorator="['b_2', inputRequired]"></a-input>
+    </a-form-item>
+    <a-form-item label="(3) 过去一年的门诊急性加重次数:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-input addonAfter="次" style="width: 200px;" v-decorator="['b_3', inputRequired]"></a-input>
+    </a-form-item>
+    <a-form-item label="(4) 过去一年的门诊急性加重次数:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-date-picker placeholder="请选择" style="width: 200px;" v-decorator="['b_4', dateRequire]"></a-date-picker>
+    </a-form-item>
+    <a-form-item label="(5) 有无病因相关的病史及事件(多选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-checkbox-group v-decorator="['b_5', selectRequired]">
+        <a-checkbox value="1" :disabled="detect('b_5', '7')">既往有无麻疹</a-checkbox>
+        <a-checkbox value="2" :disabled="detect('b_5', '7')">百日咳</a-checkbox>
+        <a-checkbox value="3" :disabled="detect('b_5', '7')">肺结核</a-checkbox>
+        <a-checkbox value="4" :disabled="detect('b_5', '7')">NTM</a-checkbox>
+        <a-checkbox value="5" :disabled="detect('b_5', '7')">溺水</a-checkbox>
+        <a-checkbox value="6" :disabled="detect('b_5', '7')">其他</a-checkbox>
+        <a-checkbox value="7" @change="handleNone($event, 'b_5', '7')">无</a-checkbox>
+      </a-checkbox-group>
+    </a-form-item>
+    <a-form-item label="(6) 目前合并呼吸系统相关疾病:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-checkbox-group v-decorator="['b_6', selectRequired]">
+        <a-checkbox value="1" :checked="controlList[maskId].control_b_6_1" @change="changeSelect($event, 'control_b_6_1')">鼻炎</a-checkbox>
+        <a-checkbox value="2" :checked="controlList[maskId].control_b_6_2" @change="changeSelect($event, 'control_b_6_2')">鼻窦炎</a-checkbox>
+        <a-checkbox value="3" :checked="controlList[maskId].control_b_6_3" @change="changeSelect($event, 'control_b_6_3')">鼻息肉</a-checkbox>
+        <a-checkbox value="4" :checked="controlList[maskId].control_b_6_4" @change="changeSelect($event, 'control_b_6_4')">哮喘</a-checkbox>
+        <a-checkbox value="5" :checked="controlList[maskId].control_b_6_5" @change="changeSelect($event, 'control_b_6_5')">慢阻肺</a-checkbox>
+      </a-checkbox-group>
+    </a-form-item>
+    <a-form-item class="no-border" label="鼻炎具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_6_1">
+      <a-date-picker placeholder="请选择" style="width: 200px;" v-decorator="['b_6_1']"></a-date-picker>
+    </a-form-item>
+    <a-form-item class="no-border" label="鼻窦炎具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_6_2">
+      <a-date-picker placeholder="请选择" style="width: 200px;" v-decorator="['b_6_2']"></a-date-picker>
+    </a-form-item>
+    <a-form-item class="no-border" label="鼻息肉具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_6_3">
+      <a-date-picker placeholder="请选择" style="width: 200px;" v-decorator="['b_6_3']"></a-date-picker>
+    </a-form-item>
+    <a-form-item class="no-border" label="哮喘具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_6_4">
+      <a-date-picker placeholder="请选择" style="width: 200px;" v-decorator="['b_6_4']"></a-date-picker>
+    </a-form-item>
+    <a-form-item class="no-border" label="慢阻肺具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_6_5">
+      <a-date-picker placeholder="请选择" style="width: 200px;" v-decorator="['b_6_5']"></a-date-picker>
+    </a-form-item>
+    <a-form-item label="(7) 心血管系统" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['b_7', require2]" @change="changeRadio($event, 'control_b_7')">
+        <a-radio value="1">有</a-radio>
+        <a-radio value="-1">无</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item class="no-border" label="心血管系统疾病类型(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_7">
+      <a-checkbox-group v-decorator="['b_7_1', selectRequired]">
+        <a-checkbox value="1">心梗</a-checkbox>
+        <a-checkbox value="2">心绞痛</a-checkbox>
+        <a-checkbox value="3">冠心病</a-checkbox>
+        <a-checkbox value="4">慢性心衰</a-checkbox>
+        <a-checkbox value="5">心律失常</a-checkbox>
+        <a-checkbox value="6">心脏瓣膜病</a-checkbox>
+        <a-checkbox value="7">肺动脉高压</a-checkbox>
+        <a-checkbox value="8">中风或短暂性缺血发作</a-checkbox>
+        <a-checkbox value="9">外周血管疾病</a-checkbox>
+        <a-checkbox value="10" :checked="controlList[maskId].control_b_7_2" @change="changeSelect($event, 'control_b_7_2')">其他</a-checkbox>
+      </a-checkbox-group>
+    </a-form-item>
+    <a-form-item class="no-border" label="疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_7_2">
+      <a-input style="width: 200px;" v-decorator="['b_7_2', dateRequire]"></a-input>
+    </a-form-item>
+    <a-form-item label="(8) 消化系统疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['b_8', require2]" @change="changeRadio($event, 'control_b_8')">
+        <a-radio value="1">有</a-radio>
+        <a-radio value="-1">无</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item class="no-border" label="消化系统疾病类型(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_8">
+      <a-checkbox-group v-decorator="['b_8_1', selectRequired]">
+        <a-checkbox value="1" :checked="controlList[maskId].control_b_8_1_1" @change="changeSelect($event, 'control_b_8_1_1')">炎性肠病</a-checkbox>
+        <a-checkbox value="2">胃食管反流</a-checkbox>
+        <a-checkbox value="3">消化道溃疡</a-checkbox>
+        <a-checkbox value="4">慢性肝病</a-checkbox>
+      </a-checkbox-group>
+    </a-form-item>
+    <a-form-item class="no-border" label="炎性肠病" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_8_1_1">
+      <a-radio-group v-decorator="['b_8_1_1', require2]">
+        <a-radio value="1">溃疡性结肠炎</a-radio>
+        <a-radio value="2">克罗恩病</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item label="(9) 内分泌系统" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['b_9', require2]" @change="changeRadio($event, 'control_b_9')">
+        <a-radio value="1">有</a-radio>
+        <a-radio value="-1">无</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item class="no-border" label="内分泌系统疾病类型(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_9">
+      <a-checkbox-group v-decorator="['b_9_1', selectRequired]">
+        <a-checkbox value="1" :checked="controlList[maskId].control_b_9_1_1" @change="changeSelect($event, 'control_b_9_1_1')">糖尿病</a-checkbox>
+        <a-checkbox value="2">骨质疏松</a-checkbox>
+        <a-checkbox value="3">高脂血症</a-checkbox>
+        <a-checkbox value="4">甲亢</a-checkbox>
+        <a-checkbox value="5">甲减</a-checkbox>
+        <a-checkbox value="6">高尿酸血症</a-checkbox>
+        <a-checkbox value="7">其他</a-checkbox>
+      </a-checkbox-group>
+    </a-form-item>
+    <a-form-item class="no-border" label="糖尿病" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_9_1_1">
+      <a-radio-group v-decorator="['b_9_1_1', require2]">
+        <a-radio value="1">I型</a-radio>
+        <a-radio value="2">II型</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item label="(10) 血液系统疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['b_10', require2]" @change="changeRadio($event, 'control_b_10')">
+        <a-radio value="1">有</a-radio>
+        <a-radio value="-1">无</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item class="no-border" label="血液系统疾病类型(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_10">
+      <a-checkbox-group v-decorator="['b_10_1', selectRequired]">
+        <a-checkbox value="1" :checked="controlList[maskId].control_b_10_1_1" @change="changeSelect($event, 'control_b_10_1_1')">缺铁性贫血</a-checkbox>
+        <a-checkbox value="2">白血病</a-checkbox>
+        <a-checkbox value="3">淋巴瘤</a-checkbox>
+        <a-checkbox value="4">其他</a-checkbox>
+      </a-checkbox-group>
+    </a-form-item>
+    <a-form-item class="no-border" label="缺铁性贫血" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_10_1_1">
+      <a-radio-group v-decorator="['b_10_1_1', require2]">
+        <a-radio value="1">I型</a-radio>
+        <a-radio value="2">II型</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item label="(11) 泌尿系统疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['b_11', require2]" @change="changeRadio($event, 'control_b_11')">
+        <a-radio value="1">有</a-radio>
+        <a-radio value="-1">无</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item class="no-border" label="泌尿系统疾病类型(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_11">
+      <a-checkbox-group v-decorator="['b_11_1', selectRequired]">
+        <a-checkbox value="1" :checked="controlList[maskId].control_b_11_1_1" @change="changeSelect($event, 'control_b_11_1_1')">慢性肾病</a-checkbox>
+        <a-checkbox value="2">慢性尿路感染</a-checkbox>
+        <a-checkbox value="3">其他</a-checkbox>
+      </a-checkbox-group>
+    </a-form-item>
+    <a-form-item class="no-border" label="慢性肾病" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_11_1_1">
+      <a-checkbox v-decorator="['b_11_1_1']">有透析</a-checkbox>
+    </a-form-item>
+    <a-form-item label="(12) 风湿系统疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['b_12', require2]" @change="changeRadio($event, 'control_b_12')">
+        <a-radio value="1">有</a-radio>
+        <a-radio value="-1">无</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item class="no-border" label="风湿系统疾病类型(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_12">
+      <a-checkbox-group v-decorator="['b_12_1', selectRequired]">
+        <a-checkbox value="1">系统性红斑狼疮</a-checkbox>
+        <a-checkbox value="2">干燥综合征</a-checkbox>
+        <a-checkbox value="3">系统性硬化</a-checkbox>
+        <a-checkbox value="4">皮肌炎</a-checkbox>
+        <a-checkbox value="5">先天性结缔组织发育不全病</a-checkbox>
+        <a-checkbox value="6">青少年特发性关节炎</a-checkbox>
+      </a-checkbox-group>
+    </a-form-item>
+    <a-form-item label="(13) 是否有HIV" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['b_13', require1]">
+        <a-radio value="1">是</a-radio>
+        <a-radio value="-1">否</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item label="(14) 是否有恶性肿瘤" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['b_14', require1]" @change="changeRadio($event, 'control_b_14')">
+        <a-radio value="1">是</a-radio>
+        <a-radio value="-1">否</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <div v-if="controlList[maskId].control_b_14">
+      <a-form-item class="border-dotted" label="当前正患病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+        <a-radio-group v-decorator="['b_14_1', require1]">
+          <a-radio value="1">是</a-radio>
+          <a-radio value="-1">否</a-radio>
+        </a-radio-group>
+      </a-form-item>
+      <a-form-item class="border-dotted" label="血液性" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+        <a-radio-group v-decorator="['b_14_2', require1]">
+          <a-radio value="1">是</a-radio>
+          <a-radio value="-1">否</a-radio>
+        </a-radio-group>
+      </a-form-item>
+      <a-form-item class="border-dotted" label="肿瘤部位(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+        <a-checkbox-group v-decorator="['b_14_3', selectRequired]">
+          <a-checkbox value="1">头颈部</a-checkbox>
+          <a-checkbox value="2">肺</a-checkbox>
+          <a-checkbox value="3">乳腺</a-checkbox>
+          <a-checkbox value="4">胃</a-checkbox>
+          <a-checkbox value="5">小肠</a-checkbox>
+          <a-checkbox value="6">结肠</a-checkbox>
+          <a-checkbox value="7">肝</a-checkbox>
+          <a-checkbox value="8">胰腺</a-checkbox>
+          <a-checkbox value="9">肾</a-checkbox>
+          <a-checkbox value="10">前列腺</a-checkbox>
+          <a-checkbox value="11">膀胱</a-checkbox>
+          <a-checkbox value="12">子宫附件</a-checkbox>
+          <a-checkbox value="13">骨</a-checkbox>
+          <a-checkbox value="14">皮肤</a-checkbox>
+          <a-checkbox value="15">脑</a-checkbox>
+          <a-checkbox value="16">其他</a-checkbox>
+          <a-checkbox value="17">未知</a-checkbox>
+        </a-checkbox-group>
+      </a-form-item>
+    </div>
+    <a-form-item label="(15) 免疫缺陷" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['b_15', require2]" @change="changeRadio($event, 'control_b_15')">
+        <a-radio value="1">有</a-radio>
+        <a-radio value="-1">无</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <div v-if="controlList[maskId].control_b_15">
+      <a-form-item class="border-dotted" label="B细胞缺陷类疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+        <a-input style="width: 200px;" v-decorator="['b_15_1', inputRequired]"></a-input>
+      </a-form-item>
+      <a-form-item class="border-dotted" label="T细胞及联合免疫缺陷病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+        <a-input style="width: 200px;" v-decorator="['b_15_2', inputRequired]"></a-input>
+      </a-form-item>
+      <a-form-item class="border-dotted" label="继发性免疫缺陷(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+        <a-checkbox-group v-decorator="['b_15_3', selectRequired]">
+          <a-checkbox value="1">慢性淋巴性白血病</a-checkbox>
+          <a-checkbox value="2">多发性骨髓瘤</a-checkbox>
+          <a-checkbox value="3">血液肿瘤相关免疫缺陷</a-checkbox>
+          <a-checkbox value="4">系统化疗后免疫缺陷</a-checkbox>
+          <a-checkbox value="5">免疫抑制药物后免疫缺陷</a-checkbox>
+          <a-checkbox value="6">干细胞移植</a-checkbox>
+          <a-checkbox value="7">实体器官移植</a-checkbox>
+          <a-checkbox value="8">其他</a-checkbox>
+        </a-checkbox-group>
+      </a-form-item>
+      <a-form-item class="border-dotted" label="巨噬细胞缺陷疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+        <a-input style="width: 200px;" v-decorator="['b_15_4', inputRequired]"></a-input>
+      </a-form-item>
+      <a-form-item class="border-dotted" label="补体缺陷疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+        <a-input style="width: 200px;" v-decorator="['b_15_5', inputRequired]"></a-input>
+      </a-form-item>
+    </div>
+    <a-form-item label="(16) 其他疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['b_16', require2]" @change="changeRadio($event, 'control_b_16')">
+        <a-radio value="1">有</a-radio>
+        <a-radio value="-1">无</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item label="疾病类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlList[maskId].control_b_16">
+      <a-checkbox-group v-decorator="['b_16_1', selectRequired]">
+        <a-checkbox value="1">抑郁</a-checkbox>
+        <a-checkbox value="2">焦虑</a-checkbox>
+        <a-checkbox value="3">认知功能障碍</a-checkbox>
+        <a-checkbox value="4">其他</a-checkbox>
+      </a-checkbox-group>
+    </a-form-item>
+    <a-form-item label="(17) 其他系统相关治疗" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+    </a-form-item>
+    <a-form-item label="调脂" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+      <a-radio-group v-decorator="['b_17_1', require1]" @change="changeRadio($event, 'control_b_17_1')">
+          <a-radio value="1">是</a-radio>
+          <a-radio value="-1">否</a-radio>
+        </a-radio-group>
+    </a-form-item>
+    <a-row v-if="controlList[maskId].control_b_17_1">
+      <a-col :span="18" :push="6">
+        <a-form-item label="他汀类" :labelCol="labelColHor" :wrapperCol="wrapper18" class="border-dotted">
+            <a-radio-group v-decorator="['b_17_1_1', require1]">
+              <a-radio value="1">是</a-radio>
+              <a-radio value="-1">否</a-radio>
+            </a-radio-group>
+        </a-form-item>
+      </a-col>
+    </a-row>
+    <a-form-item label="抗凝" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+      <a-radio-group v-decorator="['b_17_2', require1]" @change="changeRadio($event, 'control_b_17_2')">
+          <a-radio value="1">是</a-radio>
+          <a-radio value="-1">否</a-radio>
+        </a-radio-group>
+    </a-form-item>
+    <a-row v-if="controlList[maskId].control_b_17_2">
+      <a-col :span="18" :push="6">
+        <a-form-item label="阿司匹林" :labelCol="labelColHor" :wrapperCol="wrapper18"  class="border-dotted">
+            <a-radio-group v-decorator="['b_17_2_1', require1]">
+              <a-radio value="1">是</a-radio>
+              <a-radio value="-1">否</a-radio>
+            </a-radio-group>
+        </a-form-item>
+        <a-form-item label="非阿司匹林抑制剂(如:氯吡格雷)" :labelCol="labelColHor" :wrapperCol="wrapper18"  class="border-dotted">
+            <a-radio-group v-decorator="['b_17_2_2', require1]">
+              <a-radio value="1">是</a-radio>
+              <a-radio value="-1">否</a-radio>
+            </a-radio-group>
+        </a-form-item>
+        <a-form-item label="华法林/口服抗凝药" :labelCol="labelColHor" :wrapperCol="wrapper18"  class="border-dotted">
+            <a-radio-group v-decorator="['b_17_2_3', require1]">
+              <a-radio value="1">是</a-radio>
+              <a-radio value="-1">否</a-radio>
+            </a-radio-group>
+        </a-form-item>
+      </a-col>
+    </a-row>
+    <a-form-item label="(18) 家族史" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+    </a-form-item>
+    <a-form-item label="是否近亲结婚史" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+      <a-radio-group v-decorator="['b_18_1', require1]">
+        <a-radio value="1">是</a-radio>
+        <a-radio value="-1">否</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item label="既往直系亲属有无支扩" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+      <a-radio-group v-decorator="['b_18_2', require1]">
+        <a-radio value="1">是</a-radio>
+        <a-radio value="-1">否</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item label="遗传性疾病病史" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['b_18_3', require1]" @change="changeRadio($event, 'control_b_18_3_1')">
+        <a-radio value="1">是</a-radio>
+        <a-radio value="-1">否</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item label="具体疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlList[maskId].control_b_18_3_1">
+      <a-input style="width: 200px;" v-decorator="['b_18_3_1', inputRequired]"></a-input>
+    </a-form-item>
+    <a-form-item label="(19) 吸烟史(单选)" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['b_19', selectRequired]" @change="changeRadio($event, 'control_b_19_1')">
+        <a-radio value="1">既往吸烟</a-radio>
+        <a-radio value="2">已戒烟</a-radio>
+        <a-radio value="3">无吸烟</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item label="吸烟指数" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlList[maskId].control_b_19_1">
+      <a-input addonAfter="包/年" style="width: 200px;" v-decorator="['b_19_1', inputRequired]"></a-input>
+    </a-form-item>
+    <a-form-item label="(20) 胸部手术病史" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['b_20', require2]" @change="changeRadio($event, 'control_b_20')">
+        <a-radio value="1">有</a-radio>
+        <a-radio value="-1">无</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item label="手术类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlList[maskId].control_b_20">
+      <a-checkbox-group v-decorator="['b_20_1', selectRequired]">
+        <a-checkbox value="1" :checked="controlList[maskId].control_b_20_2" @change="changeSelect($event, 'control_b_20_2')">肺叶切除术</a-checkbox>
+        <a-checkbox value="2">胸膜剥脱术</a-checkbox>
+        <a-checkbox value="3">肺减容术</a-checkbox>
+        <a-checkbox value="4">胸腔闭式引流</a-checkbox>
+        <a-checkbox value="5">冠脉搭桥术</a-checkbox>
+        <a-checkbox value="6">其他</a-checkbox>
+      </a-checkbox-group>
+    </a-form-item>
+    <a-form-item label="肺叶切除术" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlList[maskId].control_b_20_2">
+      <a-radio-group v-decorator="['b_20_2', require2]">
+        <a-radio value="1">I型</a-radio>
+        <a-radio value="2">II型</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item label="(21) 支气管动脉栓塞病史" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-radio-group v-decorator="['b_21', require2]" @change="changeRadio($event, 'control_b_21')">
+        <a-radio value="1">有</a-radio>
+        <a-radio value="-1">无</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <div v-if="controlList[maskId].control_b_21">
+      <a-form-item label="若行支气管动脉栓塞术:时间" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+        <a-date-picker placeholder="请选择" style="width: 200px;" v-decorator="['b_21_1', dateRequire]"></a-date-picker>
+      </a-form-item>
+      <a-form-item label="支气管动脉栓塞术部位" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+        <a-input style="width: 200px;" v-decorator="['b_21_2', inputRequired]"></a-input>
+      </a-form-item>
+    </div>
+ </div>
+ <div class="baselineForm" :style="baselineFormStyle" v-if="maskId === 2">
+ 	<div class="title">1.体格检查</div>
+    <a-form-item label="(1) T:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-input v-decorator="['a_1', inputRequired]" style="width: 200px;"></a-input>
+    </a-form-item>
+    <a-form-item label="(2) BP:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-input v-decorator="['a_2', inputRequired]" style="width: 200px;"></a-input>
+    </a-form-item>
+    <a-form-item label="(3) R:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-input v-decorator="['a_3', inputRequired]" style="width: 200px;"></a-input>
+    </a-form-item>
+    <a-form-item label="(4) HR:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-input v-decorator="['a_4', inputRequired]" style="width: 200px;"></a-input>
+    </a-form-item>
+    <a-form-item label="(5) SpO2:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-input v-decorator="['a_5', inputRequired]" style="width: 200px;"></a-input>
+    </a-form-item>
+    <a-form-item label="(6) 身高:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-input v-decorator="['a_6', inputRequired]" style="width: 200px;"></a-input>
+    </a-form-item>
+    <a-form-item label="(7) 体重:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-input v-decorator="['a_7', inputRequired]" style="width: 200px;"></a-input>
+    </a-form-item>
+    <a-form-item label="(8) BMI(自动演算出):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+      <a-input v-decorator="['a_8', inputRequired]" style="width: 200px;"></a-input>
+    </a-form-item>
+    <a-form-item label="(9) 肺部体征:双肺呼吸音:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+    </a-form-item>
+    <a-form-item label="啰音" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+      <a-radio-group v-decorator="['a_9', require2]" @change="changeRadio($event, 'control_a_9')">
+          <a-radio value="1">有</a-radio>
+          <a-radio value="-1">无</a-radio>
+        </a-radio-group>
+    </a-form-item>
+    <div v-if="controlList[maskId].control_a_9">
+    	<a-form-item label="啰音类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+      		<a-radio-group v-decorator="['a_9_1', selectRequired]">
+	          <a-radio value="1">湿罗音</a-radio>
+	          <a-radio value="2">干啰音</a-radio>
+	        </a-radio-group>
+	    </a-form-item>
+	    <a-form-item label="啰音部位" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+	    	<a-input style="width: 200px;" v-decorator="['a_9_2', inputRequired]"></a-input>
+	    </a-form-item>
+    </div>
+ </div>
+ <div class="baselineForm" :style="baselineFormStyle" v-if="maskId === 3">
+ 	
+ </div>
+ </a-form>
+</div>
+</template>
+<script>
+export default{
+	props: {
+	    maskId: {
+	      type: Number,
+	      required: true
+	    }
+  	},
+  	data() {
+  		return {
+			baselineInfoStyle: {
+				overflow:"auto",
+				height:(window.screen.height-330)+'px',
+				"padding-right":"0px",
+				"border-right":"1px solid #ddd"
+			},
+			baselineFormStyle:{
+	        	height:(window.screen.height-350)+'px',
+	      	},
+	      	form: this.$form.createForm(this),
+	      	controlList: {
+	      		/** 支扩病史资料 */
+	      		1: {
+	      			control_a_4_1: false,
+					control_a_4_2: false,
+					control_b_6_1: false,
+					control_b_6_2: false,
+					control_b_6_3: false,
+					control_b_6_4: false,
+					control_b_6_5: false,
+					control_b_7: false,
+					control_b_7_2: false,
+					control_b_8: false,
+					control_b_8_1_1: false,
+					control_b_9: false,
+					control_b_9_1_1: false,
+					control_b_10: false,
+					control_b_10_1_1: false,
+					control_b_11: false,
+					control_b_11_1_1: false,
+					control_b_12: false,
+					control_b_14: false,
+					control_b_15: false,
+					control_b_16: false,
+					control_b_17_1: false,
+					control_b_17_2: false,
+					control_b_18_3_1: false,
+					control_b_19_1: false,
+					control_b_20: false,
+					control_b_20_2: false,
+					control_b_21: false
+	      		},
+	      		/** 体格检查 */
+	      		2: {
+	      			control_a_9: false
+	      		}
+	      	},
+			labelColHor: {
+				xs: { span: 24 },
+				sm: { span: 6 },
+				md: { span: 6}
+			},
+			wrapper18: {
+				md: { span: 18 }
+			},
+			labelColVer: {
+				xs: { span: 24 },
+				sm: { span: 24 },
+				md: { span: 24}
+			},
+			wrapperHor: {
+				xs: { span: 24 },
+				sm: { span: 18 },
+				md: { span: 18 }
+			},
+			wrapperVer: {
+				xs: { span: 24 },
+				sm: { span: 24 },
+				md: { span: 24 }
+			},
+			dateRequire: {
+				rules: [{type: 'object', required: true, message: '请选择时间!'}]
+			},
+			require1: {
+				rules: [{required: true, message: '请选择是或否!'}]
+			},
+			require2: {
+				rules: [{required: true, message: '请选择有或无!'}]
+			},
+			selectRequired: {
+				rules: [{required: true, message: '请选择!'}]
+			},
+			inputRequired: {
+				rules: [{required: true, message: '请填写!'}]
+			}
+  		}
+  	},
+  	methods: {
+      getBirthdayByIdNO (IdNO){
+        let birthday = "";
+        if (IdNO.length==18) {
+          birthday = IdNO.substr(6,8);
+          return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+        }else if(IdNO.length==15){
+          birthday = "19"+IdNO.substr(6,6);
+          return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+        }else{
+          return "";
+        }
+      },
+      disabledDate(current) {
+        let date = this.getBirthdayByIdNO(this.patient.card)
+        return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+      },
+      handleNone(e, d, v, arr) {
+        if(e.target.checked){
+          let data = {}
+          data[d] = [v]
+          this.$nextTick(() => {
+            this.form.setFieldsValue(data)
+            arr.forEach((t) => {
+              this[t] = false
+            })
+          })
+        }
+      },
+      detect(d, v) {
+        if(Array.isArray(this.form.getFieldValue(d)) && this.form.getFieldValue(d).indexOf(v) > -1) {
+          return true
+        } else {
+          return false
+        }
+      },
+      changeDate(date) {
+        let timeDiff = Math.abs(new Date(date._d) - new Date(this.getBirthdayByIdNO(this.patient.card)));
+        // 将毫秒数转换为年数
+        let yearDiff = timeDiff / (1000 * 3600 * 24 * 365.25); // 考虑闰年
+        // 判断年数是否大于 10 年
+        if (yearDiff < 10) {
+          this.$message.warning('是否为儿童确诊支扩');
+        }
+      },
+  		changeSelect(e, t) {
+	      this.controlList[this.maskId][t] = e.target.checked
+	    },
+	    changeRadio(e, t) {
+	      if(t === 'control_b_19_1' && this.maskId === 1){
+	        if(e.target.value === '1' || e.target.value === '2'){
+	          this.controlList[this.maskId][t] = true
+	        }else{
+	          this.controlList[this.maskId][t] = false
+	        }
+	      }else if(e.target.value === '1'){
+	        this.controlList[this.maskId][t] = true
+	      }else{
+	        this.controlList[this.maskId][t] = false
+	      }
+	    },
+	    handleSubmit() {
+	    	
+	    }
+  	}
+}
+</script>
+<style lang="less" scoped>
+ /deep/ #baselineHeader{
+    .ant-card-body{
+      padding: 10px
+    }
+  }
+  .baselineForm {
+    overflow: auto;
+    .title{
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+      &.no-border{
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+      &:hover {
+      }
+      &.border-dotted{
+        border-bottom: 1px dotted #eee;
+      }
+    }
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+      label:after {
+        content: '';
+      }
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control{
+      line-height: 56px;
+    }
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+</style>									
\ No newline at end of file
diff --git a/src/views/acute/CardList.vue b/src/views/acute/CardList.vue
new file mode 100644
index 0000000000..7e5375a332
--- /dev/null
+++ b/src/views/acute/CardList.vue
@@ -0,0 +1,109 @@
+<template>
+  <div class="card-list" ref="content">
+    <a-list
+      :grid="{gutter: 24, lg: 3, md: 2, sm: 1, xs: 1}"
+      :dataSource="dataSource"
+    >
+      <a-list-item slot="renderItem" slot-scope="item">
+        <template v-if="item === null">
+          <a-button class="new-btn" type="dashed">
+            <a-icon type="plus"/>
+            新增产品
+          </a-button>
+        </template>
+        <template v-else>
+          <a-card :hoverable="true">
+            <a-card-meta>
+              <div style="margin-bottom: 3px" slot="title">{{ item.title }}</div>
+              <a-avatar class="card-avatar" slot="avatar" :src="item.avatar" size="large"/>
+              <div class="meta-content" slot="description">{{ item.content }}</div>
+            </a-card-meta>
+            <template class="ant-card-actions" slot="actions">
+              <a>操作一</a>
+              <a>操作二</a>
+            </template>
+          </a-card>
+        </template>
+      </a-list-item>
+    </a-list>
+  </div>
+</template>
+
+<script>
+
+const dataSource = []
+dataSource.push(null)
+for (let i = 0; i < 11; i++) {
+  dataSource.push({
+    title: 'Alipay',
+    avatar: 'https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png',
+    content: '在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。'
+  })
+}
+
+export default {
+  name: 'CardList',
+  data () {
+    return {
+      description: '段落示意:蚂蚁金服务设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态, 提供跨越设计与开发的体验解决方案。',
+      linkList: [
+        { icon: 'rocket', href: '#', title: '快速开始' },
+        { icon: 'info-circle-o', href: '#', title: '产品简介' },
+        { icon: 'file-text', href: '#', title: '产品文档' }
+      ],
+      extraImage: 'https://gw.alipayobjects.com/zos/rmsportal/RzwpdLnhmvDJToTdfDPe.png',
+      dataSource
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+  .card-avatar {
+    width: 48px;
+    height: 48px;
+    border-radius: 48px;
+  }
+
+  .ant-card-actions {
+    background: #f7f9fa;
+    li {
+      float: left;
+      text-align: center;
+      margin: 12px 0;
+      color: rgba(0, 0, 0, 0.45);
+      width: 50%;
+
+      &:not(:last-child) {
+        border-right: 1px solid #e8e8e8;
+      }
+
+      a {
+        color: rgba(0, 0, 0, .45);
+        line-height: 22px;
+        display: inline-block;
+        width: 100%;
+        &:hover {
+          color: #1890ff;
+        }
+      }
+    }
+  }
+
+  .new-btn {
+    background-color: #fff;
+    border-radius: 2px;
+    width: 100%;
+    height: 188px;
+  }
+
+  .meta-content {
+    position: relative;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: -webkit-box;
+    height: 64px;
+    -webkit-line-clamp: 3;
+    -webkit-box-orient: vertical;
+  }
+</style>
diff --git a/src/views/acute/QueryList.vue b/src/views/acute/QueryList.vue
new file mode 100644
index 0000000000..b3a2ca5dab
--- /dev/null
+++ b/src/views/acute/QueryList.vue
@@ -0,0 +1,50 @@
+<template>
+  <a-card :bordered="false">
+    <component @onEdit="handleEdit" @onGoBack="handleGoBack" :record="record" :is="currentComponet"></component>
+  </a-card>
+</template>
+
+<script>
+
+import ATextarea from 'ant-design-vue/es/input/TextArea'
+import AInput from 'ant-design-vue/es/input/Input'
+// 动态切换组件
+import List from '@/views/list/table/List'
+import Edit from '@/views/list/table/Edit'
+
+export default {
+  name: 'TableListWrapper',
+  components: {
+    AInput,
+    ATextarea,
+    List,
+    Edit
+  },
+  data () {
+    return {
+      currentComponet: 'List',
+      record: ''
+    }
+  },
+  created () {
+
+  },
+  methods: {
+    handleEdit (record) {
+      this.record = record || ''
+      this.currentComponet = 'Edit'
+      console.log(record)
+    },
+    handleGoBack () {
+      this.record = ''
+      this.currentComponet = 'List'
+    }
+  },
+  watch: {
+    '$route.path' () {
+      this.record = ''
+      this.currentComponet = 'List'
+    }
+  }
+}
+</script>
diff --git a/src/views/acute/StandardList.vue b/src/views/acute/StandardList.vue
new file mode 100644
index 0000000000..b1d2e1ec45
--- /dev/null
+++ b/src/views/acute/StandardList.vue
@@ -0,0 +1,167 @@
+<template>
+  <div>
+    <a-card :bordered="false">
+      <a-row>
+        <a-col :sm="8" :xs="24">
+          <head-info title="我的待办" content="8个任务" :bordered="true"/>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <head-info title="本周任务平均处理时间" content="32分钟" :bordered="true"/>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <head-info title="本周完成任务数" content="24个"/>
+        </a-col>
+      </a-row>
+    </a-card>
+
+    <a-card
+      style="margin-top: 24px"
+      :bordered="false"
+      title="标准列表">
+
+      <div slot="extra">
+        <a-radio-group>
+          <a-radio-button>全部</a-radio-button>
+          <a-radio-button>进行中</a-radio-button>
+          <a-radio-button>等待中</a-radio-button>
+        </a-radio-group>
+        <a-input-search style="margin-left: 16px; width: 272px;" />
+      </div>
+
+      <div class="operate">
+        <a-button type="dashed" style="width: 100%" icon="plus" @click="$refs.taskForm.add()">添加</a-button>
+      </div>
+
+      <a-list size="large" :pagination="{showSizeChanger: true, showQuickJumper: true, pageSize: 5, total: 50}">
+        <a-list-item :key="index" v-for="(item, index) in data">
+          <a-list-item-meta :description="item.description">
+            <a-avatar slot="avatar" size="large" shape="square" :src="item.avatar"/>
+            <a slot="title">{{ item.title }}</a>
+          </a-list-item-meta>
+          <div slot="actions">
+            <a>编辑</a>
+          </div>
+          <div slot="actions">
+            <a-dropdown>
+              <a-menu slot="overlay">
+                <a-menu-item><a>编辑</a></a-menu-item>
+                <a-menu-item><a>删除</a></a-menu-item>
+              </a-menu>
+              <a>更多<a-icon type="down"/></a>
+            </a-dropdown>
+          </div>
+          <div class="list-content">
+            <div class="list-content-item">
+              <span>Owner</span>
+              <p>{{ item.owner }}</p>
+            </div>
+            <div class="list-content-item">
+              <span>开始时间</span>
+              <p>{{ item.startAt }}</p>
+            </div>
+            <div class="list-content-item">
+              <a-progress :percent="item.progress.value" :status="!item.progress.status ? null : item.progress.status" style="width: 180px" />
+            </div>
+          </div>
+        </a-list-item>
+      </a-list>
+
+      <task-form ref="taskForm" />
+    </a-card>
+  </div>
+</template>
+
+<script>
+import HeadInfo from '@/components/tools/HeadInfo'
+import TaskForm from './modules/TaskForm'
+
+const data = []
+data.push({
+  title: 'Alipay',
+  avatar: 'https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png',
+  description: '那是一种内在的东西, 他们到达不了,也无法触及的',
+  owner: '付晓晓',
+  startAt: '2018-07-26 22:44',
+  progress: {
+    value: 90
+  }
+})
+data.push({
+  title: 'Angular',
+  avatar: 'https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png',
+  description: '希望是一个好东西,也许是最好的,好东西是不会消亡的',
+  owner: '曲丽丽',
+  startAt: '2018-07-26 22:44',
+  progress: {
+    value: 54
+  }
+})
+data.push({
+  title: 'Ant Design',
+  avatar: 'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png',
+  description: '生命就像一盒巧克力,结果往往出人意料',
+  owner: '林东东',
+  startAt: '2018-07-26 22:44',
+  progress: {
+    value: 66
+  }
+})
+data.push({
+  title: 'Ant Design Pro',
+  avatar: 'https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png',
+  description: '城镇中有那么多的酒馆,她却偏偏走进了我的酒馆',
+  owner: '周星星',
+  startAt: '2018-07-26 22:44',
+  progress: {
+    value: 30
+  }
+})
+data.push({
+  title: 'Bootstrap',
+  avatar: 'https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png',
+  description: '那时候我只会想自己想要什么,从不想自己拥有什么',
+  owner: '吴加好',
+  startAt: '2018-07-26 22:44',
+  progress: {
+    status: 'exception',
+    value: 100
+  }
+})
+
+export default {
+  name: 'StandardList',
+  components: {
+    HeadInfo,
+    TaskForm
+  },
+  data () {
+    return {
+      data
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+    .ant-avatar-lg {
+        width: 48px;
+        height: 48px;
+        line-height: 48px;
+    }
+
+    .list-content-item {
+        color: rgba(0, 0, 0, .45);
+        display: inline-block;
+        vertical-align: middle;
+        font-size: 14px;
+        margin-left: 40px;
+        span {
+            line-height: 20px;
+        }
+        p {
+            margin-top: 4px;
+            margin-bottom: 0;
+            line-height: 22px;
+        }
+    }
+</style>
diff --git a/src/views/acute/TableList.vue b/src/views/acute/TableList.vue
new file mode 100644
index 0000000000..42b26d7c34
--- /dev/null
+++ b/src/views/acute/TableList.vue
@@ -0,0 +1,361 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form :form="form" layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索患者姓名、身份证号" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="toggleAdvanced" style="margin-left: 8px" class="toggleAdvanced">
+                {{ advanced ? '更多筛选' : '更多筛选' }}
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col :md="13" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="$refs.createModal.add()">新建</a-button>
+            <!-- <a-button type="primary" style="margin-left: 10px;">导出</a-button> -->
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch(9)">全部急性加重期</p>
+                    <p @click="tableSearch(7)">本月新增急性加重期</p>
+                    <p @click="tableSearch(8)">本年新增急性加重期</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="是否ICON">
+                        <a-radio-group v-model="queryParam.isIcon">
+                          <a-radio value="-1">否</a-radio>
+                          <a-radio value="1">是</a-radio>
+                        </a-radio-group>
+                      </a-form-item>
+                      <a-form-item label="姓名">
+                        <a-input v-model.trim="queryParam.patientName" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="身份证号">
+                        <a-input v-model.trim="queryParam.card" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="急性加重日期" style="margin-bottom:0;">
+                        <a-range-picker @change="changeTime" style="width: 100%" :value="dateArr" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" size="small" :scroll="scroll" rowKey="patientBasisId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <template slot="patientName" slot-scope="text, record">
+        <a @click="showUser(record)">{{modifyName(text)}}</a>
+      </template>
+      <span slot="submitStatus" slot-scope="text">
+        <a-badge :status="text | visitTypeFilter" :text="text | visitFilter" /></span>
+      <span slot="serial" slot-scope="text, record, index">{{ index + 1 }}</span>
+      <span slot="description" slot-scope="text">
+        <ellipsis :length="8" tooltip>{{ text }}</ellipsis>
+      </span>
+      <span slot="action" slot-scope="text, record" style="text-align: center;">
+        <template>
+          <a @click="exec(record)">执行</a>
+        </template>
+      </span>
+    </s-table>
+    <create-form ref="createModal" @ok="handleOk" />
+    <user-detail ref="detailModal" />
+  </a-card>
+</template>
+<script>
+import moment from 'moment';
+import { STable, Ellipsis } from '@/components'
+import StepByStepModal from './modules/StepByStepModal'
+import CreateForm from './modules/CreateForm'
+import { getSFJxDataList } from '@/api/basis'
+import UserDetail from './modules/UserDetail'
+import $ from 'jquery'
+
+const visitMap = {
+  '已提交': {
+    status: 'success',
+    text: '已提交'
+  },
+  '未提交': {
+    status: 'error',
+    text: '未提交'
+  }
+};
+export default {
+  name: 'acute',
+  components: {
+    STable,
+    Ellipsis,
+    CreateForm,
+    StepByStepModal,
+    UserDetail
+  },
+  data() {
+    return {
+      dateArr: [],
+      mdl: {},
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      // 表头
+      columns: [
+        {
+          title: '患者姓名',
+          dataIndex: 'patientName',
+          width: 100,
+          scopedSlots: { customRender: 'patientName' }
+        }, {
+          title: '是否ICON',
+          dataIndex: 'research',
+          width: 80
+        },
+        {
+          title: '提交状态',
+          dataIndex: 'submitStatusStr',
+          width: 120,
+          scopedSlots: {
+            customRender: 'submitStatus'
+          }
+        },
+        {
+          title: '创建人',
+          dataIndex: 'creatorName',
+          width: 100
+        },
+        {
+          title: '创建日期',
+          dataIndex: 'createDate',
+          width: 120,
+          customRender: createDate => moment(createDate).format('YYYY-MM-DD')
+        },
+        {
+          title: '分支中心',
+          dataIndex: 'centerName',
+          width: 200
+        }, {
+          title: '操作',
+          dataIndex: 'action',
+          width: 100,
+          className: 'operation',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        return getSFJxDataList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res;
+        });
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+
+      // custom table alert & rowSelection
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = [];
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      scroll: false,
+      optionAlertShow: false,
+      form: this.$form.createForm(this),
+    };
+  },
+  created() {
+    this.scroll = {
+      y: (window.screen.height - 368) + "px"
+    }
+  },
+  mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  },
+  filters: {
+    statusFilter(type) {
+      return statusMap[type].text;
+    },
+    statusTypeFilter(type) {
+      return statusMap[type].status;
+    },
+    visitFilter(type) {
+      return visitMap[type].text;
+    },
+    visitTypeFilter(type) {
+      return visitMap[type].status;
+    }
+  },
+  methods: {
+    modifyName(name) {
+      return name.replace(/(.)(.*)/, (_, $1, $2) => $1 + '*'.repeat($2.length))
+    },
+    clearForm() {
+      this.queryParam = {}
+      this.dateArr = []
+    },
+    tableSearch(type) {
+      this.queryParam.queryType = type
+      this.$refs.table.refresh();
+      this.advanced = false;
+    },
+    refreshTable() {
+      this.advanced = false;
+      this.$refs.table.refresh();
+    },
+    showUser(record) {
+      this.$refs.detailModal.show(record);
+    },
+    exec(record) {
+      console.log(record)
+      if(record.type === 7){
+        this.$router.push('/icon/jxjzq/' + record.patientBasisId)
+      }else{
+        this.$router.push('/jxjzq/' + record.patientBasisId)
+      }
+    },
+    handleOk() {
+      this.$refs.table.refresh();
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    toggleAdvanced() {
+      this.advanced = !this.advanced;
+    },
+    changeTime(time) {
+      this.dateArr = time;
+      this.queryParam.createDateStart = moment(time[0]).format('YYYY-MM-DD')
+      this.queryParam.createDateEnd = moment(time[1]).format('YYYY-MM-DD')
+    },
+  }
+};
+</script>
+<style lang="less" scoped>
+.ant-table td {
+  white-space: nowrap;
+}
+
+/deep/th.operation {
+  text-align: center !important;
+}
+
+/deep/.ant-table-tbody>tr>td.operation {
+  text-align: center !important;
+}
+
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px
+}
+
+/deep/.ant-table-row:hover .progressTag .ant-progress-inner {
+  background-color: #ffffff !important;
+}
+
+.progressTag {
+  display: inline-block;
+  width: 250px;
+
+  /deep/ .progressTagContent {
+    display: inline-block;
+    width: 80px;
+    margin-right: 5px;
+  }
+
+  /deep/ .progressTagTitle {
+    font-size: 12px;
+    text-align: center;
+    color: #000;
+    margin-bottom: 0;
+    margin-right: 15px;
+    display: inline-block;
+  }
+
+  /deep/ .progressTag .anticon {
+    color: #4bc5ac;
+    font-size: 18px;
+    vertical-align: bottom;
+  }
+
+  /deep/ .ant-progress-inner {
+    background-color: #e5f6ff;
+  }
+
+  /deep/ .progressTag .ant-progress-span {
+    color: rgb(0, 160, 233);
+  }
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+
+.userName {
+  color: #1fb2fa;
+  margin: 0;
+
+  &:active,
+  &:hover {
+    text-decoration: underline;
+    text-underline-position: under;
+    text-decoration-color: #1fb2fa;
+    cursor: pointer;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/acute/modules/CreateForm.vue b/src/views/acute/modules/CreateForm.vue
new file mode 100644
index 0000000000..d4f8b34b73
--- /dev/null
+++ b/src/views/acute/modules/CreateForm.vue
@@ -0,0 +1,145 @@
+<template>
+  <a-modal :title="options.title" :width="700" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :destroyOnClose="destroyOnClose" :centered="centered" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item>
+          <a-input-search placeholder="搜索患者姓名,身份证号" @search="onSearch" v-decorator="['card', { rules: [{ required: true , message: '该选项必填'}] }]" enterButton autocomplete="off" />
+        </a-form-item>
+        <a-table v-if="data.length > 0" :columns="columns" :rowSelection="rowSelection" :dataSource="data" :pagination="pagination" rowKey="patientId" @change="handleTableChange">
+        </a-table>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+import { getPatientDataList } from '@/api/patient'
+import { createSFJx } from '@/api/basis'
+import moment from 'moment'
+const columns = [{
+    title: '患者编号',
+    dataIndex: 'code'
+  },
+  {
+    title: '患者姓名',
+    dataIndex: 'name'
+  },
+  {
+    title: '身份证号',
+    dataIndex: 'card'
+  },
+  {
+    title: '联系方式',
+    dataIndex: 'telephone1'
+  }
+];
+export default {
+  data() {
+    return {
+      options: {},
+      residences: [],
+      patientId: undefined,
+      maskClosable: false,
+      data: [],
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 7 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 14 }
+      },
+      visible: false,
+      confirmLoading: false,
+      centered: true,
+      destroyOnClose: true,
+      bodyStyle: {
+        height: '500px',
+        overflow: 'auto'
+      },
+      form: this.$form.createForm(this),
+      requiredRule: { rules: [{ required: true, message: '该选项必填' }] },
+      pagination: {},
+      columns,
+      keyword: ''
+    };
+  },
+  computed: {
+    rowSelection() {
+      const { selectedRowKeys } = this;
+      return {
+        type: 'radio',
+        onChange: (selectedRowKeys, selectedRows) => {
+          this.patientId = selectedRows[0].patientId
+        },
+        getCheckboxProps: record => ({
+          props: {
+            disabled: record.name === 'Disabled User', // Column configuration not to be checked
+            name: record.name
+          }
+        })
+      };
+    }
+  },
+  methods: {
+    add() {
+      this.options.title = '新建急性加重期';
+      this.visible = true;
+      this.data = [];
+      this.patientId = null;
+    },
+    onSearch(value) {
+      this.keyword = value
+      this.getPatientList(1, 5);
+    },
+    handleTableChange(pagination) {
+      console.log(pagination);
+      const pager = { ...this.pagination };
+      pager.current = pagination.current;
+      this.pagination = pager;
+      this.getPatientList(pagination.current, 5);
+    },
+    handleSubmit() {
+      if (!this.patientId) {
+        this.$message.error('请选择患者')
+        return
+      }
+      this.confirmLoading = true
+      const p = new URLSearchParams();
+      p.append('patientId', this.patientId)
+      createSFJx(p).then(res => {
+        this.$emit('ok')
+        this.visible = false
+        this.$message.success(res.msg);
+        this.confirmLoading = false
+      })
+    },
+    handleCancel() {
+      this.visible = false;
+    },
+    getPatientList(pageNumber, pageSize) {
+      const Params = new URLSearchParams();
+      Params.append('pageNumber', pageNumber);
+      Params.append('pageSize', pageSize);
+      Params.append('keyWord', this.keyword);
+      getPatientDataList(Params).then(res => {
+        this.data = res.data;
+        const pagination = { ...this.pagination };
+        pagination.total = res.total;
+        // this.confirmLoading = false;
+        this.pagination = pagination;
+      });
+    }
+  }
+};
+</script>
+<style>
+.ant-modal-header {
+  padding: 12px 24px !important;
+}
+
+.ant-modal-close-x {
+  width: 50px !important;
+  height: 50px !important;
+  line-height: 50px !important;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/acute/modules/StepByStepModal.vue b/src/views/acute/modules/StepByStepModal.vue
new file mode 100644
index 0000000000..4d0b9c7f3c
--- /dev/null
+++ b/src/views/acute/modules/StepByStepModal.vue
@@ -0,0 +1,171 @@
+<template>
+  <a-modal
+    title="分步对话框"
+    :width="640"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @cancel="handleCancel"
+  >
+    <a-spin :spinning="confirmLoading">
+      <a-steps :current="currentStep" :style="{ marginBottom: '28px' }" size="small">
+        <a-step title="基本信息" />
+        <a-step title="配置规则属性" />
+        <a-step title="设定调度周期" />
+      </a-steps>
+      <a-form :form="form">
+        <!-- step1 -->
+        <div v-show="currentStep === 0">
+          <a-form-item
+            label="规则名称"
+            :labelCol="labelCol"
+            :wrapperCol="wrapperCol"
+          >
+            <a-input v-decorator="['name', {rules: [{required: true}]}]" />
+          </a-form-item>
+          <a-form-item
+            label="规则描述"
+            :labelCol="labelCol"
+            :wrapperCol="wrapperCol"
+          >
+            <a-textarea :rows="4" v-decorator="['desc', {rules: [{required: true}]}]"></a-textarea>
+          </a-form-item>
+        </div>
+        <div v-show="currentStep === 1">
+          <a-form-item
+            label="监控对象"
+            :labelCol="labelCol"
+            :wrapperCol="wrapperCol"
+          >
+            <a-select v-decorator="['target', {initialValue: 0, rules: [{required: true}]}]" style="width: 100%">
+              <a-select-option :value="0">表一</a-select-option>
+              <a-select-option :value="1">表二</a-select-option>
+            </a-select>
+          </a-form-item>
+
+          <a-form-item
+            label="规则模板"
+            :labelCol="labelCol"
+            :wrapperCol="wrapperCol"
+          >
+            <a-select v-decorator="['template', { initialValue: 0, rules: [{required: true}]}]" style="width: 100%">
+              <a-select-option :value="0">规则模板一</a-select-option>
+              <a-select-option :value="1">规则模板二</a-select-option>
+            </a-select>
+          </a-form-item>
+
+          <a-form-item
+            label="规则类型"
+            :labelCol="labelCol"
+            :wrapperCol="wrapperCol"
+          >
+            <a-radio-group v-decorator="['type', {initialValue: 0, rules: [{required: true}]}]" style="width: 100%">
+              <a-radio :value="0">强</a-radio>
+              <a-radio :value="1">弱</a-radio>
+            </a-radio-group>
+          </a-form-item>
+        </div>
+
+        <div v-show="currentStep === 2">
+          <a-form-item
+            label="开始时间"
+            :labelCol="labelCol"
+            :wrapperCol="wrapperCol"
+          >
+            <a-date-picker v-decorator="['time', {rules: [{ type: 'object', required: true, message: 'Please select time!' }]}]" style="width: 100%" />
+          </a-form-item>
+          <a-form-item
+            label="调度周期"
+            :labelCol="labelCol"
+            :wrapperCol="wrapperCol"
+          >
+            <a-select v-decorator="['frequency', { initialValue: 'month', rules: [{required: true}]}]" style="width: 100%">
+              <a-select-option value="month">月</a-select-option>
+              <a-select-option value="week">周</a-select-option>
+            </a-select>
+          </a-form-item>
+        </div>
+        <!-- step1 end -->
+      </a-form>
+    </a-spin>
+    <template slot="footer">
+      <a-button key="back" @click="backward" v-if="currentStep > 0" :style="{ float: 'left' }" >上一步</a-button>
+      <a-button key="cancel" @click="handleCancel">取消</a-button>
+      <a-button key="forward" :loading="confirmLoading" type="primary" @click="handleNext(currentStep)">{{ currentStep === 2 && '完成' || '下一步' }}</a-button>
+    </template>
+  </a-modal>
+</template>
+
+<script>
+import pick from 'lodash.pick'
+const stepForms = [
+  ['name', 'desc'],
+  ['target', 'template', 'type'],
+  ['time', 'frequency']
+]
+
+export default {
+  name: 'StepByStepModal',
+  data () {
+    return {
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 7 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 13 }
+      },
+      visible: false,
+      confirmLoading: false,
+      currentStep: 0,
+      mdl: {},
+
+      form: this.$form.createForm(this)
+    }
+  },
+  methods: {
+    edit (record) {
+      this.visible = true
+      const { form: { setFieldsValue } } = this
+      this.$nextTick(() => {
+        setFieldsValue(pick(record, []))
+      })
+    },
+    handleNext (step) {
+      const { form: { validateFieldsAndScroll } } = this
+      const currentStep = step + 1
+      if (currentStep <= 2) {
+        // stepForms
+        validateFieldsAndScroll(stepForms[ this.currentStep ], (errors, values) => {
+          if (!errors) {
+            this.currentStep = currentStep
+          }
+        })
+        return
+      }
+      // last step
+      this.confirmLoading = true
+      validateFieldsAndScroll((errors, values) => {
+        console.log('errors:', errors, 'val:', values)
+        if (!errors) {
+          console.log('values:', values)
+          setTimeout(() => {
+            this.confirmLoading = false
+            this.$emit('ok', values)
+          }, 1500)
+        } else {
+          this.confirmLoading = false
+        }
+      })
+    },
+    backward () {
+      this.currentStep--
+    },
+    handleCancel () {
+      // clear form & currentStep
+      this.visible = false
+      this.currentStep = 0
+    }
+  }
+}
+</script>
diff --git a/src/views/acute/modules/TaskForm.vue b/src/views/acute/modules/TaskForm.vue
new file mode 100644
index 0000000000..474b962d9a
--- /dev/null
+++ b/src/views/acute/modules/TaskForm.vue
@@ -0,0 +1,79 @@
+<template>
+  <a-modal :width="640" :visible="visible" title="任务添加" @ok="handleSubmit" @cancel="visible = false">
+    <a-form @submit="handleSubmit" :form="form">
+      <a-form-item
+        label="任务名称"
+        :labelCol="labelCol"
+        :wrapperCol="wrapperCol"
+      >
+        <a-input v-decorator="['taskName', {rules:[{required: true, message: '请输入任务名称'}]}]" />
+      </a-form-item>
+      <a-form-item
+        label="开始时间"
+        :labelCol="labelCol"
+        :wrapperCol="wrapperCol"
+      >
+        <a-date-picker style="width: 100%" v-decorator="['startTime', {rules:[{required: true, message: '请选择开始时间'}]}]" />
+      </a-form-item>
+      <a-form-item
+        label="任务负责人"
+        :labelCol="labelCol"
+        :wrapperCol="wrapperCol"
+      >
+        <a-select v-decorator="['owner', {rules:[{required: true, message: '请选择开始时间'}]}]">
+          <a-select-option :value="0">付晓晓</a-select-option>
+          <a-select-option :value="1">周毛毛</a-select-option>
+        </a-select>
+      </a-form-item>
+      <a-form-item
+        label="产品描述"
+        :labelCol="labelCol"
+        :wrapperCol="wrapperCol"
+      >
+        <a-textarea v-decorator="['desc']"></a-textarea>
+      </a-form-item>
+    </a-form>
+  </a-modal>
+</template>
+
+<script>
+export default {
+  name: 'TaskForm',
+  data () {
+    return {
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 7 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 13 }
+      },
+
+      visible: false,
+      form: this.$form.createForm(this)
+    }
+  },
+  methods: {
+    add () {
+      this.visible = true
+    },
+    edit (record) {
+      const { form: { setFieldsValue } } = this
+      this.visible = true
+      this.$nextTick(() => {
+        setFieldsValue({ taskName: 'test' })
+      })
+    },
+    handleSubmit () {
+      const { form: { validateFieldsAndScroll } } = this
+      this.visible = true
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          console.log('values', values)
+        }
+      })
+    }
+  }
+}
+</script>
diff --git a/src/views/acute/modules/UserDetail.vue b/src/views/acute/modules/UserDetail.vue
new file mode 100644
index 0000000000..e733b58d20
--- /dev/null
+++ b/src/views/acute/modules/UserDetail.vue
@@ -0,0 +1,353 @@
+<template>
+  <a-modal
+    title="患者详情"
+    :width="800"
+    :bodyStyle="bodyStyle"
+    :maskClosable="maskClosable"
+    :centered="centered"
+    :destroyOnClose="destroyOnClose"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    :footer="null"
+    @cancel="handleCancel"
+  >
+    <a-spin :spinning="confirmLoading">
+      <user-detail :option="patient"></user-detail>
+      <a-tabs defaultActiveKey="1">
+        <a-tab-pane tab="详细信息" key="1">
+          <div class="userCard">
+            <a-row id="userInfo">
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>患者同意注册日期:</span>
+                  {{ patient.registerDate | formDate }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>文化程度:</span>
+                  {{ patient.censusName }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>访视状态:</span>
+                  {{ patient.visit | visitStatus }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>医疗费用支付情况:</span>
+                  {{ patient.payTypeName }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>职业:</span>
+                  {{ patient.workName }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>家庭年收入:</span>
+                  {{ patient.income }}万
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>创建机构:</span>
+                  {{ patient.centerName }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>创建时间:</span>
+                  {{ patient.ceateDate | formDate }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>创建人:</span>
+                  {{ patient.creatorName }}
+                </p>
+              </a-col>
+            </a-row>
+          </div>
+        </a-tab-pane>
+        <a-tab-pane tab="待访视任务" key="2" forceRender>
+          <div class="userCard" v-if="visitTasks.length>0">
+            <div class="followupItem" v-for="item in visitTasks" :key="item.id">
+              <my-icon class="my-icon-huaban" type="iconshijian_huaban" />
+              <p>
+                <span>计划时间:</span>
+                {{item.planDate|formDate}}
+              </p>
+              <p>
+                <span>随访摘要:</span>
+                 {{item.typeName}}
+              </p>
+              <a @click="exec(item.patientBasisId)">
+                <a-button type="primary" size="small" style="float:right;">
+                  <my-icon type="iconxiangqing_huaban" />
+                  执行
+                </a-button>
+              </a>
+            </div>
+          </div>
+          <div v-else class="userCard">
+               <div style="text-align: center;">
+                   <img src="@/assets/noData.png" alt="">
+                   <p>暂无数据</p>
+            </div>
+          </div>
+        </a-tab-pane>
+        <a-tab-pane tab="访视情况" key="3">
+          <div class="userCard" v-if="patientBasisList.length>0">
+            <a-timeline>
+              <a-timeline-item v-for="item in patientBasisList" :key="item.id">
+                <span class="followupDate">{{item.createDate|formDate}}</span>
+                <div class="followupInfoItem">
+                  <div class="followupInfoItemType">
+                    <p>
+                      访视类型:
+                      <span>{{item.type|patientBasisType}}</span>
+                    </p>
+                    <p>访视时间: {{item.wirteDate|formDate}}</p>
+                  </div>
+                  <div class="followupInfoItemPro">
+                      <p>
+                        访视进度:
+                        <span>{{item.executeStatus == 3 ? '已完成' : '未完成'}}</span>
+                      </p>
+                    <!-- <span>访视进度:</span>
+                    <p>
+                      <a-progress  :percent="item.progress" status="active" />
+                    </p> -->
+                  </div>
+                  <a v-if="item.type == 1" @click="basisDetail(item.patientBasisId)">
+                    <a-button type="primary" size="small" style="float:right;margin-top:5px ;">
+                      <my-icon type="iconxiangqing_huaban" />
+                      详情
+                    </a-button>
+                  </a>
+                  <a v-else-if="item.type == 2||item.type == 3" @click="taskDetail(item.patientBasisId)">
+                    <a-button type="primary" size="small" style="float:right;margin-top:5px ;">
+                      <my-icon type="iconxiangqing_huaban" />
+                      详情
+                    </a-button>
+                  </a>
+                  <a v-else-if="item.type == 4" @click="jxjzq(item.patientBasisId)">
+                    <a-button type="primary" size="small" style="float:right;margin-top:5px;">
+                      <my-icon type="iconxiangqing_huaban" />
+                      详情
+                    </a-button>
+                  </a>
+                </div>
+              </a-timeline-item>
+            </a-timeline>
+          </div>
+          <div v-else class="userCard">
+            <div style="text-align: center;">
+                   <img src="@/assets/noData.png" alt="">
+                   <p>暂无数据</p>
+            </div>
+          </div>
+        </a-tab-pane>
+      </a-tabs>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+import { getPatientDetail } from '@/api/patient';
+import UserDetail from './UserDetailTop';
+import { MyIcon } from '@/components/_util/util';
+import moment from 'moment';
+import _ from 'lodash';
+export default {
+  components: {
+    UserDetail,
+    MyIcon
+  },
+  data() {
+    return {
+      patientBasisList: [],
+      visitTasks: [],
+      patient: {},
+      visible: false,
+      confirmLoading: false,
+      centered: true,
+      maskClosable: false,
+      destroyOnClose: true,
+      bodyStyle: {
+        height: '500px',
+        overflow: 'auto',
+        background:"#F8FBFC"
+      }
+    };
+  },
+  filters: {
+    formDate(date) {
+      return moment(date).format('YYYY-MM-DD');
+    },
+    visitStatus(value) {
+      const visitMap = {
+        '1': '忽略',
+        '2': '未执行',
+        '3': '执行中',
+        '4': '已完成'
+      };
+      return visitMap[value];
+    },
+    patientBasisType(type){
+      const patientBasisTypeMap=['','支扩基线','半年随访','年访视','急性加重期随访', '', 'ICON常规随访', '急性加重期随访', 'ICON基线']
+      return patientBasisTypeMap[type];
+    }
+  },
+  methods: {
+    show(value) {
+      this.visible = true;
+      this.confirmLoading = true;
+      const Params = new URLSearchParams();
+      Params.append('patientId', value.patientId);
+      getPatientDetail(Params).then(res => {
+          this.patient = res.data.patient;
+          this.patientBasisList = res.data.patientBasisList;
+          this.visitTasks = res.data.visitTasks;
+        this.confirmLoading = false;
+      });
+    },
+    handleCancel() {
+      this.visible = false;
+    },
+    basisDetail(id) {
+      this.visible = false
+      this.$router.push('/list/basis/' + id)
+    },
+    taskDetail(id) {
+      this.visible = false
+      this.$router.push('/list/task/' + id)
+    },
+    jxjzq(id) {
+      this.visible = false
+      this.$router.push('/jxjzq/' + id)
+    },
+    exec(id) {
+      this.visible = false
+      this.$router.push('/list/task/' + id)
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+/deep/ .ant-modal-body {
+  background-color: #fdfdfd;
+}
+.userCard {
+  background: #ffffff;
+  padding: 20px;
+  border: 1px solid #f1f1f1;
+  padding-right:0px; 
+  height: 300px;
+  overflow: auto;
+  #userInfo {
+    p.userInfoItem {
+      color: #000000;
+      span {
+        color: #888888;
+      }
+    }
+  }
+  .followupItem {
+    border-bottom: 1px dashed #f3f3f3;
+    padding-bottom: 10px;
+    margin-bottom: 15px;
+    padding-right: 20px;
+    .my-icon-huaban {
+      color: #26adfa;
+      font-size: 30px;
+      margin-right: 10px;
+      vertical-align: middle;
+    }
+    p {
+      display: inline-block;
+      margin: 0px;
+      margin-right: 40px;
+      color: #000000;
+      span {
+        color: #888888;
+      }
+    }
+  }
+  span.followupDate{
+      display: inline-block;
+    border: 1px solid #dddddd;
+    padding: 5px 10px;
+    font-size: 12px;
+    border-radius: 15px;
+    vertical-align: top;
+    position: relative;
+    top: -3px;
+  }
+  div.followupInfoItem{
+   display: inline-block;
+    width: 590px;
+    background: #F1F8FE;
+    margin-left: 20px;
+    position: relative;
+    top: -11px;
+    padding: 5px 20px;
+     div.followupInfoItemType{
+       display: inline-block;
+       width: 200px;
+       font-size: 12px;
+       p:first-child{
+             color: #000;
+            margin-bottom: 5px;
+            font-size: 14px;
+            span{
+              color: #F0C070;
+            }
+       }
+       p:nth-child(2){
+             margin: 0;
+       }
+     }
+     div.followupInfoItemPro{
+       display: inline-block;
+       width: 200px;
+       vertical-align: top;
+       span{
+         font-size: 14px;
+         color: #000;
+       }
+       p{
+         width: 100px;
+         display: inline-block;
+         margin: 0;
+         margin-left: 10px;
+         /deep/ .ant-progress-inner{
+           background-color:#C4C4C4;
+         }
+       }
+     }
+  }
+
+}
+
+::-webkit-scrollbar-track-piece { //滚动条凹槽的颜色,还可以设置边框属性
+background-color:#f8f8f8;
+}
+::-webkit-scrollbar {//滚动条的宽度
+width:5px;
+height:9px;
+}
+::-webkit-scrollbar-thumb {//滚动条的设置
+background-color:#dddddd;
+background-clip:padding-box;
+min-height:28px;
+}
+::-webkit-scrollbar-thumb:hover {
+background-color:#bbb;
+}
+</style>
diff --git a/src/views/acute/modules/UserDetailTop.vue b/src/views/acute/modules/UserDetailTop.vue
new file mode 100644
index 0000000000..55d96eb974
--- /dev/null
+++ b/src/views/acute/modules/UserDetailTop.vue
@@ -0,0 +1,171 @@
+<template>
+  <div class="userDetail" :option="option">
+    <div class="userDetailTop">
+      <img src="../../../assets/woman.png" alt="" v-if="option.sex == 0" />
+      <img src="../../../assets/man.png" alt="" v-else />
+      <div class="userDetailInfo">
+        <h4>
+          {{ option.name }}
+          <span class="userDetailCard">{{ option.card }}</span>
+        </h4>
+        <p>
+          <span class="userDetailAge" :class="option.sex == 0 ? 'womenBg' : ''">
+            <a-icon :type="option.sex == 1 ? 'man':'woman'" />
+            {{getAge}}岁
+          </span>
+          <span class="userDetailNation">{{option.nationName}}</span>
+        </p>
+      </div>
+    </div>
+    <div class="userDetailContent">
+      <p class="userDetailItem">
+        <span class="userDetailItemTitle">患者编号</span>
+        <span class="userDetailItemInfo"> {{option.code}}</span>
+      </p>
+      <p class="userDetailItem">
+        <span class="userDetailItemTitle">联系电话</span>
+        <span class="userDetailItemInfo">{{option.telephone1}}</span>
+      </p>
+      <p class="userDetailItem">
+        <span class="userDetailItemTitle">出生日期</span>
+        <span class="userDetailItemInfo">{{birthDay}}</span>
+      </p>
+      <p class="userDetailItem">
+        <span class="userDetailItemTitle">居住地</span>
+        <span class="userDetailItemInfo">{{option.address}}</span>
+      </p>
+    </div>
+  </div>
+</template>
+
+<script>
+import _ from 'lodash'
+export default {
+  data() {
+    return {};
+  },
+  props: {
+    option: {
+      type: Object,
+      default: {}
+    }
+  },
+  mounted() {},
+  methods: {
+  },
+  computed:{
+    birthDay() {
+      if (_.isEmpty(this.option)) {
+        return ''
+      }
+      let card = this.option.card;
+      let birthDay = ''
+      if (card.length == 15) {
+        birthDay = card.substr(6,6).replace(/(.{4})(.{2})/,"$1-$2-")
+      } else if (card.length == 18) {
+        birthDay = card.substr(6,8).replace(/(.{4})(.{2})/,"$1-$2-")
+      }
+      return birthDay
+    },
+    getAge() {
+      if(_.isEmpty(this.option)){
+        return ''
+      }
+      var identityCard=this.option.card;
+      var len = (identityCard + '').length;
+      if (len == 0) {
+        return 0;
+      } else {
+        if (len != 15 && len != 18) {
+          //身份证号码只能为15位或18位其它不合法
+          return 0;
+        }
+      }
+      var strBirthday = '';
+      if (len == 18) {
+        //处理18位的身份证号码从号码中得到生日和性别代码
+        strBirthday = identityCard.substr(6, 4) + '/' + identityCard.substr(10, 2) + '/' + identityCard.substr(12, 2);
+      }
+      if (len == 15) {
+        strBirthday = '19' + identityCard.substr(6, 2) + '/' + identityCard.substr(8, 2) + '/' + identityCard.substr(10, 2);
+      }
+      //时间字符串里,必须是“/”
+      var birthDate = new Date(strBirthday);
+      var nowDateTime = new Date();
+      var age = nowDateTime.getFullYear() - birthDate.getFullYear();
+      //再考虑月、天的因素;.getMonth()获取的是从0开始的,这里进行比较,不需要加1
+      if (nowDateTime.getMonth() < birthDate.getMonth() || (nowDateTime.getMonth() == birthDate.getMonth() && nowDateTime.getDate() < birthDate.getDate())) {
+        age--;
+      }
+      return age;
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.userDetail {
+  border: 1px solid #f8f8f8;
+  border-top: 4px solid #168ffd;
+  padding: 15px 25px;
+  background-color: #ffffff;
+  .userDetailTop {
+    img {
+      display: inline-block;
+      vertical-align: top;
+      width: 60px;
+      height: 60px;
+    }
+    .userDetailInfo {
+      display: inline-block;
+      padding-top: 5px;
+      padding-left: 15px;
+      h4 {
+        font-size: 18px;
+        margin-bottom: 0px;
+        span {
+          font-weight: normal;
+          font-size: 17px;
+          margin-left: 10px;
+          display: inline-block;
+        }
+      }
+      p {
+        .womenBg {
+          background-color: #fd94dc!important;
+        }
+        .userDetailAge {
+          display: inline-block;
+          background-color: #96dcfd;
+          color: #ffffff;
+          padding: 0px 10px;
+          border-radius: 3px;
+          .anticon {
+            margin-right: 5px;
+          }
+        }
+        .userDetailNation {
+          display: inline-block;
+          background-color: #e8e8e8;
+          padding: 0px 10px;
+          border-radius: 3px;
+          margin-left: 10px;
+        }
+      }
+    }
+  }
+  .userDetailContent {
+    margin-top: 20px;
+    overflow: hidden;
+    .userDetailItem {
+      display: inline-block;
+      width: 20%;
+      color: #000000;
+      vertical-align: top;
+      .userDetailItemTitle {
+        display: block;
+        color: #a9a9a9;
+      }
+    }
+  }
+}
+</style>
diff --git a/src/views/acute/modules/Visit.vue b/src/views/acute/modules/Visit.vue
new file mode 100644
index 0000000000..b63bd0bbff
--- /dev/null
+++ b/src/views/acute/modules/Visit.vue
@@ -0,0 +1,131 @@
+<template>
+  <a-popover trigger="click" v-model="visible">
+    <div class="visitInfo" slot="content">
+      <a-timeline>
+        <a-timeline-item>
+          <div slot="dot">
+            <div class="visitContent">
+              <span class="visitYear"><a-icon type="file-text" /></span>
+              <span class="visitYearText">第1年</span>
+            </div>
+          </div>
+          <div class="visiItem">
+            <p class="visiItemTitle">
+              <span class="visiItemName">半年随访</span>
+              <span class="visiItemTime">
+                <a-icon type="clock-circle" />
+                2019-08-01
+              </span>
+            </p>
+            <div class="visiItemPro"><a-progress :percent="30" showInfo="false" /></div>
+          </div>
+        </a-timeline-item>
+        <a-timeline-item>
+          <div class="visiItem">
+            <p class="visiItemTitle">
+              <span class="visiItemName">半年随访</span>
+              <span class="visiItemTime">
+                <a-icon type="clock-circle" />
+                2019-08-01
+              </span>
+            </p>
+            <div class="visiItemPro"><a-progress :percent="30" showInfo="false" /></div>
+          </div>
+        </a-timeline-item>
+        <a-timeline-item color="red">
+          <div class="visiItem">
+            <p class="visiItemTitle">
+              <span class="visiItemName">半年随访</span>
+              <span class="visiItemTime">
+                <a-icon type="clock-circle" />
+                2019-08-01
+              </span>
+            </p>
+            <div class="visiItemPro"><a-progress :percent="30" showInfo="false" /></div>
+          </div>
+        </a-timeline-item>
+        <a-timeline-item>
+          <div slot="dot">
+            <div class="visitContent">
+              <span class="visitYear"><a-icon type="file-text" /></span>
+              <span class="visitYearText">第1年</span>
+            </div>
+          </div>
+          <div class="visiItem">
+            <p class="visiItemTitle">
+              <span class="visiItemName">半年随访</span>
+              <span class="visiItemTime">
+                <a-icon type="clock-circle" />
+                2019-08-01
+              </span>
+            </p>
+            <div class="visiItemPro"><a-progress :percent="30" showInfo="false" /></div>
+          </div>
+        </a-timeline-item>
+      </a-timeline>
+    </div>
+    <span>更多</span>
+  </a-popover>
+</template>
+
+<script>
+import _ from 'lodash';
+export default {
+  data() {
+    return {
+      visible: false
+    };
+  },
+  filters: {},
+  methods: {
+    hide() {
+      console.log(111);
+      this.visible = false;
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+  .visitInfo{
+    padding:20px;
+    padding-bottom: 0px;
+    padding-top: 40px;
+    height: 200px;
+    overflow: auto;
+  }
+.visitContent {
+  .visitYear {
+    display: block;
+    background: #cbe5f7;
+    border-radius: 50%;
+    font-size: 14px;
+    color: #54bde7;
+    height: 25px;
+    width: 25px;
+    text-align: center;
+    line-height: 25px;
+  }
+  .visitYearText {
+    display: block;
+    font-size: 12px;
+  }
+}
+.visiItem {
+  height: 50px;
+  width: 194px;
+  padding: 5px;
+  border: 1px solid #dddddd;
+  margin-left: 10px;
+  position: relative;
+  top:-15px;
+  .visiItemTitle {
+    margin: 0;
+    overflow: hidden;
+    .visiItemTime {
+      font-size: 12px;
+      float: right;
+      color: #9dadb3;
+    }
+  }
+}
+</style>
diff --git a/src/views/acute/search/Applications.vue b/src/views/acute/search/Applications.vue
new file mode 100644
index 0000000000..d5b3bd18c3
--- /dev/null
+++ b/src/views/acute/search/Applications.vue
@@ -0,0 +1,186 @@
+<template>
+  <div>
+    <a-card :bordered="false" class="ant-pro-components-tag-select">
+      <a-form :form="form" layout="inline">
+        <standard-form-row title="所属类目" block style="padding-bottom: 11px;">
+          <a-form-item>
+            <tag-select>
+              <tag-select-option value="Category1">类目一</tag-select-option>
+              <tag-select-option value="Category2">类目二</tag-select-option>
+              <tag-select-option value="Category3">类目三</tag-select-option>
+              <tag-select-option value="Category4">类目四</tag-select-option>
+              <tag-select-option value="Category5">类目五</tag-select-option>
+              <tag-select-option value="Category6">类目六</tag-select-option>
+              <tag-select-option value="Category7">类目七</tag-select-option>
+              <tag-select-option value="Category8">类目八</tag-select-option>
+              <tag-select-option value="Category9">类目九</tag-select-option>
+              <tag-select-option value="Category10">类目十</tag-select-option>
+            </tag-select>
+          </a-form-item>
+        </standard-form-row>
+
+        <standard-form-row title="其它选项" grid last>
+          <a-row>
+            <a-col :lg="8" :md="10" :sm="10" :xs="24">
+              <a-form-item :wrapper-col="{ sm: { span: 16 }, xs: { span: 24 } }" label="作者">
+                <a-select
+                  style="max-width: 200px; width: 100%;"
+                  mode="multiple"
+                  placeholder="不限"
+                  v-decorator="['author']"
+                  @change="handleChange"
+                >
+                  <a-select-option value="lisa">王昭君</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="8" :md="10" :sm="10" :xs="24">
+              <a-form-item :wrapper-col="{ sm: { span: 16 }, xs: { span: 24 } }" label="好评度">
+                <a-select
+                  style="max-width: 200px; width: 100%;"
+                  placeholder="不限"
+                  v-decorator="['rate']"
+                >
+                  <a-select-option value="good">优秀</a-select-option>
+                  <a-select-option value="normal">普通</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+          </a-row>
+        </standard-form-row>
+      </a-form>
+    </a-card>
+
+    <div class="ant-pro-pages-list-applications-filterCardList">
+      <a-list :loading="loading" :data-source="data" :grid="{ gutter: 24, xl: 4, lg: 3, md: 3, sm: 2, xs: 1 }" style="margin-top: 24px;">
+        <a-list-item slot="renderItem" slot-scope="item">
+          <a-card :body-style="{ paddingBottom: 20 }" hoverable>
+            <a-card-meta :title="item.title">
+              <template slot="avatar">
+                <a-avatar size="small" :src="item.avatar"/>
+              </template>
+            </a-card-meta>
+            <template slot="actions">
+              <a-tooltip title="下载">
+                <a-icon type="download" />
+              </a-tooltip>
+              <a-tooltip title="编辑">
+                <a-icon type="edit" />
+              </a-tooltip>
+              <a-tooltip title="分享">
+                <a-icon type="share-alt" />
+              </a-tooltip>
+              <a-dropdown>
+                <a class="ant-dropdown-link">
+                  <a-icon type="ellipsis" />
+                </a>
+                <a-menu slot="overlay">
+                  <a-menu-item>
+                    <a href="javascript:;">1st menu item</a>
+                  </a-menu-item>
+                  <a-menu-item>
+                    <a href="javascript:;">2nd menu item</a>
+                  </a-menu-item>
+                  <a-menu-item>
+                    <a href="javascript:;">3rd menu item</a>
+                  </a-menu-item>
+                </a-menu>
+              </a-dropdown>
+            </template>
+            <div class="">
+              <card-info active-user="100" new-user="999"></card-info>
+            </div>
+          </a-card>
+        </a-list-item>
+      </a-list>
+    </div>
+  </div>
+</template>
+
+<script>
+import moment from 'moment'
+import { TagSelect, StandardFormRow, Ellipsis, AvatarList } from '@/components'
+import CardInfo from './components/CardInfo'
+const TagSelectOption = TagSelect.Option
+const AvatarListItem = AvatarList.AvatarItem
+
+export default {
+  components: {
+    AvatarList,
+    AvatarListItem,
+    Ellipsis,
+    TagSelect,
+    TagSelectOption,
+    StandardFormRow,
+    CardInfo
+  },
+  data () {
+    return {
+      data: [],
+      form: this.$form.createForm(this),
+      loading: true
+    }
+  },
+  filters: {
+    fromNow (date) {
+      return moment(date).fromNow()
+    }
+  },
+  mounted () {
+    this.getList()
+  },
+  methods: {
+    handleChange (value) {
+      console.log(`selected ${value}`)
+    },
+    getList () {
+      this.$http.get('/list/article', { params: { count: 8 } }).then(res => {
+        console.log('res', res)
+        this.data = res.result
+        this.loading = false
+      })
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.ant-pro-components-tag-select {
+  /deep/ .ant-pro-tag-select .ant-tag {
+    margin-right: 24px;
+    padding: 0 8px;
+    font-size: 14px;
+  }
+}
+.ant-pro-pages-list-projects-cardList {
+  margin-top: 24px;
+
+  /deep/ .ant-card-meta-title {
+    margin-bottom: 4px;
+  }
+
+  /deep/ .ant-card-meta-description {
+    height: 44px;
+    overflow: hidden;
+    line-height: 22px;
+  }
+
+  .cardItemContent {
+    display: flex;
+    height: 20px;
+    margin-top: 16px;
+    margin-bottom: -4px;
+    line-height: 20px;
+
+    > span {
+      flex: 1 1;
+      color: rgba(0,0,0,.45);
+      font-size: 12px;
+    }
+
+    /deep/ .ant-pro-avatar-list {
+      flex: 0 1 auto;
+    }
+  }
+}
+</style>
diff --git a/src/views/acute/search/Article.vue b/src/views/acute/search/Article.vue
new file mode 100644
index 0000000000..531c9a6271
--- /dev/null
+++ b/src/views/acute/search/Article.vue
@@ -0,0 +1,185 @@
+<template>
+  <div>
+    <a-card :bordered="false" class="ant-pro-components-tag-select">
+      <a-form :form="form" layout="inline">
+        <standard-form-row title="所属类目" block style="padding-bottom: 11px;">
+          <a-form-item>
+            <tag-select>
+              <tag-select-option value="Category1">类目一</tag-select-option>
+              <tag-select-option value="Category2">类目二</tag-select-option>
+              <tag-select-option value="Category3">类目三</tag-select-option>
+              <tag-select-option value="Category4">类目四</tag-select-option>
+              <tag-select-option value="Category5">类目五</tag-select-option>
+              <tag-select-option value="Category6">类目六</tag-select-option>
+              <tag-select-option value="Category7">类目七</tag-select-option>
+              <tag-select-option value="Category8">类目八</tag-select-option>
+              <tag-select-option value="Category9">类目九</tag-select-option>
+              <tag-select-option value="Category10">类目十</tag-select-option>
+            </tag-select>
+          </a-form-item>
+        </standard-form-row>
+
+        <standard-form-row title="owner" grid>
+          <a-row>
+            <a-col :md="24">
+              <a-form-item :wrapper-col="{ span: 24 }">
+                <a-select
+                  style="max-width: 268px; width: 100%;"
+                  mode="multiple"
+                  placeholder="选择 onwer"
+                  v-decorator="['owner']"
+                  @change="handleChange"
+                >
+                  <a-select-option v-for="item in owners" :key="item.id">{{ item.name }}</a-select-option>
+                </a-select>
+                <a class="list-articles-trigger" @click="setOwner">只看自己的</a>
+              </a-form-item>
+            </a-col>
+          </a-row>
+        </standard-form-row>
+
+        <standard-form-row title="其它选项" grid last>
+          <a-row :gutter="16">
+            <a-col :xs="24" :sm="24" :md="12" :lg="10" :xl="8">
+              <a-form-item label="活跃用户" :wrapper-col="{ xs: 24, sm: 24, md: 12 }">
+                <a-select placeholder="不限" style="max-width: 200px; width: 100%;">
+                  <a-select-option value="李三">李三</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <a-col :xs="24" :sm="24" :md="12" :lg="10" :xl="8">
+              <a-form-item label="好评度" :wrapper-col="{ xs: 24, sm: 24, md: 12 }">
+                <a-select placeholder="不限" style="max-width: 200px; width: 100%;">
+                  <a-select-option value="优秀">优秀</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+          </a-row>
+        </standard-form-row>
+      </a-form>
+    </a-card>
+
+    <a-card style="margin-top: 24px;" :bordered="false">
+      <a-list
+        size="large"
+        rowKey="id"
+        :loading="loading"
+        itemLayout="vertical"
+        :dataSource="data"
+      >
+        <a-list-item :key="item.id" slot="renderItem" slot-scope="item">
+          <template slot="actions">
+            <icon-text type="star-o" :text="item.star" />
+            <icon-text type="like-o" :text="item.like" />
+            <icon-text type="message" :text="item.message" />
+          </template>
+          <a-list-item-meta>
+            <a slot="title" href="https://vue.ant.design/">{{ item.title }}</a>
+            <template slot="description">
+              <span>
+                <a-tag>Ant Design</a-tag>
+                <a-tag>设计语言</a-tag>
+                <a-tag>蚂蚁金服</a-tag>
+              </span>
+            </template>
+          </a-list-item-meta>
+          <article-list-content :description="item.description" :owner="item.owner" :avatar="item.avatar" :href="item.href" :updateAt="item.updatedAt" />
+        </a-list-item>
+        <div slot="footer" v-if="data.length > 0" style="text-align: center; margin-top: 16px;">
+          <a-button @click="loadMore" :loading="loadingMore">加载更多</a-button>
+        </div>
+      </a-list>
+    </a-card>
+  </div>
+</template>
+
+<script>
+import { TagSelect, StandardFormRow, ArticleListContent } from '@/components'
+import IconText from './components/IconText'
+const TagSelectOption = TagSelect.Option
+
+const owners = [
+  {
+    id: 'wzj',
+    name: '我自己'
+  },
+  {
+    id: 'wjh',
+    name: '吴家豪'
+  },
+  {
+    id: 'zxx',
+    name: '周星星'
+  },
+  {
+    id: 'zly',
+    name: '赵丽颖'
+  },
+  {
+    id: 'ym',
+    name: '姚明'
+  }
+]
+
+export default {
+  components: {
+    TagSelect,
+    TagSelectOption,
+    StandardFormRow,
+    ArticleListContent,
+    IconText
+  },
+  data () {
+    return {
+      owners,
+      loading: true,
+      loadingMore: false,
+      data: [],
+      form: this.$form.createForm(this)
+    }
+  },
+  mounted () {
+    this.getList()
+  },
+  methods: {
+    handleChange (value) {
+      console.log(`selected ${value}`)
+    },
+    getList () {
+      this.$http.get('/list/article').then(res => {
+        console.log('res', res)
+        this.data = res.result
+        this.loading = false
+      })
+    },
+    loadMore () {
+      this.loadingMore = true
+      this.$http.get('/list/article').then(res => {
+        this.data = this.data.concat(res.result)
+      }).finally(() => {
+        this.loadingMore = false
+      })
+    },
+    setOwner () {
+      const { form: { setFieldsValue } } = this
+      setFieldsValue({
+        owner: ['wzj']
+      })
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.ant-pro-components-tag-select {
+  /deep/ .ant-pro-tag-select .ant-tag {
+    margin-right: 24px;
+    padding: 0 8px;
+    font-size: 14px;
+  }
+}
+
+.list-articles-trigger {
+  margin-left: 12px;
+}
+</style>
diff --git a/src/views/acute/search/Projects.vue b/src/views/acute/search/Projects.vue
new file mode 100644
index 0000000000..28a4633801
--- /dev/null
+++ b/src/views/acute/search/Projects.vue
@@ -0,0 +1,168 @@
+<template>
+  <div>
+    <a-card :bordered="false" class="ant-pro-components-tag-select">
+      <a-form :form="form" layout="inline">
+        <standard-form-row title="所属类目" block style="padding-bottom: 11px;">
+          <a-form-item>
+            <tag-select>
+              <tag-select-option value="Category1">类目一</tag-select-option>
+              <tag-select-option value="Category2">类目二</tag-select-option>
+              <tag-select-option value="Category3">类目三</tag-select-option>
+              <tag-select-option value="Category4">类目四</tag-select-option>
+              <tag-select-option value="Category5">类目五</tag-select-option>
+              <tag-select-option value="Category6">类目六</tag-select-option>
+              <tag-select-option value="Category7">类目七</tag-select-option>
+              <tag-select-option value="Category8">类目八</tag-select-option>
+              <tag-select-option value="Category9">类目九</tag-select-option>
+              <tag-select-option value="Category10">类目十</tag-select-option>
+            </tag-select>
+          </a-form-item>
+        </standard-form-row>
+
+        <standard-form-row title="其它选项" grid last>
+          <a-row>
+            <a-col :lg="8" :md="10" :sm="10" :xs="24">
+              <a-form-item :wrapper-col="{ sm: { span: 16 }, xs: { span: 24 } }" label="作者">
+                <a-select
+                  style="max-width: 200px; width: 100%;"
+                  mode="multiple"
+                  placeholder="不限"
+                  v-decorator="['author']"
+                  @change="handleChange"
+                >
+                  <a-select-option value="lisa">王昭君</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="8" :md="10" :sm="10" :xs="24">
+              <a-form-item :wrapper-col="{ sm: { span: 16 }, xs: { span: 24 } }" label="好评度">
+                <a-select
+                  style="max-width: 200px; width: 100%;"
+                  placeholder="不限"
+                  v-decorator="['rate']"
+                >
+                  <a-select-option value="good">优秀</a-select-option>
+                  <a-select-option value="normal">普通</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+          </a-row>
+        </standard-form-row>
+      </a-form>
+    </a-card>
+
+    <div class="ant-pro-pages-list-projects-cardList">
+      <a-list :loading="loading" :data-source="data" :grid="{ gutter: 24, xl: 4, lg: 3, md: 3, sm: 2, xs: 1 }">
+        <a-list-item slot="renderItem" slot-scope="item">
+          <a-card class="ant-pro-pages-list-projects-card" hoverable>
+            <img slot="cover" :src="item.cover" :alt="item.title" />
+            <a-card-meta :title="item.title">
+              <template slot="description">
+                <ellipsis :length="50">{{ item.description }}</ellipsis>
+              </template>
+            </a-card-meta>
+            <div class="cardItemContent">
+              <span>{{ item.updatedAt | fromNow }}</span>
+              <div class="avatarList">
+                <avatar-list size="mini">
+                  <avatar-list-item
+                    v-for="(member, i) in item.members"
+                    :key="`${item.id}-avatar-${i}`"
+                    :src="member.avatar"
+                    :tips="member.name"
+                  />
+                </avatar-list>
+              </div>
+            </div>
+          </a-card>
+        </a-list-item>
+      </a-list>
+    </div>
+  </div>
+</template>
+
+<script>
+import moment from 'moment'
+import { TagSelect, StandardFormRow, Ellipsis, AvatarList } from '@/components'
+const TagSelectOption = TagSelect.Option
+const AvatarListItem = AvatarList.AvatarItem
+
+export default {
+  components: {
+    AvatarList,
+    AvatarListItem,
+    Ellipsis,
+    TagSelect,
+    TagSelectOption,
+    StandardFormRow
+  },
+  data () {
+    return {
+      data: [],
+      form: this.$form.createForm(this),
+      loading: true
+    }
+  },
+  filters: {
+    fromNow (date) {
+      return moment(date).fromNow()
+    }
+  },
+  mounted () {
+    this.getList()
+  },
+  methods: {
+    handleChange (value) {
+      console.log(`selected ${value}`)
+    },
+    getList () {
+      this.$http.get('/list/article', { params: { count: 8 } }).then(res => {
+        console.log('res', res)
+        this.data = res.result
+        this.loading = false
+      })
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.ant-pro-components-tag-select {
+  /deep/ .ant-pro-tag-select .ant-tag {
+    margin-right: 24px;
+    padding: 0 8px;
+    font-size: 14px;
+  }
+}
+.ant-pro-pages-list-projects-cardList {
+  margin-top: 24px;
+
+  /deep/ .ant-card-meta-title {
+    margin-bottom: 4px;
+  }
+
+  /deep/ .ant-card-meta-description {
+    height: 44px;
+    overflow: hidden;
+    line-height: 22px;
+  }
+
+  .cardItemContent {
+    display: flex;
+    height: 20px;
+    margin-top: 16px;
+    margin-bottom: -4px;
+    line-height: 20px;
+
+    > span {
+      flex: 1 1;
+      color: rgba(0,0,0,.45);
+      font-size: 12px;
+    }
+
+    /deep/ .ant-pro-avatar-list {
+      flex: 0 1 auto;
+    }
+  }
+}
+</style>
diff --git a/src/views/acute/search/SearchLayout.vue b/src/views/acute/search/SearchLayout.vue
new file mode 100644
index 0000000000..345ce069d1
--- /dev/null
+++ b/src/views/acute/search/SearchLayout.vue
@@ -0,0 +1,78 @@
+<template>
+  <div class="search-content">
+    <router-view />
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'SearchLayout',
+  data () {
+    return {
+      tabs: {
+        items: [
+          {
+            key: '1',
+            title: '文章'
+          },
+          {
+            key: '2',
+            title: '项目'
+          },
+          {
+            key: '3',
+            title: '应用'
+          }
+        ],
+        active: () => {
+          switch (this.$route.path) {
+            case '/list/search/article':
+              return '1'
+            case '/list/search/project':
+              return '2'
+            case '/list/search/application':
+              return '3'
+            default:
+              return '1'
+          }
+        },
+        callback: (key) => {
+          switch (key) {
+            case '1':
+              this.$router.push('/list/search/article')
+              break
+            case '2':
+              this.$router.push('/list/search/project')
+              break
+            case '3':
+              this.$router.push('/list/search/application')
+              break
+            default:
+              this.$router.push('/workplace')
+          }
+        }
+      },
+      search: true
+    }
+  },
+  computed: {
+
+  },
+  methods: {
+  }
+}
+</script>
+
+<style lang="less" scoped>
+  .search-head{
+    background-color: #fff;
+    margin: -25px -24px -24px;
+    .search-input{
+      text-align: center;
+      margin-bottom: 16px;
+    }
+  }
+  .search-content{
+    margin-top: 48px;
+  }
+</style>
diff --git a/src/views/acute/search/components/CardInfo.vue b/src/views/acute/search/components/CardInfo.vue
new file mode 100644
index 0000000000..1c54c992eb
--- /dev/null
+++ b/src/views/acute/search/components/CardInfo.vue
@@ -0,0 +1,58 @@
+<template>
+  <div class="cardInfo">
+    <div>
+      <p>活跃用户</p>
+      <p>{{ activeUser }}</p>
+    </div>
+    <div>
+      <p>新增用户</p>
+      <p>{{ newUser }}</p>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'CardInfo',
+  props: {
+    activeUser: {
+      type: [String, Number],
+      default: 0
+    },
+    newUser: {
+      type: [String, Number],
+      default: 0
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+@import "~@/components/index.less";
+@import "~@/utils/utils.less";
+
+.cardInfo {
+
+  .clearfix();
+
+  margin-top: 16px;
+  margin-left: 40px;
+  & > div {
+    position: relative;
+    float: left;
+    width: 50%;
+    text-align: left;
+    p {
+      margin: 0;
+      font-size: 24px;
+      line-height: 32px;
+    }
+    p:first-child {
+      margin-bottom: 4px;
+      color: @text-color-secondary;
+      font-size: 12px;
+      line-height: 20px;
+    }
+  }
+}
+</style>
diff --git a/src/views/acute/search/components/IconText.vue b/src/views/acute/search/components/IconText.vue
new file mode 100644
index 0000000000..c7dd9e01ef
--- /dev/null
+++ b/src/views/acute/search/components/IconText.vue
@@ -0,0 +1,22 @@
+<template>
+  <span>
+    <a-icon :type="type" style="margin-right: 8px" />
+    {{ text }}
+  </span>
+</template>
+
+<script>
+export default {
+  name: 'IconText',
+  props: {
+    'type': {
+      type: String,
+      required: true
+    },
+    text: {
+      type: [String, Number],
+      required: true
+    }
+  }
+}
+</script>
diff --git a/src/views/acute/table/Edit.vue b/src/views/acute/table/Edit.vue
new file mode 100644
index 0000000000..c8a1b51164
--- /dev/null
+++ b/src/views/acute/table/Edit.vue
@@ -0,0 +1,160 @@
+<template>
+  <div>
+    <a-form :form="form" @submit="handleSubmit">
+
+      <a-form-item
+        :labelCol="labelCol"
+        :wrapperCol="wrapperCol"
+        label="规则编号"
+        hasFeedback
+        validateStatus="success"
+      >
+        <a-input
+          placeholder="规则编号"
+          v-decorator="[
+            'no',
+            {rules: [{ required: true, message: '请输入规则编号' }]}
+          ]"
+          :disabled="true"
+        ></a-input>
+      </a-form-item>
+
+      <a-form-item
+        :labelCol="labelCol"
+        :wrapperCol="wrapperCol"
+        label="服务调用次数"
+        hasFeedback
+        validateStatus="success"
+      >
+        <a-input-number :min="1" style="width: 100%" v-decorator="['callNo', {rules: [{ required: true }]}]" />
+      </a-form-item>
+
+      <a-form-item
+        :labelCol="labelCol"
+        :wrapperCol="wrapperCol"
+        label="状态"
+        hasFeedback
+        validateStatus="warning"
+      >
+        <a-select v-decorator="['status', {rules: [{ required: true, message: '请选择状态' }], initialValue: '1'}]">
+          <a-select-option :value="1">Option 1</a-select-option>
+          <a-select-option :value="2">Option 2</a-select-option>
+          <a-select-option :value="3">Option 3</a-select-option>
+        </a-select>
+      </a-form-item>
+
+      <a-form-item
+        :labelCol="labelCol"
+        :wrapperCol="wrapperCol"
+        label="描述"
+        hasFeedback
+        help="请填写一段描述"
+      >
+        <a-textarea :rows="5" placeholder="..." v-decorator="['description', {rules: [{ required: true }]}]" />
+      </a-form-item>
+
+      <a-form-item
+        :labelCol="labelCol"
+        :wrapperCol="wrapperCol"
+        label="更新时间"
+        hasFeedback
+        validateStatus="error"
+      >
+        <a-date-picker
+          style="width: 100%"
+          showTime
+          format="YYYY-MM-DD HH:mm:ss"
+          placeholder="Select Time"
+          v-decorator="['updatedAt']"
+        />
+      </a-form-item>
+
+      <a-form-item
+        v-bind="buttonCol"
+      >
+        <a-row>
+          <a-col span="6">
+            <a-button type="primary" html-type="submit">提交</a-button>
+          </a-col>
+          <a-col span="10">
+            <a-button @click="handleGoBack">返回</a-button>
+          </a-col>
+          <a-col span="8"></a-col>
+        </a-row>
+      </a-form-item>
+    </a-form>
+  </div>
+</template>
+
+<script>
+import moment from 'moment'
+import pick from 'lodash.pick'
+
+export default {
+  name: 'TableEdit',
+  props: {
+    record: {
+      type: [Object, String],
+      default: ''
+    }
+  },
+  data () {
+    return {
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 12 }
+      },
+      buttonCol: {
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 12, offset: 5 }
+        }
+      },
+      form: this.$form.createForm(this),
+      id: 0
+    }
+  },
+  // beforeCreate () {
+  //   this.form = this.$form.createForm(this)
+  // },
+  mounted () {
+    this.$nextTick(() => {
+      this.loadEditInfo(this.record)
+    })
+  },
+  methods: {
+    handleGoBack () {
+      this.$emit('onGoBack')
+    },
+    handleSubmit () {
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((err, values) => {
+        if (!err) {
+          // eslint-disable-next-line no-console
+          console.log('Received values of form: ', values)
+        }
+      })
+    },
+    handleGetInfo () {
+
+    },
+    loadEditInfo (data) {
+      const { form } = this
+      // ajax
+      console.log(`将加载 ${this.id} 信息到表单`)
+      new Promise((resolve) => {
+        setTimeout(resolve, 1500)
+      }).then(() => {
+        const formData = pick(data, ['no', 'callNo', 'status', 'description', 'updatedAt'])
+        formData.updatedAt = moment(data.updatedAt)
+        console.log('formData', formData)
+        form.setFieldsValue(formData)
+      })
+    }
+  }
+}
+</script>
diff --git a/src/views/acute/table/List.vue b/src/views/acute/table/List.vue
new file mode 100644
index 0000000000..8e5da0bce0
--- /dev/null
+++ b/src/views/acute/table/List.vue
@@ -0,0 +1,240 @@
+<template>
+  <div>
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="48">
+          <a-col :md="8" :sm="24">
+            <a-form-item label="规则编号">
+              <a-input v-model="queryParam.id" placeholder=""/>
+            </a-form-item>
+          </a-col>
+          <a-col :md="8" :sm="24">
+            <a-form-item label="使用状态">
+              <a-select v-model="queryParam.status" placeholder="请选择" default-value="0">
+                <a-select-option value="0">全部</a-select-option>
+                <a-select-option value="1">关闭</a-select-option>
+                <a-select-option value="2">运行中</a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <template v-if="advanced">
+            <a-col :md="8" :sm="24">
+              <a-form-item label="调用次数">
+                <a-input-number v-model="queryParam.callNo" style="width: 100%"/>
+              </a-form-item>
+            </a-col>
+            <a-col :md="8" :sm="24">
+              <a-form-item label="更新日期">
+                <a-date-picker v-model="queryParam.date" style="width: 100%" placeholder="请输入更新日期"/>
+              </a-form-item>
+            </a-col>
+            <a-col :md="8" :sm="24">
+              <a-form-item label="使用状态">
+                <a-select v-model="queryParam.useStatus" placeholder="请选择" default-value="0">
+                  <a-select-option value="0">全部</a-select-option>
+                  <a-select-option value="1">关闭</a-select-option>
+                  <a-select-option value="2">运行中</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <a-col :md="8" :sm="24">
+              <a-form-item label="使用状态">
+                <a-select placeholder="请选择" default-value="0">
+                  <a-select-option value="0">全部</a-select-option>
+                  <a-select-option value="1">关闭</a-select-option>
+                  <a-select-option value="2">运行中</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+          </template>
+          <a-col :md="!advanced && 8 || 24" :sm="24">
+            <span class="table-page-search-submitButtons" :style="advanced && { float: 'right', overflow: 'hidden' } || {} ">
+              <a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
+              <a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button>
+              <a @click="toggleAdvanced" style="margin-left: 8px">
+                {{ advanced ? '收起' : '展开' }}
+                <a-icon :type="advanced ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+
+    <div class="table-operator">
+      <a-button type="primary" icon="plus" @click="handleEdit()">新建</a-button>
+      <a-button type="dashed" @click="tableOption">{{ optionAlertShow && '关闭' || '开启' }} alert</a-button>
+      <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1"><a-icon type="delete" />删除</a-menu-item>
+          <!-- lock | unlock -->
+          <a-menu-item key="2"><a-icon type="lock" />锁定</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px">
+          批量操作 <a-icon type="down" />
+        </a-button>
+      </a-dropdown>
+    </div>
+
+    <s-table
+      ref="table"
+      size="default"
+      rowKey="key"
+      :columns="columns"
+      :data="loadData"
+      :alert="options.alert"
+      :rowSelection="options.rowSelection"
+    >
+      <span slot="serial" slot-scope="text, record, index">
+        {{ index + 1 }}
+      </span>
+      <span slot="action" slot-scope="text, record">
+        <template>
+          <a @click="handleEdit(record)">编辑</a>
+          <a-divider type="vertical" />
+        </template>
+        <a-dropdown>
+          <a class="ant-dropdown-link">
+            更多 <a-icon type="down" />
+          </a>
+          <a-menu slot="overlay">
+            <a-menu-item>
+              <a href="javascript:;">详情</a>
+            </a-menu-item>
+            <a-menu-item v-if="$auth('table.disable')">
+              <a href="javascript:;">禁用</a>
+            </a-menu-item>
+            <a-menu-item v-if="$auth('table.delete')">
+              <a href="javascript:;">删除</a>
+            </a-menu-item>
+          </a-menu>
+        </a-dropdown>
+      </span>
+    </s-table>
+  </div>
+</template>
+
+<script>
+import moment from 'moment'
+import { STable } from '@/components'
+import { getRoleList, getServiceList } from '@/api/manage'
+
+export default {
+  name: 'TableList',
+  components: {
+    STable
+  },
+  data () {
+    return {
+      mdl: {},
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      // 表头
+      columns: [
+        {
+          title: '#',
+          scopedSlots: { customRender: 'serial' }
+        },
+        {
+          title: '规则编号',
+          dataIndex: 'no'
+        },
+        {
+          title: '描述',
+          dataIndex: 'description'
+        },
+        {
+          title: '服务调用次数',
+          dataIndex: 'callNo',
+          sorter: true,
+          needTotal: true,
+          customRender: (text) => text + ' 次'
+        },
+        {
+          title: '状态',
+          dataIndex: 'status',
+          needTotal: true
+        },
+        {
+          title: '更新时间',
+          dataIndex: 'updatedAt',
+          sorter: true
+        },
+        {
+          title: '操作',
+          dataIndex: 'action',
+          width: '150px',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        console.log('loadData.parameter', parameter)
+        return getServiceList(Object.assign(parameter, this.queryParam))
+          .then(res => {
+            return res.result
+          })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+
+      // custom table alert & rowSelection
+      options: {
+        alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      optionAlertShow: false
+    }
+  },
+  created () {
+    this.tableOption()
+    getRoleList({ t: new Date() })
+  },
+  methods: {
+    tableOption () {
+      if (!this.optionAlertShow) {
+        this.options = {
+          alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            onChange: this.onSelectChange
+          }
+        }
+        this.optionAlertShow = true
+      } else {
+        this.options = {
+          alert: false,
+          rowSelection: null
+        }
+        this.optionAlertShow = false
+      }
+    },
+
+    handleEdit (record) {
+      this.$emit('onEdit', record)
+    },
+    handleOk () {
+
+    },
+
+    onSelectChange (selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    },
+    toggleAdvanced () {
+      this.advanced = !this.advanced
+    },
+
+    resetSearchForm () {
+      this.queryParam = {
+        date: moment(new Date())
+      }
+    }
+  }
+}
+</script>
diff --git a/src/views/case/index.vue b/src/views/case/index.vue
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/views/caseTransfer/index.vue b/src/views/caseTransfer/index.vue
new file mode 100644
index 0000000000..13f4b1d089
--- /dev/null
+++ b/src/views/caseTransfer/index.vue
@@ -0,0 +1,268 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索患者姓名、身份证号" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col :md="13" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="$refs.registerModal.show()">新建</a-button>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch(3)">全部申请</p>
+                    <p @click="tableSearch(1)">本月新增申请</p>
+                    <p @click="tableSearch(2)">本年新增申请</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="入组编号">
+                        <a-input v-model.trim="queryParam.fileCode" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="姓名">
+                        <a-input v-model.trim="queryParam.patientName" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="身份证号">
+                        <a-input v-model.trim="queryParam.card" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="申请时间" style="margin-bottom:0;">
+                        <a-range-picker @change="changeTime" style="width: 100%" :value="dateArr" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="distractId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <template slot="executeStatus" slot-scope="text">
+        <a-badge :status="text == 0 ? 'default' : text == 1 ? 'success' : 'error'" :text="text == 0 ? '未审核': text == 1 ? '审核通过' : '审核不通过'" />
+      </template>
+      <template slot="patientName" slot-scope="text,record">
+        <p>{{modifyName(text)}}</p>
+      </template>
+      <template slot="reason" slot-scope="text">
+        <a-tooltip placement="topLeft">
+          <template slot="title">{{ text }}</template>
+          <span class="reason">{{ text }}</span>
+        </a-tooltip>
+      </template>
+    </s-table>
+    <register-form ref="registerModal" @ok="handleOk"></register-form>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { STable } from '@/components'
+import { getZyDataList } from '@/api/distract'
+import RegisterForm from './modules/RegisterForm'
+import $ from 'jquery'
+
+export default {
+  name: 'Gallery',
+  components: {
+    STable,
+    RegisterForm
+  },
+  data() {
+    return {
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      dateArr: [],
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      // 表头
+      columns: [{
+          title: '申请单号',
+          dataIndex: 'distractCode',
+          width: 120
+        },
+        {
+          title: '入组编号',
+          dataIndex: 'fileCode',
+          width: 150
+        },
+        {
+          title: '患者姓名',
+          dataIndex: 'patientName',
+          width: 120,
+          scopedSlots: { customRender: 'patientName' }
+        },
+        {
+          title: '原中心',
+          dataIndex: 'centerName',
+          width: 200
+        },
+        {
+          title: '申请时间',
+          dataIndex: 'createDate',
+          customRender: createDate => moment(createDate).format('YYYY-MM-DD'),
+          width: 180
+        },
+        {
+          title: '审核状态',
+          dataIndex: 'executeStatus',
+          scopedSlots: { customRender: 'executeStatus' },
+          width: 150
+        },
+        {
+          title: '驳回理由',
+          dataIndex: 'rejectionReason',
+          scopedSlots: { customRender: 'rejectionReason' },
+          width: 180
+        }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        return getZyDataList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      scroll: false,
+      // custom table alert & rowSelection
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      optionAlertShow: false
+    }
+  },
+  created() {
+    this.scroll = {
+      y: window.screen.height - 368 + 'px'
+    }
+  },
+  mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  },
+  methods: {
+    modifyName(name) {
+      return name.replace(/(.)(.*)/, (_, $1, $2) => $1 + '*'.repeat($2.length))
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    clearForm() {
+      this.queryParam = {}
+      this.dateArr = []
+    },
+    tableSearch(type) {
+      this.queryParam.queryType = type
+      this.$refs.table.refresh();
+      this.advanced = false;
+    },
+    refreshTable() {
+      this.advanced = false
+      this.$refs.table.refresh()
+    },
+    handleOk() {
+      this.$refs.table.refresh()
+    },
+    changeTime(time) {
+      this.dateArr = time
+      this.queryParam.createDateStart = moment(time[0]).format('YYYY-MM-DD')
+      this.queryParam.createDateEnd = moment(time[1]).format('YYYY-MM-DD')
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+td.operation {
+  text-align: center !important;
+}
+
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+
+.reason {
+  display: inline-block;
+  width: 11em;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.userName {
+  color: #1fb2fa;
+  margin: 0;
+
+  &:active,
+  &:hover {
+    text-decoration: underline;
+    text-underline-position: under;
+    text-decoration-color: #1fb2fa;
+    cursor: pointer;
+  }
+}
+</style>
diff --git a/src/views/caseTransfer/modules/RegisterForm.vue b/src/views/caseTransfer/modules/RegisterForm.vue
new file mode 100644
index 0000000000..a63c07d35f
--- /dev/null
+++ b/src/views/caseTransfer/modules/RegisterForm.vue
@@ -0,0 +1,242 @@
+<template>
+  <a-modal title="新建申请" :width="800" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :centered="centered" :destroyOnClose="destroyOnClose" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item>
+          <a-input-search placeholder="搜索患者身份证号" @search="onSearch" v-decorator="['card', requiredRule]" enterButton />
+        </a-form-item>
+
+        <div v-if="JSON.stringify(patient) != '{}'">
+          <a-divider orientation="left">患者信息</a-divider>
+          <user-detail :patient="patient"></user-detail>
+          <a-divider orientation="left">申请理由</a-divider>
+          <a-form-item>
+            <a-textarea rows="3" v-decorator="['reason', { rules: [{ required: JSON.stringify(patient) != '{}', message: '该选项必填' }] }]" placeholder="请输入申请理由" style="margin-bottom: 0" />
+          </a-form-item>
+        </div>
+
+        <div v-else>
+          <div class="zwhz" v-if="tipCode == 3"></div>
+          <div class="bkzy" v-else-if="tipMsg == 0 || tipMsg == 5"></div>
+          <div class="zwsj">{{ tipMsg }}</div>
+        </div>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { getPatientDetailByCard } from '@/api/patient'
+  import { addDistract } from '@/api/distract'
+  import UserDetail from './UserDetailTop';
+  export default {
+    components: {
+      UserDetail
+    },
+    data() {
+      return {
+        bodyStyle: {
+          height: '500px',
+          overflow: 'auto'
+        },
+        maskClosable: false,
+        centered: true,
+        destroyOnClose: true,
+        visible: false,
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        requiredRule: { rules: [{ required: true, message: '该选项必填' }] },
+        patient: {},
+        tipMsg: '暂无数据',
+        tipCode: -200
+      }
+    },
+    methods: {
+      show() {
+        this.patient = {};
+        this.tipMsg = '暂无数据'
+        this.tipCode = -200
+        this.visible = true;
+      },
+      onSearch(value) {
+        this.confirmLoading = true;
+        this.patient = {};
+        const { form: { validateFieldsAndScroll } } = this
+        validateFieldsAndScroll(['card'], (errors, values) => {
+          if (errors) {
+            this.confirmLoading = false;
+            return
+          }
+          const params = new FormData()
+          params.append('type', 1)
+          params.append('card', value);
+          getPatientDetailByCard(params).then(res => {
+            this.confirmLoading = false;
+            if (res.code == 1) {
+              this.patient = res.data
+            } else {
+              this.tipMsg = res.msg
+              this.tipCode = res.code
+            }
+          })
+        })
+      },
+      handleSubmit() {
+        this.confirmLoading = false
+        this.form.validateFieldsAndScroll((errors, fieldsValue) => {
+          if (errors) {
+            this.confirmLoading = false
+            return
+          }
+          if (JSON.stringify(this.patient) == '{}') return
+
+          const distract = {
+            ...fieldsValue,
+            patientId: this.patient.patientId,
+            centerId: this.patient.centerId,
+          }
+          const params = new FormData()
+          params.append('distract', JSON.stringify(distract))
+          addDistract(params).then(res => {
+            this.$message.success(res.msg);
+            this.visible = false
+            this.confirmLoading = false
+            this.$emit('ok')
+          })
+        })
+      },
+      handleCancel() {
+        this.visible = false
+      },
+      validateCard(rule, value, callback) {
+        if (!value) {
+          callback('该选项必填');
+          return;
+        }
+        var num = value.toUpperCase(); //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
+        if (!/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num)) {
+          callback('身份证号长度不正确或不符合规定!');
+          return;
+        }
+        //验证前2位,城市符合
+        var aCity = {
+          11: '北京',
+          12: '天津',
+          13: '河北',
+          14: '山西',
+          15: '内蒙古',
+          21: '辽宁',
+          22: '吉林',
+          23: '黑龙江 ',
+          31: '上海',
+          32: '江苏',
+          33: '浙江',
+          34: '安徽',
+          35: '福建',
+          36: '江西',
+          37: '山东',
+          41: '河南',
+          42: '湖北',
+          43: '湖南',
+          44: '广东',
+          45: '广西',
+          46: '海南',
+          50: '重庆',
+          51: '四川',
+          52: '贵州',
+          53: '云南',
+          54: '西藏',
+          61: '陕西',
+          62: '甘肃',
+          63: '青海',
+          64: '宁夏',
+          65: '新疆',
+          71: '台湾',
+          81: '香港',
+          82: '澳门',
+          91: '国外'
+        };
+        if (aCity[parseInt(num.substr(0, 2))] == null) {
+          callback('身份证号不正确或不符合规定!');
+          return;
+        }
+
+        //下面分别分析出生日期和校验位
+        var len, re;
+        len = num.length;
+        if (len == 15) {
+          re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
+          var arrSplit = num.match(re); //检查生日日期是否正确
+          var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
+          var bGoodDay;
+          bGoodDay = dtmBirth.getYear() == Number(arrSplit[2]) && dtmBirth.getMonth() + 1 == Number(arrSplit[3]) && dtmBirth.getDate() == Number(arrSplit[4]);
+          if (!bGoodDay) {
+            callback('身份证号的出生日期不对!');
+          } else {
+            //将15位身份证转成18位 //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
+            var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
+            var nTemp = 0,
+              i;
+            num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
+            for (i = 0; i < 17; i++) {
+              nTemp += num.substr(i, 1) * arrInt[i];
+            }
+            num += arrCh[nTemp % 11];
+          }
+        }
+        if (len == 18) {
+          re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
+          var arrSplit = num.match(re); //检查生日日期是否正确
+          var dtmBirth = new Date(arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
+          var bGoodDay;
+          bGoodDay = dtmBirth.getFullYear() == Number(arrSplit[2]) && dtmBirth.getMonth() + 1 == Number(arrSplit[3]) && dtmBirth.getDate() == Number(arrSplit[4]);
+          if (!bGoodDay) {
+            callback('身份证号的出生日期不对!');
+          } else {
+            //检验18位身份证的校验码是否正确。 //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
+            var valnum;
+            var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
+            var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
+            var nTemp = 0,
+              i;
+            for (i = 0; i < 17; i++) {
+              nTemp += num.substr(i, 1) * arrInt[i];
+            }
+            valnum = arrCh[nTemp % 11];
+            if (valnum != num.substr(17, 1)) {
+              callback('18位身份证号的校验码不正确!');
+            }
+          }
+        }
+        callback()
+      }
+    }
+  }
+</script>
+<style lang="less" scoped>
+  /deep/ .ant-divider-horizontal.ant-divider-with-text-left {
+    color: #1890ff;
+  }
+
+  .zwhz {
+    width: 220px;
+    height: 220px;
+    margin: auto;
+    margin-bottom: 20px;
+    background: url('../../../assets/zwhz.png') 80% 80% no-repeat;
+  }
+  .bkzy {
+    width: 220px;
+    height: 220px;
+    margin: auto;
+    margin-bottom: 20px;
+    background: url('../../../assets/bkzy.png') 80% 80% no-repeat;
+  }
+  .zwsj {
+    height: 50px;
+    line-height: 50px;
+    font-size: 16px;
+    text-align: center;
+    color: #1890ff;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/caseTransfer/modules/ReviewForm.vue b/src/views/caseTransfer/modules/ReviewForm.vue
new file mode 100644
index 0000000000..c5f06e149e
--- /dev/null
+++ b/src/views/caseTransfer/modules/ReviewForm.vue
@@ -0,0 +1,119 @@
+<template>
+  <a-modal title="病例转移审核" :width="800" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :centered="centered" :destroyOnClose="destroyOnClose" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item label="申请单号" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['distractCode']" readOnly />
+        </a-form-item>
+        <a-form-item label="入组编号" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['fileBasisCode']" readOnly />
+        </a-form-item>
+        <a-form-item label="患者姓名" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['patientName']" readOnly />
+        </a-form-item>
+        <a-form-item label="身份号码" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['card']" readOnly />
+        </a-form-item>
+        <a-form-item label="申请中心" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['centerName']" readOnly />
+        </a-form-item>
+        <a-form-item label="申请时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-date-picker style="width: 100%" format="YYYY-MM-DD" v-decorator="['createDate']" disabled />
+        </a-form-item>
+        <a-form-item label="申请理由" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['reason']" readOnly />
+        </a-form-item>
+        <a-form-item label="审核" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-radio-group v-decorator="['executeStatus', requiredRule]">
+            <a-radio value="1">通过</a-radio>
+            <a-radio value="2">驳回</a-radio>
+          </a-radio-group>
+        </a-form-item>
+        <a-form-item v-if="form.getFieldValue('executeStatus') == 2" label="驳回理由" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-textarea rows="3" v-decorator="['rejectionReason', requiredRule]" placeholder="请输入驳回理由" />
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { verifyDistract } from '@/api/distract'
+  export default {
+    data() {
+      return {
+        bodyStyle: {
+          height: '500px',
+          overflow: 'auto'
+        },
+        maskClosable: false,
+        centered: true,
+        destroyOnClose: true,
+        visible: false,
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        targetCenterId: '',
+        distractId: '',
+        patientId: '',
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 6 }
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 14 }
+        },
+        requiredRule: { rules: [{ required: true, message: '该选项必填' }] }
+      }
+    },
+    methods: {
+      show(recode) {
+        this.visible = true;
+        this.confirmLoading = false;
+        this.targetCenterId = recode.targetCenterId
+        this.distractId = recode.distractId
+        this.patientId = recode.patientId
+        this.$nextTick(() => {
+          this.form.setFieldsValue(recode);
+        })
+      },
+      handleSubmit() {
+        this.confirmLoading = true;
+
+        const { form: { validateFieldsAndScroll } } = this;
+
+        validateFieldsAndScroll((errors, fieldsValue) => {
+          const that = this;
+          if (errors) {
+            this.confirmLoading = false;
+            return;
+          }
+          const params = new FormData();
+          const distract = {
+            ...fieldsValue,
+            targetCenterId: this.targetCenterId,
+            distractId: this.distractId,
+            patientId: this.patientId,
+            createDate: fieldsValue['createDate'].format('YYYY-MM-DD')
+          }
+          params.append('distract', JSON.stringify(distract))
+          verifyDistract(params).then(res => {
+            that.$message.success(res.msg);
+            that.visible = false;
+            that.confirmLoading = false;
+            that.$emit('ok')
+          })
+        })
+      },
+      handleCancel() {
+        this.visible = false
+      }
+    },
+  }
+</script>
+
+<style lang="less" scoped>
+  /deep/ .ant-form-item:last-child {
+    margin-bottom: 0;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/caseTransfer/modules/UserDetail.vue b/src/views/caseTransfer/modules/UserDetail.vue
new file mode 100644
index 0000000000..3182d88978
--- /dev/null
+++ b/src/views/caseTransfer/modules/UserDetail.vue
@@ -0,0 +1,320 @@
+<template>
+  <a-modal
+    title="患者详情"
+    :width="800"
+    :bodyStyle="bodyStyle"
+    :maskClosable="maskClosable"
+    :centered="centered"
+    :destroyOnClose="destroyOnClose"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    :footer="null"
+    @cancel="handleCancel"
+  >
+    <a-spin :spinning="confirmLoading">
+      <user-detail :patient="patient"></user-detail>
+      <a-tabs defaultActiveKey="1">
+        <a-tab-pane tab="详细信息" key="1">
+          <div class="userCard">
+            <a-row id="userInfo">
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>患者同意注册日期:</span>
+                  {{ patient.registerDate | formDate }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>文化程度:</span>
+                  {{ patient.censusName }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>访视状态:</span>
+                  {{ patient.visit | visitStatus }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>医疗费用支付情况:</span>
+                  {{ patient.payTypeName }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>职业:</span>
+                  {{ patient.workName }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>家庭年收入:</span>
+                  {{ patient.income }}万
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>创建机构:</span>
+                  {{ patient.centerName }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>创建时间:</span>
+                  {{ patient.ceateDate | formDate }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>创建人:</span>
+                  {{ patient.creatorName }}
+                </p>
+              </a-col>
+            </a-row>
+          </div>
+        </a-tab-pane>
+        <a-tab-pane tab="待访视任务" key="2" forceRender>
+          <div class="userCard" v-if="visitTasks.length>0">
+            <div class="followupItem" v-for="item in visitTasks">
+              <my-icon class="my-icon-huaban" type="iconshijian_huaban" />
+              <p>
+                <span>计划时间:</span>
+                {{item.planDate}}
+              </p>
+              <p>
+                <span>随访摘要:</span>
+                 {{item.taskName}}
+              </p>
+                <router-link :to="{path:'/list/task/' + item.visitTaskId}"> 
+              <a-button type="primary" size="small" style="float:right;">
+                <my-icon type="iconxiangqing_huaban" />
+                执行
+              </a-button>
+               </router-link>
+            </div>
+          </div>
+          <div v-else class="userCard">
+               <div style="text-align: center;">
+                   <img src="@/assets/noData.png" alt="">
+                   <p>暂无数据</p>
+            </div>
+          </div>
+        </a-tab-pane>
+        <a-tab-pane tab="访视情况" key="3">
+          <div class="userCard" v-if="patientBasisList.length>0">
+            <a-timeline>
+              <a-timeline-item v-for="item in patientBasisList">
+                <span class="followupDate">{{item.createDate|formDate}}</span>
+                <div class="followupInfoItem">
+                  <div class="followupInfoItemType">
+                    <p>
+                      访视类型:
+                      <span>{{item.type|patientBasisType}}</span>
+                    </p>
+                    <p>访视时间: {{item.wirteDate|formDate}}</p>
+                  </div>
+                  <div class="followupInfoItemPro">
+                    <span>访视进度:</span>
+                    <p>
+                      <a-progress  :percent="item.progress" status="active" />
+                    </p>
+                  </div>
+                   <router-link :to="{path:'/list/basis/' + item.patientBasisId}"> 
+                  <a-button type="primary" size="small"     style="float:right;margin-top:5px ;">
+                    <my-icon type="iconxiangqing_huaban" />
+                    详情
+                  </a-button>
+                  </router-link>
+                </div>
+              </a-timeline-item>
+            </a-timeline>
+          </div>
+          <div v-else class="userCard">
+            <div style="text-align: center;">
+                   <img src="@/assets/noData.png" alt="">
+                   <p>暂无数据</p>
+            </div>
+          </div>
+        </a-tab-pane>
+      </a-tabs>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+import { getPatientDetail } from '@/api/patient';
+import UserDetail from './UserDetailTop';
+import { MyIcon } from '@/components/_util/util';
+import moment from 'moment';
+import _ from 'lodash';
+export default {
+  components: {
+    UserDetail,
+    MyIcon
+  },
+  data() {
+    return {
+      patientBasisList: [],
+      visitTasks: [],
+      patient: {},
+      visible: false,
+      confirmLoading: false,
+      centered: true,
+      maskClosable: false,
+      destroyOnClose: true,
+      bodyStyle: {
+        height: '500px',
+        overflow: 'auto',
+        background:"#F8FBFC"
+      }
+    };
+  },
+  filters: {
+    formDate(date) {
+      return moment(date).format('YYYY-MM-DD');
+    },
+    visitStatus(value) {
+      const visitMap = {
+        '1': '忽略',
+        '2': '未执行',
+        '3': '执行中',
+        '4': '已完成'
+      };
+      return visitMap[value];
+    },
+    patientBasisType(type){
+      const patientBasisTypeMap=['','支扩基线','半年随访','年访视','急性加重期随访', '', 'ICON常规随访', '急性加重期随访', 'ICON基线']
+      return patientBasisTypeMap[type];
+    }
+  },
+  methods: {
+    show(value) {
+      this.visible = true;
+      this.confirmLoading = true;
+      const Params = new URLSearchParams();
+      Params.append('patientId', value.patientId);
+      getPatientDetail(Params).then(res => {
+          this.patient = res.data.patient;
+          this.patientBasisList = res.data.patientBasisList;
+          this.visitTasks = res.data.visitTasks;
+        this.confirmLoading = false;
+      });
+    },
+    handleCancel() {
+      this.visible = false;
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+/deep/ .ant-modal-body {
+  background-color: #fdfdfd;
+}
+.userCard {
+  background: #ffffff;
+  padding: 20px;
+  border: 1px solid #f1f1f1;
+  padding-right:0px; 
+  overflow: auto;
+  #userInfo {
+    p.userInfoItem {
+      color: #000000;
+      span {
+        color: #888888;
+      }
+    }
+  }
+  .followupItem {
+    border-bottom: 1px dashed #f3f3f3;
+    padding-bottom: 10px;
+    margin-bottom: 15px;
+    padding-right: 20px;
+    .my-icon-huaban {
+      color: #26adfa;
+      font-size: 30px;
+      margin-right: 10px;
+      vertical-align: middle;
+    }
+    p {
+      display: inline-block;
+      margin: 0px;
+      margin-right: 40px;
+      color: #000000;
+      span {
+        color: #888888;
+      }
+    }
+  }
+  span.followupDate{
+      display: inline-block;
+    border: 1px solid #dddddd;
+    padding: 5px 10px;
+    font-size: 12px;
+    border-radius: 15px;
+    vertical-align: top;
+    position: relative;
+    top: -3px;
+  }
+  div.followupInfoItem{
+   display: inline-block;
+    width: 590px;
+    background: #F1F8FE;
+    margin-left: 20px;
+    position: relative;
+    top: -11px;
+    padding: 5px 20px;
+     div.followupInfoItemType{
+       display: inline-block;
+       width: 200px;
+       font-size: 12px;
+       p:first-child{
+             color: #000;
+            margin-bottom: 5px;
+            font-size: 14px;
+            span{
+              color: #F0C070;
+            }
+       }
+       p:nth-child(2){
+             margin: 0;
+       }
+     }
+     div.followupInfoItemPro{
+       display: inline-block;
+       width: 200px;
+       vertical-align: top;
+       span{
+         font-size: 14px;
+         color: #000;
+       }
+       p{
+         width: 100px;
+         display: inline-block;
+         margin: 0;
+         margin-left: 10px;
+         /deep/ .ant-progress-inner{
+           background-color:#C4C4C4;
+         }
+       }
+     }
+  }
+
+}
+
+::-webkit-scrollbar-track-piece { //滚动条凹槽的颜色,还可以设置边框属性
+background-color:#f8f8f8;
+}
+::-webkit-scrollbar {//滚动条的宽度
+width:5px;
+height:9px;
+}
+::-webkit-scrollbar-thumb {//滚动条的设置
+background-color:#dddddd;
+background-clip:padding-box;
+min-height:28px;
+}
+::-webkit-scrollbar-thumb:hover {
+background-color:#bbb;
+}
+</style>
diff --git a/src/views/caseTransfer/modules/UserDetailTop.vue b/src/views/caseTransfer/modules/UserDetailTop.vue
new file mode 100644
index 0000000000..f9836f5560
--- /dev/null
+++ b/src/views/caseTransfer/modules/UserDetailTop.vue
@@ -0,0 +1,114 @@
+<template>
+  <div class="patient">
+    <div class="patient-box">
+      <img src="../../../assets/woman.png" height="60px" v-if="patient.sex == 0" />
+      <img src="../../../assets/man.png" height="60px" v-else />
+      <div class="patient-info">
+        <span class="patient-name">{{ patient.name }}</span>
+        <span class="patient-age" :class="patient.sex == 0 ? 'womenBg' : ''">
+          <a-icon :type="patient.sex == 1 ? 'man':'woman'" />
+          {{getAge}}岁
+        </span>
+        <span class="patient-nation">{{patient.nationName}}</span>
+      </div>
+    </div>
+    <a-row>
+      <a-col :span="8">
+        <p>患者编号:{{patient.code}}</p>
+      </a-col>
+      <a-col :span="8">
+        <p>身份证号:{{patient.card}}</p>
+      </a-col>
+      <a-col :span="8">
+        <p>创建人:{{patient.creatorName}}</p>
+      </a-col>
+    </a-row>
+    <a-row>
+      <a-col :span="8">
+        <p>联系电话:{{patient.telephone1}}</p>
+      </a-col>
+      <a-col :span="8">
+        <p>所属中心:{{patient.centerName}}</p>
+      </a-col>
+      <a-col :span="8">
+        <p>创建时间:{{patient.createDate | moment}}</p>
+      </a-col>
+    </a-row>
+  </div>
+</template>
+
+<script>
+  import moment from 'moment'
+  export default {
+    props: ['patient'],
+    computed: {
+      getAge() {
+        var identityCard = this.patient.card
+        var len = (identityCard + '').length
+        var strBirthday = ''
+        if (len == 18) {
+          //处理18位的身份证号码从号码中得到生日和性别代码
+          strBirthday = identityCard.substr(6, 4) + '/' + identityCard.substr(10, 2) + '/' + identityCard.substr(12, 2)
+        }
+        if (len == 15) {
+          strBirthday =
+            '19' + identityCard.substr(6, 2) + '/' + identityCard.substr(8, 2) + '/' + identityCard.substr(10, 2)
+        }
+        //时间字符串里,必须是“/”
+        var birthDate = new Date(strBirthday)
+        var nowDateTime = new Date()
+        var age = nowDateTime.getFullYear() - birthDate.getFullYear()
+        //再考虑月、天的因素;.getMonth()获取的是从0开始的,这里进行比较,不需要加1
+        if (
+          nowDateTime.getMonth() < birthDate.getMonth() ||
+          (nowDateTime.getMonth() == birthDate.getMonth() && nowDateTime.getDate() < birthDate.getDate())
+        ) {
+          age--
+        }
+        return age
+      }
+    }
+  }
+</script>
+<style lang="less" scoped>
+  .patient {
+    border: 1px solid rgba(22, 143, 253, 0.15);
+    background: #f5f9fd;
+    padding: 15px 20px;
+    .patient-box {
+      border-bottom: 1px dashed rgba(22, 143, 253, 0.15);
+      padding-bottom: 15px;
+      margin-bottom: 15px;
+      display: flex;
+      .patient-info {
+        flex: 1;
+        display: flex;
+        align-items: center;
+        span {
+          height: 24px;
+          line-height: 24px;
+          font-size: 14px;
+          margin-left: 15px;
+        }
+        .patient-name {
+          font-size: 20px;
+        }
+        .womenBg {
+          background-color: #fd94dc !important;
+        }
+        .patient-age {
+          color: #fff;
+          background-color: #96dcfd;
+          padding: 0px 10px;
+          border-radius: 3px;
+        }
+        .patient-nation {
+          background-color: #e8e8e8;
+          padding: 0px 10px;
+          border-radius: 3px;
+          margin-left: 10px;
+        }
+      }
+    }
+  }
+</style>
diff --git a/src/views/caseTransfer/modules/UserList.vue b/src/views/caseTransfer/modules/UserList.vue
new file mode 100644
index 0000000000..89681ea654
--- /dev/null
+++ b/src/views/caseTransfer/modules/UserList.vue
@@ -0,0 +1,132 @@
+<template>
+  <a-modal
+    title="选择患者"
+    :width="800"
+    :destroyOnClose="destroyOnClose"
+    :bodyStyle="bodyStyle"
+    :centered="centered"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="checkuUser"
+    @cancel="handleCancel"
+  >
+    <a-spin :spinning="confirmLoading">
+      <div class="patientDetail-box">
+        <a-row>
+          <a-col :span="12">
+            <p class>
+              <span class>患者编号:</span>
+              <span class>{{patientDetail.code}}</span>
+            </p>
+          </a-col>
+          <a-col :span="12">
+            <p class>
+              <span class>患者姓名:</span>
+              <span class>{{patientDetail.name}}</span>
+            </p>
+          </a-col>
+        </a-row>
+        <a-row>
+          <a-col :span="12">
+            <p class>
+              <span class>身份证号:</span>
+              <span class>{{patientDetail.card}}</span>
+            </p>
+          </a-col>
+          <a-col :span="12">
+            <p class>
+              <span class>电话号码:</span>
+              <span class>{{patientDetail.telephone1}}</span>
+            </p>
+          </a-col>
+        </a-row>
+        <a-row>
+          <a-col :span="12">
+            <p class>
+              <span class>所属中心:</span>
+              <span class>{{patientDetail.centerName}}</span>
+            </p>
+          </a-col>
+        </a-row>
+       
+      </div>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+import { getPatientDetailByCard } from '@/api/patient'
+import moment from 'moment'
+import _ from 'lodash'
+
+export default {
+  data() {
+    return {
+      name: '',
+      userData: {},
+      loading: false,
+      visible: false,
+      confirmLoading: false,
+      destroyOnClose: true,
+      centered: true,
+      bodyStyle: {
+        height: '500px',
+        overflow: 'auto'
+      },
+      patientDetail: {}
+    }
+  },
+  mounted() {
+    this.userData = {}
+  },
+  methods: {
+    add(value) {
+      this.visible = true
+      this.confirmLoading = true
+      this.getPatientDetailByCard(value)
+    },
+    checkuUser() {
+      this.$emit('listen', this.patientDetail)
+      this.visible = false
+    },
+    handleCancel() {
+      this.visible = false
+    },
+    getPatientDetailByCard(card) {
+      const Card = card ? card : ''
+      const params = new URLSearchParams()
+      params.append('card', card)
+      params.append('type', 1)
+        this.confirmLoading = false
+      getPatientDetailByCard(params).then(res => {
+        this.patientDetail = res.data
+        // this.confirmLoading = false
+      })
+    }
+  },
+  computed: {
+    rowSelection() {
+      const { selectedRowKeys } = this
+      return {
+        type: 'radio',
+        onChange: (selectedRowKeys, selectedRows) => {
+          this.userData = selectedRows
+        },
+        getCheckboxProps: record => ({
+          props: {
+            disabled: record.name === 'Disabled User', // Column configuration not to be checked
+            name: record.name
+          }
+        })
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+.patientDetail-box {
+  padding: 20px;
+  font-size: 18px;
+}
+</style>
diff --git a/src/views/caseTransfer/review.vue b/src/views/caseTransfer/review.vue
new file mode 100644
index 0000000000..a7ce5890bd
--- /dev/null
+++ b/src/views/caseTransfer/review.vue
@@ -0,0 +1,144 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="18">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索患者姓名、身份证号" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="4" :sm="6">
+            <a-form-item>
+              <a-button type="primary" @click="$refs.table.refresh()">查询</a-button>
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="distractId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <template slot="patientName" slot-scope="text,record">
+        <p>{{modifyName(text)}}</p>
+      </template>
+      <span slot="operation" slot-scope="text, record">
+        <template>
+          <a @click="handleReview(record)">审核</a>
+        </template>
+      </span>
+    </s-table>
+    <review-form ref="reviewModal" @ok="handleOk"></review-form>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getSqDataList } from '@/api/distract'
+import { STable } from '@/components'
+import ReviewForm from './modules/ReviewForm'
+export default {
+  components: {
+    STable,
+    ReviewForm
+  },
+  data() {
+    return {
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 查询参数
+      queryParam: {},
+      scroll: false,
+      loadData: parameter => {
+        return getSqDataList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      columns: [{
+          title: '申请单号',
+          dataIndex: 'distractCode',
+          width: '120px'
+        },
+        {
+          title: '入组编号',
+          dataIndex: 'fileCode',
+          width: '180px'
+        },
+        {
+          title: '患者姓名',
+          dataIndex: 'patientName',
+          width: '120px',
+          scopedSlots: { customRender: 'patientName' }
+        },
+        {
+          title: '申请中心',
+          dataIndex: 'centerName',
+          width: '150px'
+        },
+        {
+          title: '申请时间',
+          dataIndex: 'createDate',
+          customRender: createDate => moment(createDate).format('YYYY-MM-DD'),
+          width: '150px'
+        },
+        {
+          title: '操作',
+          dataIndex: 'operation',
+          scopedSlots: { customRender: 'operation' },
+          width: '100px'
+        }
+      ],
+    }
+  },
+  created() {
+    this.scroll = {
+      y: window.screen.height - 368 + 'px'
+    }
+  },
+  methods: {
+    modifyName(name) {
+      return name.replace(/(.)(.*)/, (_, $1, $2) => $1 + '*'.repeat($2.length))
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    handleReview(recode) {
+      const data = {
+        targetCenterId: recode.targetCenterId,
+        distractId: recode.distractId,
+        distractCode: recode.distractCode,
+        fileBasisCode: recode.fileBasisCode,
+        patientId: recode.patientId,
+        patientName: recode.patientName,
+        card: recode.card,
+        centerName: recode.centerName,
+        createDate: moment(recode.createDate, 'x'),
+        reason: recode.reason,
+      }
+      this.$refs.reviewModal.show(data)
+    },
+    handleOk() {
+      this.$refs.table.refresh()
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/center/CenterDetail.vue b/src/views/center/CenterDetail.vue
new file mode 100644
index 0000000000..eb348666f0
--- /dev/null
+++ b/src/views/center/CenterDetail.vue
@@ -0,0 +1,134 @@
+<template>
+  <a-modal :title="options.title" :width="800" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :destroyOnClose="destroyOnClose" :centered="centered" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item label="中心编码" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['code', requiredRule]" />
+        </a-form-item>
+        <a-form-item label="中心名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['name', requiredRule]" />
+        </a-form-item>
+        <a-form-item label="计划患者数" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['planNum', requiredRule]" />
+        </a-form-item>
+        <a-form-item label="所在地" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-row :gutter="8">
+            <a-col :span="12">
+              <a-form-item>
+                <a-cascader v-decorator="['residence', requiredRule]" :options="residences" :fieldNames="{ label: 'city', value: 'cityId', children: 'children' }" placeholder="选择省/市" />
+              </a-form-item>
+            </a-col>
+            <a-col :span="12">
+              <a-form-item>
+                <a-input v-decorator="['address', requiredRule]" placeholder="请输入详细地址" />
+              </a-form-item>
+            </a-col>
+          </a-row>
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+import { getProvinceAndCity } from '@/api/basis'
+import { saveCenter } from '@/api/center'
+import moment from 'moment'
+import _ from 'lodash'
+export default {
+  data() {
+    return {
+      options: {},
+      residences: [],
+      maskClosable: false,
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 7 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 15 }
+      },
+      visible: false,
+      confirmLoading: false,
+      centered: true,
+      destroyOnClose: true,
+      bodyStyle: {
+        height: '500px',
+        overflow: 'auto'
+      },
+      form: this.$form.createForm(this),
+      requiredRule: { rules: [{ required: true, message: '该选项必填!' }] },
+      centerId: undefined
+    };
+  },
+  created() {
+    const that = this;
+    getProvinceAndCity().then(res => {
+      const keyMap = { province: 'city', provinceId: 'cityId' }
+      _.each(res.data, function(item, index) {
+        that.residences[index] = Object.keys(item).reduce((newData, key) => {
+          let newKey = keyMap[key] || key
+          newData[newKey] = item[key]
+          return newData
+        }, {})
+      })
+    })
+  },
+  methods: {
+    add() {
+      this.options.title = '新建中心'
+      this.centerId = undefined
+      this.visible = true
+    },
+    edit(value) {
+      console.log('value', value);
+      this.options.title = '编辑中心'
+      this.centerId = value.centerId
+      value.residence = [String(value.addressP), String(value.addressC)]
+      setTimeout(() => {
+        this.form.setFieldsValue({
+          code: value.code,
+          name: value.name,
+          residence: value.residence,
+          address: value.addressDetail,
+          planNum: value.planNum
+        })
+      }, 0);
+      this.visible = true
+    },
+    handleSubmit() {
+      this.confirmLoading = true;
+      this.form.validateFieldsAndScroll((errors, fieldsValue) => {
+        const that = this;
+        if (errors) {
+          this.confirmLoading = false
+          return
+        }
+        const residence = fieldsValue['residence']
+        const values = {
+          ...fieldsValue,
+          addressP: residence[0],
+          addressC: residence[1],
+          centerId: this.centerId
+        };
+        const params = new URLSearchParams()
+        params.append('centerStr', JSON.stringify(values))
+        saveCenter(params).then(res => {
+          that.visible = false
+          that.confirmLoading = false
+          that.$message.success(res.msg)
+          that.$emit('ok', values)
+        });
+      });
+    },
+    handleCancel() {
+      this.visible = false
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+/deep/ .ant-form-item:last-child {
+  margin-bottom: 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/center/list.vue b/src/views/center/list.vue
new file mode 100644
index 0000000000..3e4d6c98c9
--- /dev/null
+++ b/src/views/center/list.vue
@@ -0,0 +1,204 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索中心名称" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col :md="13" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="$refs.centerDetail.add()">新增</a-button>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch()">全部中心</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="中心名称">
+                        <a-input v-model.trim="queryParam.centerName" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="centerId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <span slot="operation" slot-scope="text, record">
+        <template>
+          <a @click="handleReview(record)">编辑</a>
+        </template>
+      </span>
+    </s-table>
+    <center-detail ref="centerDetail" @ok="handleOk"></center-detail>
+  </a-card>
+</template>
+
+<script>
+  import moment from 'moment'
+  import { getCenterDataList } from '@/api/center'
+  import { STable } from '@/components'
+  import CenterDetail from './CenterDetail'
+  export default {
+    components: {
+      STable,
+      CenterDetail
+    },
+    data() {
+      return {
+        bodyStyle: {
+          padding: '10px',
+          paddingBottom: '0px'
+        },
+        // 高级搜索 展开/关闭
+        advanced: false,
+        // 查询参数
+        queryParam: {},
+        scroll: false,
+        loadData: parameter => {
+          return getCenterDataList(Object.assign(parameter, this.queryParam)).then(res => {
+            return res
+          })
+        },
+        selectedRowKeys: [],
+        selectedRows: [],
+        options: {
+          alert: {
+            show: false,
+            clear: () => {
+              this.selectedRowKeys = []
+            }
+          },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            onChange: this.onSelectChange
+          }
+        },
+        columns: [
+          {
+            title: '中心编码',
+            dataIndex: 'code',
+            width: '150px'
+          },
+          {
+            title: '中心名称',
+            dataIndex: 'name',
+            width: '150px'
+          },
+          {
+            title: '计划患者数',
+            dataIndex: 'planNum',
+            width: '120px'
+          },
+          {
+            title: '详细地址',
+            dataIndex: 'addressDetail',
+            width: '120px'
+          },
+          {
+            title: '创建时间',
+            dataIndex: 'createDate',
+            customRender: createDate => moment(createDate).format('YYYY-MM-DD'),
+            width: '120px'
+          },
+          {
+            title: '操作',
+            dataIndex: 'operation',
+            scopedSlots: { customRender: 'operation' },
+            width: '100px'
+          }
+        ],
+      }
+    },
+    created() {
+      this.scroll = {
+        y: window.screen.height - 368 + 'px'
+      }
+    },
+    mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  },
+    methods: {
+      onSelectChange(selectedRowKeys, selectedRows) {
+        this.selectedRowKeys = selectedRowKeys;
+        this.selectedRows = selectedRows;
+      },
+      clearForm() {
+        this.queryParam = {}
+      },
+      tableSearch(type) {
+        this.queryParam.isUser = type
+        this.$refs.table.refresh()
+        this.advanced = false
+      },
+      refreshTable() {
+        this.advanced = false
+        this.$refs.table.refresh()
+      },
+      handleReview(record) {
+        this.$refs.centerDetail.edit(record)
+      },
+      handleOk() {
+        this.$refs.table.refresh()
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+  /deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+    margin-bottom: 10px;
+  }
+  .tableSearch {
+    background: #ffffff;
+    position: absolute;
+    top: 52px;
+    box-shadow: 4px 4px 10px #ddd;
+    z-index: 100;
+    /deep/ .ant-card-body .ant-form-horizontal .ant-form-item > .ant-form-item-label {
+      width: 70px !important;
+    }
+    .commonRetrieval {
+      padding: 10px;
+      p {
+        &:hover {
+          cursor: pointer;
+          text-decoration: underline;
+        }
+      }
+    }
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/dashboard/Analysis.vue b/src/views/dashboard/Analysis.vue
index c296846628..c947c7dfd1 100644
--- a/src/views/dashboard/Analysis.vue
+++ b/src/views/dashboard/Analysis.vue
@@ -1,413 +1,536 @@
-<template>
-  <div class="page-header-index-wide">
-    <a-row :gutter="24">
-      <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
-        <chart-card :loading="loading" title="总销售额" total="¥126,560">
-          <a-tooltip title="指标说明" slot="action">
-            <a-icon type="info-circle-o" />
-          </a-tooltip>
-          <div>
-            <trend flag="up" style="margin-right: 16px;">
-              <span slot="term">周同比</span>
-              12%
-            </trend>
-            <trend flag="down">
-              <span slot="term">日同比</span>
-              11%
-            </trend>
-          </div>
-          <template slot="footer">日均销售额<span>¥ 234.56</span></template>
-        </chart-card>
-      </a-col>
-      <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
-        <chart-card :loading="loading" title="访问量" :total="8846 | NumberFormat">
-          <a-tooltip title="指标说明" slot="action">
-            <a-icon type="info-circle-o" />
-          </a-tooltip>
-          <div>
-            <mini-area />
-          </div>
-          <template slot="footer">日访问量<span> {{ '1234' | NumberFormat }}</span></template>
-        </chart-card>
-      </a-col>
-      <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
-        <chart-card :loading="loading" title="支付笔数" :total="6560 | NumberFormat">
-          <a-tooltip title="指标说明" slot="action">
-            <a-icon type="info-circle-o" />
-          </a-tooltip>
-          <div>
-            <mini-bar />
-          </div>
-          <template slot="footer">转化率 <span>60%</span></template>
-        </chart-card>
-      </a-col>
-      <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
-        <chart-card :loading="loading" title="运营活动效果" total="78%">
-          <a-tooltip title="指标说明" slot="action">
-            <a-icon type="info-circle-o" />
-          </a-tooltip>
-          <div>
-            <mini-progress color="rgb(19, 194, 194)" :target="80" :percentage="78" height="8px" />
-          </div>
-          <template slot="footer">
-            <trend flag="down" style="margin-right: 16px;">
-              <span slot="term">同周比</span>
-              12%
-            </trend>
-            <trend flag="up">
-              <span slot="term">日环比</span>
-              80%
-            </trend>
-          </template>
-        </chart-card>
-      </a-col>
-    </a-row>
-
-    <a-card :loading="loading" :bordered="false" :body-style="{padding: '0'}">
-      <div class="salesCard">
-        <a-tabs default-active-key="1" size="large" :tab-bar-style="{marginBottom: '24px', paddingLeft: '16px'}">
-          <div class="extra-wrapper" slot="tabBarExtraContent">
-            <div class="extra-item">
-              <a>今日</a>
-              <a>本周</a>
-              <a>本月</a>
-              <a>本年</a>
-            </div>
-            <a-range-picker :style="{width: '256px'}" />
-          </div>
-          <a-tab-pane loading="true" tab="销售额" key="1">
-            <a-row>
-              <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24">
-                <bar :data="barData" title="销售额排行" />
-              </a-col>
-              <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24">
-                <rank-list title="门店销售排行榜" :list="rankList"/>
-              </a-col>
-            </a-row>
-          </a-tab-pane>
-          <a-tab-pane tab="访问量" key="2">
-            <a-row>
-              <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24">
-                <bar :data="barData2" title="销售额趋势" />
-              </a-col>
-              <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24">
-                <rank-list title="门店销售排行榜" :list="rankList"/>
-              </a-col>
-            </a-row>
-          </a-tab-pane>
-        </a-tabs>
-      </div>
-    </a-card>
-
-    <div class="antd-pro-pages-dashboard-analysis-twoColLayout" :class="isDesktop() ? 'desktop' : ''">
-      <a-row :gutter="24">
-        <a-col :xl="12" :lg="24" :md="24" :sm="24" :xs="24">
-          <a-card :loading="loading" :bordered="false" title="线上热门搜索" :style="{ marginTop: '24px', minHeight: '500px' }">
-            <a-dropdown :trigger="['click']" placement="bottomLeft" slot="extra">
-              <a class="ant-dropdown-link" href="#">
-                <a-icon type="ellipsis" />
-              </a>
-              <a-menu slot="overlay">
-                <a-menu-item>
-                  <a href="javascript:;">操作一</a>
-                </a-menu-item>
-                <a-menu-item>
-                  <a href="javascript:;">操作二</a>
-                </a-menu-item>
-              </a-menu>
-            </a-dropdown>
-            <a-row :gutter="68">
-              <a-col :xs="24" :sm="12" :style="{ marginBottom: ' 24px'}">
-                <number-info :total="12321" :sub-total="17.1">
-                  <span slot="subtitle">
-                    <span>搜索用户数</span>
-                    <a-tooltip title="指标说明" slot="action">
-                      <a-icon type="info-circle-o" :style="{ marginLeft: '8px' }" />
-                    </a-tooltip>
-                  </span>
-                </number-info>
-                <!-- miniChart -->
-                <div>
-                  <mini-smooth-area :style="{ height: '45px' }" :dataSource="searchUserData" :scale="searchUserScale" />
-                </div>
-              </a-col>
-              <a-col :xs="24" :sm="12" :style="{ marginBottom: ' 24px'}">
-                <number-info :total="2.7" :sub-total="26.2" status="down">
-                  <span slot="subtitle">
-                    <span>人均搜索次数</span>
-                    <a-tooltip title="指标说明" slot="action">
-                      <a-icon type="info-circle-o" :style="{ marginLeft: '8px' }" />
-                    </a-tooltip>
-                  </span>
-                </number-info>
-                <!-- miniChart -->
-                <div>
-                  <mini-smooth-area :style="{ height: '45px' }" :dataSource="searchUserData" :scale="searchUserScale" />
-                </div>
-              </a-col>
-            </a-row>
-            <div class="ant-table-wrapper">
-              <a-table
-                row-key="index"
-                size="small"
-                :columns="searchTableColumns"
-                :dataSource="searchData"
-                :pagination="{ pageSize: 5 }"
-              >
-                <span slot="range" slot-scope="text, record">
-                  <trend :flag="record.status === 0 ? 'up' : 'down'">
-                    {{ text }}%
-                  </trend>
-                </span>
-              </a-table>
-            </div>
-          </a-card>
-        </a-col>
-        <a-col :xl="12" :lg="24" :md="24" :sm="24" :xs="24">
-          <a-card class="antd-pro-pages-dashboard-analysis-salesCard" :loading="loading" :bordered="false" title="销售额类别占比" :style="{ marginTop: '24px', minHeight: '500px' }">
-            <div slot="extra" style="height: inherit;">
-              <!-- style="bottom: 12px;display: inline-block;" -->
-              <span class="dashboard-analysis-iconGroup">
-                <a-dropdown :trigger="['click']" placement="bottomLeft">
-                  <a-icon type="ellipsis" class="ant-dropdown-link" />
-                  <a-menu slot="overlay">
-                    <a-menu-item>
-                      <a href="javascript:;">操作一</a>
-                    </a-menu-item>
-                    <a-menu-item>
-                      <a href="javascript:;">操作二</a>
-                    </a-menu-item>
-                  </a-menu>
-                </a-dropdown>
-              </span>
-              <div class="analysis-salesTypeRadio">
-                <a-radio-group defaultValue="a">
-                  <a-radio-button value="a">全部渠道</a-radio-button>
-                  <a-radio-button value="b">线上</a-radio-button>
-                  <a-radio-button value="c">门店</a-radio-button>
-                </a-radio-group>
-              </div>
-
-            </div>
-            <h4>销售额</h4>
-            <div>
-              <!-- style="width: calc(100% - 240px);" -->
-              <div>
-                <v-chart :force-fit="true" :height="405" :data="pieData" :scale="pieScale">
-                  <v-tooltip :showTitle="false" dataKey="item*percent" />
-                  <v-axis />
-                  <!-- position="right" :offsetX="-140" -->
-                  <v-legend dataKey="item"/>
-                  <v-pie position="percent" color="item" :vStyle="pieStyle" />
-                  <v-coord type="theta" :radius="0.75" :innerRadius="0.6" />
-                </v-chart>
-              </div>
-
-            </div>
-          </a-card>
-        </a-col>
-      </a-row>
-    </div>
-  </div>
-</template>
-
-<script>
-import moment from 'moment'
-import { ChartCard, MiniArea, MiniBar, MiniProgress, RankList, Bar, Trend, NumberInfo, MiniSmoothArea } from '@/components'
-import { mixinDevice } from '@/utils/mixin'
-
-const barData = []
-const barData2 = []
-for (let i = 0; i < 12; i += 1) {
-  barData.push({
-    x: `${i + 1}月`,
-    y: Math.floor(Math.random() * 1000) + 200
-  })
-  barData2.push({
-    x: `${i + 1}月`,
-    y: Math.floor(Math.random() * 1000) + 200
-  })
-}
-
-const rankList = []
-for (let i = 0; i < 7; i++) {
-  rankList.push({
-    name: '白鹭岛 ' + (i + 1) + ' 号店',
-    total: 1234.56 - i * 100
-  })
-}
-
-const searchUserData = []
-for (let i = 0; i < 7; i++) {
-  searchUserData.push({
-    x: moment().add(i, 'days').format('YYYY-MM-DD'),
-    y: Math.ceil(Math.random() * 10)
-  })
-}
-const searchUserScale = [
-  {
-    dataKey: 'x',
-    alias: '时间'
-  },
-  {
-    dataKey: 'y',
-    alias: '用户数',
-    min: 0,
-    max: 10
-  }]
-
-const searchTableColumns = [
-  {
-    dataIndex: 'index',
-    title: '排名',
-    width: 90
-  },
-  {
-    dataIndex: 'keyword',
-    title: '搜索关键词'
-  },
-  {
-    dataIndex: 'count',
-    title: '用户数'
-  },
-  {
-    dataIndex: 'range',
-    title: '周涨幅',
-    align: 'right',
-    sorter: (a, b) => a.range - b.range,
-    scopedSlots: { customRender: 'range' }
-  }
-]
-const searchData = []
-for (let i = 0; i < 50; i += 1) {
-  searchData.push({
-    index: i + 1,
-    keyword: `搜索关键词-${i}`,
-    count: Math.floor(Math.random() * 1000),
-    range: Math.floor(Math.random() * 100),
-    status: Math.floor((Math.random() * 10) % 2)
-  })
-}
-
-const DataSet = require('@antv/data-set')
-
-const sourceData = [
-  { item: '家用电器', count: 32.2 },
-  { item: '食用酒水', count: 21 },
-  { item: '个护健康', count: 17 },
-  { item: '服饰箱包', count: 13 },
-  { item: '母婴产品', count: 9 },
-  { item: '其他', count: 7.8 }
-]
-
-const pieScale = [{
-  dataKey: 'percent',
-  min: 0,
-  formatter: '.0%'
-}]
-
-const dv = new DataSet.View().source(sourceData)
-dv.transform({
-  type: 'percent',
-  field: 'count',
-  dimension: 'item',
-  as: 'percent'
-})
-const pieData = dv.rows
-
-export default {
-  name: 'Analysis',
-  mixins: [mixinDevice],
-  components: {
-    ChartCard,
-    MiniArea,
-    MiniBar,
-    MiniProgress,
-    RankList,
-    Bar,
-    Trend,
-    NumberInfo,
-    MiniSmoothArea
-  },
-  data () {
-    return {
-      loading: true,
-      rankList,
-
-      // 搜索用户数
-      searchUserData,
-      searchUserScale,
-      searchTableColumns,
-      searchData,
-
-      barData,
-      barData2,
-
-      //
-      pieScale,
-      pieData,
-      sourceData,
-      pieStyle: {
-        stroke: '#fff',
-        lineWidth: 1
-      }
-    }
-  },
-  created () {
-    setTimeout(() => {
-      this.loading = !this.loading
-    }, 1000)
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  .extra-wrapper {
-    line-height: 55px;
-    padding-right: 24px;
-
-    .extra-item {
-      display: inline-block;
-      margin-right: 24px;
-
-      a {
-        margin-left: 24px;
-      }
-    }
-  }
-
-  .antd-pro-pages-dashboard-analysis-twoColLayout {
-    position: relative;
-    display: flex;
-    display: block;
-    flex-flow: row wrap;
-
-    &.desktop div[class^=ant-col]:last-child {
-      position: absolute;
-      right: 0;
-      height: 100%;
-    }
-  }
-
-  .antd-pro-pages-dashboard-analysis-salesCard {
-    height: calc(100% - 24px);
-    /deep/ .ant-card-head {
-      position: relative;
-    }
-  }
-
-  .dashboard-analysis-iconGroup {
-    i {
-      margin-left: 16px;
-      color: rgba(0,0,0,.45);
-      cursor: pointer;
-      transition: color .32s;
-      color: black;
-    }
-  }
-  .analysis-salesTypeRadio {
-    position: absolute;
-    right: 54px;
-    bottom: 12px;
-  }
-</style>
+<template>
+  <div class="page-header-index-wide">
+    <div class="menuSty">
+      <a-menu mode="horizontal" style="">
+        <a-menu-item key="zk" @click="zkData"> 支扩</a-menu-item>
+        <a-menu-item key="icon" @click="iconData"> ICON</a-menu-item>
+      </a-menu>
+    </div>
+    <a-row :gutter="10">
+      <a-col :sm="20" :md="10" :xl="4" :style="{ marginBottom: '10px' }">
+        <chart-card :loading="loading" title="本月入组数" :total="indexData.currMonthPatients">
+          <a-tooltip title="指标说明" slot="action">
+            <a-icon type="info-circle-o" />
+          </a-tooltip>
+          <template slot="footer">
+            上月入组数
+            <span>{{ indexData.lastMonthPatients }}</span>
+          </template>
+          <div class="page-header-index-img">
+            <img style="width: 64px; height: 64px" src="../../assets/home2.png">
+          </div>
+        </chart-card>
+      </a-col>
+      <a-col :sm="20" :md="10" :xl="4" :style="{ marginBottom: '10px' }">
+        <chart-card :loading="loading" title="本月提交数" :total="indexData.currMonthSubmits ">
+          <a-tooltip title="指标说明" slot="action">
+            <a-icon type="info-circle-o" />
+          </a-tooltip>
+          <template slot="footer">
+            上月提交数
+            <span>{{ indexData.lastMonthSubmits }}</span>
+          </template>
+          <div class="page-header-index-img">
+            <img style="width: 64px; height: 64px" src="../../assets/home-5.png">
+          </div>
+        </chart-card>
+      </a-col>
+      <a-col :sm="20" :md="10" :xl="4" :style="{ marginBottom: '10px' }">
+        <chart-card :loading="loading" title="本月访视数" :total="indexData.currMonthBasis">
+          <a-tooltip title="指标说明" slot="action">
+            <a-icon type="info-circle-o" />
+          </a-tooltip>
+          <template slot="footer">
+            上月访视数
+            <span>{{ indexData.lastMonthBasis }}</span>
+          </template>
+          <div class="page-header-index-img">
+            <img style="width: 64px; height: 64px" src="../../assets/home3.png">
+          </div>
+        </chart-card>
+      </a-col>
+      <a-col :sm="20" :md="10" :xl="4" :style="{ marginBottom: '10px' }">
+        <chart-card :loading="loading" title="本年患者数" :total="indexData.currYearPatients">
+          <a-tooltip title="指标说明" slot="action">
+            <a-icon type="info-circle-o" />
+          </a-tooltip>
+          <template slot="footer">
+            上年患者数
+            <span>{{ indexData.lastYearPatients }}</span>
+          </template>
+          <div class="page-header-index-img">
+            <img style="width: 64px; height: 64px" src="../../assets/home1.png">
+          </div>
+        </chart-card>
+      </a-col>
+      <a-col :sm="20" :md="10" :xl="4" :style="{ marginBottom: '10px' }">
+        <chart-card :loading="loading" title="患者总数" :total="indexData.realNum">
+          <a-tooltip title="指标说明" slot="action">
+            <a-icon type="info-circle-o" />
+          </a-tooltip>
+          <div>
+            <mini-progress color="rgb(24,144,255)" :target="indexData.completionRate" :percentage="indexData.completionRate" height="8px" />
+          </div>
+          <template slot="footer">
+            <p style="margin-right: 16px;display: inline-block;margin-bottom: 0;">
+              <span slot="term">计划数</span>
+              {{ indexData.planNum }}
+            </p>
+          </template>
+        </chart-card>
+      </a-col>
+    </a-row>
+    <a-row :gutter="10">
+      <a-col :sm="48" :md="24" :xl="12" :style="{ marginBottom: '10px' }">
+        <a-card :loading="loading" :bodyStyle="bodyStyle" title="我的工作" total="¥126,560">
+          <a-row :gutter="10">
+            <a-col :xs="24" :sm="12" :style="{ marginBottom: ' 12px' }">
+              <router-link :to="{name:'Task'}">
+                <div class="card-wait-data">
+                  <span class="myIcon">
+                    <my-icon type="iconziyuan1" /></span>
+                  <div>
+                    <p>待办访视</p>
+                    <h1>{{ myWork.nodoVisitsNum }}</h1>
+                  </div>
+                </div>
+              </router-link>
+            </a-col>
+            <a-col :xs="24" :sm="12" :style="{ marginBottom: ' 12px' }">
+              <router-link :to="{name:'caseTransferReview'}">
+                <div class="card-wait-data">
+                  <span class="myIcon">
+                    <my-icon type="iconqitabingli" /></span>
+                  <div>
+                    <p>待审转移病例</p>
+                    <h1>{{ myWork.noDoPatientTransferNum }}</h1>
+                  </div>
+                </div>
+              </router-link>
+            </a-col>
+            <a-col :xs="24" :sm="12" :style="{ marginBottom: ' 12px' }">
+              <router-link :to="{name:'wxQuestionReview'}">
+                <div class="card-wait-data">
+                  <span class="myIcon">
+                    <my-icon type="iconziyuan" /></span>
+                  <div>
+                    <p>待审问卷</p>
+                    <h1>{{ myWork.noDoQuestionNum }}</h1>
+                  </div>
+                </div>
+              </router-link>
+            </a-col>
+            <a-col :xs="24" :sm="12" :style="{ marginBottom: ' 12px' }">
+              <router-link :to="{name:'wxPatientReportReview'}">
+                <div class="card-wait-data">
+                  <span class="myIcon">
+                    <my-icon type="icondaishenzhuanyibingli" /></span>
+                  <div>
+                    <p>待审阅报告</p>
+                    <h1>{{ myWork.otherNum }}</h1>
+                  </div>
+                </div>
+              </router-link>
+            </a-col>
+          </a-row>
+        </a-card>
+      </a-col>
+      <a-col :sm="48" :md="24" :xl="12" :style="{ marginBottom: '10px' }">
+        <a-card :loading="loading" title="病例省份占比">
+          <div>
+            <pie></pie>
+          </div>
+        </a-card>
+      </a-col>
+    </a-row>
+    <a-row :gutter="10">
+      <a-col :sm="48" :md="24" :lg="14" :style="{ marginBottom: '10px' }">
+        <a-card :loading="loading" :bordered="false" :body-style="{ padding: '0' }">
+          <div class="salesCard tooltip-y">
+            <a-tabs default-active-key="1" size="large" :tab-bar-style="{ marginBottom: '10px', paddingLeft: '16px' }">
+              <a-tab-pane loading="true" tab="新增病例数" key="1">
+                <a-row>
+                  <a-col :push="1" :xl="22" :lg="22" :md="22" :sm="48" :xs="48">
+                    <bar :data="eachMonthPatients" title="新增病例数" />
+                  </a-col>
+                </a-row>
+              </a-tab-pane>
+              <a-tab-pane tab="新增访视数" key="2">
+                <a-row>
+                  <a-col :push="1" :xl="22" :lg="22" :md="22" :sm="48" :xs="48">
+                    <bar :data="eachMonthBasiss" title="新增访视数" />
+                  </a-col>
+                </a-row>
+              </a-tab-pane>
+            </a-tabs>
+          </div>
+        </a-card>
+      </a-col>
+      <a-col :sm="48" :md="24" :lg="10" :style="{ marginBottom: '10px' }">
+          <a-card :loading="loading" title="资料下载" :tab-list="tabList" :active-tab-key="key"
+      @tabChange="key => onTabChange(key, 'key')" :bordered="false" :body-style="{ padding: '0' }" :style="{ height: '208px' }">
+            <div class="card-wrap" v-if="key === '3'">
+              <rank-list :list="rankList3" />
+            </div>
+            <div class="card-wrap" v-if="key === '4'">
+              <rank-list :list="rankList4" />
+            </div>
+            <div class="card-wrap" v-if="key === '5'">
+              <rank-list :list="rankList5" />
+            </div>
+        </a-card>
+      </a-col>
+      <a-col :sm="48" :md="24" :lg="10" :style="{ marginBottom: '10px' }">
+          <a-card :loading="loading" title="伦理批件上传" :bordered="false" :body-style="{ padding: '0' }" :style="{ height: '140px' }">
+            <div class="uploadFile" :style="file" >
+              <p v-if="showFile">
+                  <img style="height: 30px;" src="../../assets/pdf.png"/>
+              </p>
+              <div v-if="showList" style="margin-bottom: 10px;">
+                <img src="../../assets/file.png" style="margin: -1px 10px 0 0;"/>
+                <span style="color: #3aa1ff;">{{fileName}}</span>
+              </div>
+              <a-upload
+                name="file"
+                :multiple="true"
+                :action="uploadUrl"
+                :headers="headers"
+                :showUploadList= "false"
+                @change="handleChange"
+              >
+                <a-button>上传文件</a-button>
+              </a-upload>
+            </div>
+            
+        </a-card>
+      </a-col>
+    </a-row>
+  </div>
+</template>
+<script>
+import moment from 'moment';
+import { Pie, ChartCard, MiniArea, MiniBar, MiniProgress, RankList, Bar, NumberInfo, MiniSmoothArea } from '@/components';
+import { mixinDevice } from '@/utils/mixin';
+import { getAllNumbers, getMyWork, getPatientsAndBasiss, getProvinceCompare, manualList,uploadFlie,fileList } from '@/api/home';
+import { MyIcon } from '@/components/_util/util';
+
+export default {
+  name: 'Analysis',
+  mixins: [mixinDevice],
+  components: {
+    ChartCard,
+    MiniArea,
+    MiniBar,
+    MiniProgress,
+    RankList,
+    Bar,
+    NumberInfo,
+    MiniSmoothArea,
+    Pie,
+    MyIcon
+  },
+  data() {
+    return {
+      bodyStyle: {
+        padding: '12px 20px',
+      },
+      indexData: {},
+      myWork: {},
+      loading: true,
+      rankList1: [],
+      rankList2: [],
+      rankList3: [],
+      rankList4: [],
+      rankList5: [],
+      eachMonthPatients: [],
+      eachMonthBasiss: [],
+      pieStyle: {
+        stroke: '#fff',
+        lineWidth: 1
+      },
+      headers: {
+        authorization: 'authorization-text',
+      },
+      uploadUrl: process.env.VUE_APP_API_BASE_URL + 'ethics/uploadFile',
+      showFile:true,
+      showList:false,
+      fileName:'',
+      current: '',
+      file:"text-align: center; padding: 10px 0 10px 25px;",
+      tabList: [{key: '3', tab: '伦理'},{key: '4', tab: '操作手册'},{key: '5', tab: '其他'}],
+      key: '3'
+    };
+  },
+  created() {
+    var that = this
+    fileList().then(res => {
+      if(res.fileName){
+          this.showFile = false
+          this.showList = true
+          this.file = "text-align: left; padding: 10px 0 10px 25px;"
+      }
+      this.fileName = res.fileName;
+    });
+    getAllNumbers('').then(res => {
+      this.indexData = res.data.allNumbers;
+    });
+    getMyWork().then(res => {
+      this.myWork = res.data.myWork;
+    });
+    this.getAllPatientData('')
+    manualList().then(res => {
+      that.rankList1 = _.filter(res.data,function(v){return v.type === 1})
+      that.rankList2 = _.filter(res.data,function(v){return v.type === 2})
+      that.rankList3 = _.filter(res.data,function(v){return v.type === 3})
+      that.rankList4 = _.filter(res.data,function(v){return v.type === 4})
+      that.rankList5 = _.filter(res.data,function(v){return v.type === 5})
+    })
+    setTimeout(() => {
+      this.loading = !this.loading;
+    }, 1000)
+    // this.loadComments()
+  },
+  methods: {
+    getAllPatientData (data) {
+      var that = this
+      getPatientsAndBasiss(data).then(res => {
+        that.eachMonthPatients = []
+        that.eachMonthBasiss = []
+        const keyMap = { monthDate: 'x', monthPatients: 'y' };
+        const keyMap1 = { monthDate: 'x', monthBasis: 'y' }
+        _.each(res.data.eachMonthPatients, function(item, index) {
+          //  console.log(item)
+          item.monthDate = item.monthDate + "月"
+          // item.monthPatients=item.monthPatients;
+          that.eachMonthPatients[index] = Object.keys(item).reduce((newData, key) => {
+            let newKey = keyMap[key] || key
+            newData[newKey] = item[key]
+            return newData
+          }, {})
+        })
+        _.each(res.data.eachMonthBasiss, function(item, index) {
+          //  console.log(item)
+          item.monthDate = item.monthDate + "月";
+          that.eachMonthBasiss[index] = Object.keys(item).reduce((newData, key) => {
+            let newKey = keyMap1[key] || key;
+            newData[newKey] = item[key];
+            return newData;
+          }, {})
+        })
+      })
+    },
+    // loadComments() {
+    //   var list = JSON.parse(localStorage.getItem("pro__Access-Token"));
+    //   this.uploadUrl = list.value.uploadPicURL;
+    // },
+    zkData () {
+      getAllNumbers(-1).then(res => {
+        this.indexData = res.data.allNumbers;
+      });
+      this.getAllPatientData(-1)
+    },
+    iconData () {
+      getAllNumbers(1).then(res => {
+        this.indexData = res.data.allNumbers;
+      });
+      this.getAllPatientData(1)
+    },
+    handleChange(info) {
+       
+        var url = info.file.response.fileName
+        var fileNames = info.file.response.originalFileName
+        // 判断文件格式
+        var filextension = fileNames.substring(fileNames.lastIndexOf("."),fileNames.length);
+        filextension = filextension.toLowerCase();
+
+        if (filextension == '.pdf') {
+          const params = new URLSearchParams()
+          params.append('url', url)
+          params.append('fileName', fileNames)
+          uploadFlie(params).then(res => {
+            this.$message.success('文件上传成功');
+            this.fileName = info.file.response.originalFileName
+            this.showFile = false
+            this.showList = true
+            this.file = "text-align: left; padding: 10px 0 10px 25px;"
+          })
+          .catch(()=>{
+            this.$message.error('文件上传失败');
+          }) 
+          
+        }else{
+          this.$message.error('对不起,系统仅支持pdf格式的文件');
+          return
+        }
+        
+    },
+    onTabChange(key, type) {
+      console.log(key, type);
+      this[type] = key;
+    },
+  },
+};
+</script>
+<style lang="less" scoped>
+/deep/ .ant-col-sm-20 {
+  width: 20%;
+}
+/deep/.ant-pro-trend .up {
+  color: #1aa355;
+}
+
+/deep/.ant-tabs .ant-tabs-large-bar .ant-tabs-tab {
+  padding: 12px 16px;
+}
+
+/deep/.ant-card-head-title {
+  padding: 10px 0px;
+}
+
+.extra-wrapper {
+  line-height: 55px;
+  padding-right: 24px;
+
+  .extra-item {
+    display: inline-block;
+    margin-right: 24px;
+
+    a {
+      margin-left: 24px;
+    }
+  }
+}
+
+.antd-pro-pages-dashboard-analysis-twoColLayout {
+  position: relative;
+  display: flex;
+  display: block;
+  flex-flow: row wrap;
+
+  &.desktop div[class^='ant-col']:last-child {
+    position: absolute;
+    right: 0;
+    height: 100%;
+  }
+}
+
+.antd-pro-pages-dashboard-analysis-salesCard {
+  height: calc(100% - 24px);
+
+  /deep/ .ant-card-head {
+    position: relative;
+  }
+}
+
+.dashboard-analysis-iconGroup {
+  i {
+    margin-left: 16px;
+    color: rgba(0, 0, 0, 0.45);
+    cursor: pointer;
+    transition: color 0.32s;
+    color: black;
+  }
+}
+
+.analysis-salesTypeRadio {
+  position: absolute;
+  right: 54px;
+  bottom: 12px;
+}
+
+.card-wait-data {
+  box-sizing: border-box;
+  padding: 20px;
+  background-color: #f7f8f8;
+  height: 90px;
+  background-image: url('');
+
+  span.myIcon {
+    display: inline-block;
+    vertical-align: top;
+    width: 40px;
+
+    .anticon {
+      font-size: 25px;
+    }
+  }
+
+  div {
+    display: inline-block;
+
+    p {
+      margin-bottom: 0px;
+    }
+
+    h1 {
+      font-size: 30px;
+      font-weight: normal;
+      color: #000000;
+    }
+  }
+}
+
+/deep/.tooltip-y {
+  /deep/.g2-tooltip-list li {
+    font-size: 0px;
+    position: relative;
+
+    /deep/.g2-tooltip-marker {
+      display: none !important;
+    }
+
+    /deep/.g2-tooltip-value {
+      position: absolute;
+      font-size: 12px;
+      left: -30px;
+    }
+  }
+}
+
+.page-header-index-img {
+  position: absolute;
+  top: -50px;
+  right: 40px;
+}
+
+.rank{
+  padding: 0 32px 32px 30px;
+}
+// 上传文件
+.uploadFile button{
+  background: #3aa1ff;
+  border: none;
+  color: white;
+  border-radius: 10px;
+  padding: 2px 10px;
+  font-size: 14px;
+  line-height: 22px;
+}
+
+.sxDataBox{
+  position: absolute;
+  left: 100px;
+  top: 100px;
+}
+
+.menuSty {
+  position: fixed;
+  top: 17px;
+  z-index: 999;
+  left: 276px;
+}
+
+/deep/ .ant-card-head-wrapper{
+  float: left;
+}
+
+/deep/ .ant-card-head .ant-tabs{
+  float: right;
+  clear: none;
+}
+/deep/ .card-wrap{
+  height: calc(208px - 48px);
+  overflow: auto;
+}
+
+</style>
\ No newline at end of file
diff --git a/src/views/dashboard/Workplace.vue b/src/views/dashboard/Workplace.vue
index 1d2e8fe767..91bff5fd6a 100644
--- a/src/views/dashboard/Workplace.vue
+++ b/src/views/dashboard/Workplace.vue
@@ -1,360 +1,173 @@
 
 <template>
-  <page-view :avatar="avatar" :title="false">
-    <div slot="headerContent">
-      <div class="title">{{ timeFix }},{{ user.name }}<span class="welcome-text">,{{ welcome() }}</span></div>
-      <div>前端工程师 | 蚂蚁金服 - 某某某事业群 - VUE平台</div>
-    </div>
-    <div slot="extra">
-      <a-row class="more-info">
-        <a-col :span="8">
-          <head-info title="项目数" content="56" :center="false" :bordered="false"/>
-        </a-col>
-        <a-col :span="8">
-          <head-info title="团队排名" content="8/24" :center="false" :bordered="false"/>
-        </a-col>
-        <a-col :span="8">
-          <head-info title="项目访问" content="2,223" :center="false" />
-        </a-col>
-      </a-row>
-    </div>
-
-    <div>
-      <a-row :gutter="24">
-        <a-col :xl="16" :lg="24" :md="24" :sm="24" :xs="24">
-          <a-card
-            class="project-list"
-            :loading="loading"
-            style="margin-bottom: 24px;"
-            :bordered="false"
-            title="进行中的项目"
-            :body-style="{ padding: 0 }">
-            <a slot="extra">全部项目</a>
-            <div>
-              <a-card-grid class="project-card-grid" :key="i" v-for="(item, i) in projects">
-                <a-card :bordered="false" :body-style="{ padding: 0 }">
-                  <a-card-meta>
-                    <div slot="title" class="card-title">
-                      <a-avatar size="small" :src="item.cover"/>
-                      <a>{{ item.title }}</a>
-                    </div>
-                    <div slot="description" class="card-description">
-                      {{ item.description }}
-                    </div>
-                  </a-card-meta>
-                  <div class="project-item">
-                    <a href="/#/">科学搬砖组</a>
-                    <span class="datetime">9小时前</span>
-                  </div>
-                </a-card>
-              </a-card-grid>
-            </div>
-          </a-card>
-
-          <a-card :loading="loading" title="动态" :bordered="false">
-            <a-list>
-              <a-list-item :key="index" v-for="(item, index) in activities">
-                <a-list-item-meta>
-                  <a-avatar slot="avatar" :src="item.user.avatar" />
-                  <div slot="title">
-                    <span>{{ item.user.nickname }}</span>&nbsp;
-                    在&nbsp;<a href="#">{{ item.project.name }}</a>&nbsp;
-                    <span>{{ item.project.action }}</span>&nbsp;
-                    <a href="#">{{ item.project.event }}</a>
-                  </div>
-                  <div slot="description">{{ item.time }}</div>
-                </a-list-item-meta>
-              </a-list-item>
-            </a-list>
-          </a-card>
-        </a-col>
-        <a-col
-          style="padding: 0 12px"
-          :xl="8"
-          :lg="24"
-          :md="24"
-          :sm="24"
-          :xs="24">
-          <a-card title="快速开始 / 便捷导航" style="margin-bottom: 24px" :bordered="false" :body-style="{padding: 0}">
-            <div class="item-group">
-              <a>操作一</a>
-              <a>操作二</a>
-              <a>操作三</a>
-              <a>操作四</a>
-              <a>操作五</a>
-              <a>操作六</a>
-              <a-button size="small" type="primary" ghost icon="plus">添加</a-button>
-            </div>
-          </a-card>
-          <a-card title="XX 指数" style="margin-bottom: 24px" :loading="radarLoading" :bordered="false" :body-style="{ padding: 0 }">
-            <div style="min-height: 400px;">
-              <!-- :scale="scale" :axis1Opts="axis1Opts" :axis2Opts="axis2Opts"  -->
-              <radar :data="radarData" />
+  <div>
+    <button @click="submit">提交</button>
+    <div v-for="(qu1, index) in list" :key="index">
+      <p class="fl">{{qu1.questionName||''}}</p>
+      <div v-if="qu1.simple > 0" class="fl" style="margin-left: 50px;">
+        <label><input type="radio" :name="qu1.basisElementId" :value="1" :checked="qu1.answers && qu1.answers.length && qu1.answers[0].elementNumValue === 1">是</label>
+        <label><input type="radio" :name="qu1.basisElementId" :value="-1" :checked="qu1.answers && qu1.answers.length && qu1.answers[0].elementNumValue === -1">否</label>
+      </div>
+      <div v-if="qu1.simple < 0 && qu1.isWrite > 0">
+        <input type="text" style="margin-left: 50px;" :name="qu1.basisElementId" :value="qu1.answers && qu1.answers.length && qu1.answers[0].elementTextValue">
+      </div>
+      <div v-if="qu1.hasChild > 0" :class="{clear: qu1.showType === 2}">
+        <!-- 单选 -->
+        <div class="radio-group" v-if="qu1.isRadio > 0">
+          <div :class="{fl: qu1.showType !== 2}" v-for="(op,index) in qu1.childList" :key="index">
+            <label :class="{fl: qu1.showType !== 2}"><input type="radio" :name="op.parentId" :value="op.basisElementId">{{op.questionName||''}}</label>
+            <p :class="{fl: qu1.showType !== 2}" v-if="op.isWrite > 0"><input type="text" name="">{{op.unit}}</p>
+          </div>
+        </div>
+        <!-- 多选 -->
+        <div class="check-group" v-if="qu1.isRadio < 0">
+          <div :class="{fl: qu1.showType !== 2}" class="clear" v-for="(op,index) in qu1.childList" :key="index" style="margin-right: 20px;">
+            <label class="fl"><input type="checkbox" :name="op.parentId" :value="op.basisElementId" :data-nip="op.isWrite" :checked="op.answers && op.answers.length && op.answers[0].elementNumValue > 0">{{op.questionName||''}}</label>
+            <p style="margin-left: 10px;" class="fl" v-if="op.isWrite > 0"><input type="text" :name="[op.basisElementId+'-text']" :value="op.answers && op.answers.length && op.answers[0].elementTextValue || ''">{{op.unit}}</p>
+            <!-- 子选项 -->
+            <div v-if="op.hasChild > 0">
+              <div class="radio-group" v-if="op.isRadio > 0">
+                <div v-for="(sub,index) in op.childList">
+                  <label class="fl"><input type="radio" :name="sub.parentId" :value="sub.basisElementId">{{sub.questionName||''}}</label>
+                </div>
+              </div>
+              <div class="check-group" v-if="op.isRadio < 0">
+                <div v-for="(sub,index) in op.childList">
+                  <label class="fl"><input type="checkbox" :name="sub.parentId" :value="sub.basisElementId">{{sub.questionName||''}}</label>
+                </div>
+              </div>
             </div>
-          </a-card>
-          <a-card :loading="loading" title="团队" :bordered="false">
-            <div class="members">
-              <a-row>
-                <a-col :span="12" v-for="(item, index) in teams" :key="index">
-                  <a>
-                    <a-avatar size="small" :src="item.avatar" />
-                    <span class="member">{{ item.name }}</span>
-                  </a>
-                </a-col>
-              </a-row>
+          </div>
+        </div>
+        <!-- 是题目,下面有选项 -->
+        <div v-else>
+          <div v-for="(sub, index) in qu1.childList" :key="index" class="clear">
+            <p :class="{fl: sub.showType === 1}">{{sub.sort}}.{{sub.questionName||''}}:</p>
+            <p :class="{fl: sub.showType === 1}" v-if="sub.isWrite > 0"><input type="text" :name="sub.basisElementId" :value="sub.answers && sub.answers.length && sub.answers[0].elementTextValue||''">{{sub.unit}}</p>
+            <div class="radio-group" v-if="sub.isRadio > 0">
+              <div v-for="(subOp,index) in sub.childList" :key="index">
+                <label :class="{fl: sub.showType === 1}"><input type="radio" :name="subOp.parentId" :value="subOp.basisElementId" :data-answer-id="subOp.answers && subOp.answers.length ? subOp.answers[0].basisAnswerId : ''" :checked="subOp.answers && subOp.answers.length && subOp.answers[0].elementNumValue > 0">{{subOp.questionName||''}}</label>
+              </div>
             </div>
-          </a-card>
-        </a-col>
-      </a-row>
+            <div class="check-group" v-if="sub.isRadio < 0"></div>
+          </div>
+        </div>
+      </div>
+      <div class="clear"></div>
     </div>
-  </page-view>
+  </div>
 </template>
 
 <script>
-import { timeFix } from '@/utils/util'
-import { mapGetters } from 'vuex'
-
-import { PageView } from '@/layouts'
-import HeadInfo from '@/components/tools/HeadInfo'
-import { Radar } from '@/components'
-
-import { getRoleList, getServiceList } from '@/api/manage'
-
-const DataSet = require('@antv/data-set')
+import { getElementsAnswer, submit } from '@/api/basis'
+import _ from 'lodash'
+import $ from 'jquery'
 
 export default {
+
   name: 'Workplace',
-  components: {
-    PageView,
-    HeadInfo,
-    Radar
-  },
   data () {
     return {
-      timeFix: timeFix(),
-      avatar: '',
-      user: {},
-
-      projects: [],
-      loading: true,
-      radarLoading: true,
-      activities: [],
-      teams: [],
-
-      // data
-      axis1Opts: {
-        dataKey: 'item',
-        line: null,
-        tickLine: null,
-        grid: {
-          lineStyle: {
-            lineDash: null
-          },
-          hideFirstLine: false
-        }
-      },
-      axis2Opts: {
-        dataKey: 'score',
-        line: null,
-        tickLine: null,
-        grid: {
-          type: 'polygon',
-          lineStyle: {
-            lineDash: null
-          }
-        }
-      },
-      scale: [{
-        dataKey: 'score',
-        min: 0,
-        max: 80
-      }],
-      axisData: [
-        { item: '引用', a: 70, b: 30, c: 40 },
-        { item: '口碑', a: 60, b: 70, c: 40 },
-        { item: '产量', a: 50, b: 60, c: 40 },
-        { item: '贡献', a: 40, b: 50, c: 40 },
-        { item: '热度', a: 60, b: 70, c: 40 },
-        { item: '引用', a: 70, b: 50, c: 40 }
-      ],
-      radarData: []
+      list: []
     }
   },
-  computed: {
-    userInfo () {
-      return this.$store.getters.userInfo
-    }
-  },
-  created () {
-    this.user = this.userInfo
-    this.avatar = this.userInfo.avatar
-
-    getRoleList().then(res => {
-      // console.log('workplace -> call getRoleList()', res)
-    })
-
-    getServiceList().then(res => {
-      // console.log('workplace -> call getServiceList()', res)
-    })
-  },
   mounted () {
-    this.getProjects()
-    this.getActivity()
-    this.getTeams()
-    this.initRadar()
+    var that = this
+    var params = new URLSearchParams();
+    params.append('basisMaskId', 10)
+    params.append('patientBasisId', 1)
+    getElementsAnswer(params)
+    .then(res => {
+      that.list = res.data
+    })
   },
   methods: {
-    ...mapGetters(['nickname', 'welcome']),
     getProjects () {
-      this.$http.get('/list/search/projects')
+      this.$http.get('/element/list')
         .then(res => {
-          this.projects = res.result && res.result.data
-          this.loading = false
+          this.list = res.result && res.result.second
         })
     },
-    getActivity () {
-      this.$http.get('/workplace/activity')
-        .then(res => {
-          this.activities = res.result
-        })
-    },
-    getTeams () {
-      this.$http.get('/workplace/teams')
-        .then(res => {
-          this.teams = res.result
-        })
-    },
-    initRadar () {
-      this.radarLoading = true
-
-      this.$http.get('/workplace/radar')
-        .then(res => {
-          const dv = new DataSet.View().source(res.result)
-          dv.transform({
-            type: 'fold',
-            fields: ['个人', '团队', '部门'],
-            key: 'user',
-            value: 'score'
+    submit(){
+      var result = [];
+      var a = _.each(this.list, function(item){
+        if(item.simple > 0){
+          result.push({
+            basisAnswerId: (item.answers && item.answers.length) ? item.answers[0].basisAnswerId : '',
+            basisElementId: item.basisElementId,
+            elementNumValue: $('input[name="' + item.basisElementId + '"]:checked').val()
           })
-
-          this.radarData = dv.rows
-          this.radarLoading = false
-        })
+        }else if(item.isWrite > 0){
+          result.push({
+            basisAnswerId: (item.answers && item.answers.length) ? item.answers[0].basisAnswerId : '',
+            basisElementId: item.basisElementId,
+            elementTextValue: $('input[name="' + item.basisElementId + '"]').val()
+          }) 
+        }
+        if(item.hasChild > 0){
+          if(item.childList[0].type === 1){
+            _.each(item.childList, function(sub){
+              if(sub.isWrite > 0){
+                result.push({
+                  basisAnswerId: (sub.answers && sub.answers.length) ? sub.answers[0].basisAnswerId : '',
+                  basisElementId: sub.basisElementId,
+                  elementTextValue: $('input[name="' + sub.basisElementId + '"]').val()
+                })
+              }
+              $('input[name="' + sub.basisElementId + '"][type!="text"]').each(function(i,v){
+                result.push({
+                  basisAnswerId: $(v).data('answerId'),
+                  basisElementId: parseInt($(v).val()),
+                  elementNumValue: $(v).prop('checked') ? 1 : -1
+                })
+              })
+            })
+          }else{
+            $('input[name="' + item.basisElementId + '"][type!="text"]').each(function(i,v){
+              if($(v).data('nip') && $(v).data('nip') > 0){
+                result.push({
+                  basisAnswerId: (item.answers && item.answers.length) ? item.answers[0].basisAnswerId : '',
+                  basisElementId: parseInt($(v).val()),
+                  elementNumValue: $(v).prop('checked') ? 1 : -1,
+                  elementTextValue: $('[name="' + $(v).val() +'-text"]').val()
+                })
+              }else{
+                result.push({
+                  basisAnswerId: (item.answers && item.answers.length) ? item.answers[0].basisAnswerId : '',
+                  basisElementId: parseInt($(v).val()),
+                  elementNumValue: $(v).prop('checked') ? 1 : -1
+                })
+              }
+            })
+          }
+        }
+      })
+      console.log(result)
+      var patientBasis = {patientBasisId:1,"patientId":1,"type":1,"executeId":1,"executeStatus":1,"status":0}
+      var patientBasisMark = {patientBasisId:1,"basisMarkId":10,"basisMarkName":"其他实验室检查","level":2,"progress":"10%"}
+      var params = new URLSearchParams();
+      params.append('basisAnswer', JSON.stringify(result))
+      params.append('patientBasis', JSON.stringify(patientBasis))
+      params.append('patientBasisMark', JSON.stringify(patientBasisMark))
+      submit(params)
+      .then(res => {
+        console.log(res)
+        alert('保存成功')
+        location.href = location.href
+      })
+      .catch(error => {
+        console.log(error)
+      })
     }
   }
 }
 </script>
 
 <style lang="less" scoped>
-  .project-list {
-
-    .card-title {
-      font-size: 0;
-
-      a {
-        color: rgba(0, 0, 0, 0.85);
-        margin-left: 12px;
-        line-height: 24px;
-        height: 24px;
-        display: inline-block;
-        vertical-align: top;
-        font-size: 14px;
-
-        &:hover {
-          color: #1890ff;
-        }
-      }
-    }
-    .card-description {
-      color: rgba(0, 0, 0, 0.45);
-      height: 44px;
-      line-height: 22px;
-      overflow: hidden;
-    }
-    .project-item {
-      display: flex;
-      margin-top: 8px;
-      overflow: hidden;
-      font-size: 12px;
-      height: 20px;
-      line-height: 20px;
-      a {
-        color: rgba(0, 0, 0, 0.45);
-        display: inline-block;
-        flex: 1 1 0;
-
-        &:hover {
-          color: #1890ff;
-        }
-      }
-      .datetime {
-        color: rgba(0, 0, 0, 0.25);
-        flex: 0 0 auto;
-        float: right;
-      }
-    }
-    .ant-card-meta-description {
-      color: rgba(0, 0, 0, 0.45);
-      height: 44px;
-      line-height: 22px;
-      overflow: hidden;
-    }
+  .fl{
+    float: left;
   }
-
-  .item-group {
-    padding: 20px 0 8px 24px;
-    font-size: 0;
-    a {
-      color: rgba(0, 0, 0, 0.65);
-      display: inline-block;
-      font-size: 14px;
-      margin-bottom: 13px;
-      width: 25%;
-    }
-  }
-
-  .members {
-    a {
-      display: block;
-      margin: 12px 0;
-      line-height: 24px;
-      height: 24px;
-      .member {
-        font-size: 14px;
-        color: rgba(0, 0, 0, .65);
-        line-height: 24px;
-        max-width: 100px;
-        vertical-align: top;
-        margin-left: 12px;
-        transition: all 0.3s;
-        display: inline-block;
-      }
-      &:hover {
-        span {
-          color: #1890ff;
-        }
-      }
-    }
+  .clear{
+    clear: both;
   }
-
-  .mobile {
-
-    .project-list {
-
-      .project-card-grid {
-        width: 100%;
-      }
-    }
-
-    .more-info {
-      border: 0;
-      padding-top: 16px;
-      margin: 16px 0 16px;
-    }
-
-    .headerContent .title .welcome-text {
-      display: none;
-    }
-  }
-
 </style>
diff --git a/src/views/form/BasicForm.vue b/src/views/form/BasicForm.vue
index 2107f74972..bbbe1e9c7e 100644
--- a/src/views/form/BasicForm.vue
+++ b/src/views/form/BasicForm.vue
@@ -1,6 +1,16 @@
 <template>
   <a-card :body-style="{padding: '24px 32px'}" :bordered="false">
     <a-form @submit="handleSubmit" :form="form">
+      <a-form-item v-for="(item, index) in list" 
+      :key="index" :label="item.sort + '.' + item.questionName" 
+      :labelCol="{lg: {span: 7}, sm: {span: 7}}"
+      :wrapperCol="{lg: {span: 10}, sm: {span: 17} }">
+        <a-radio-group v-decorator="[item.basisElementCopyId+'', {rules: [{required: item.required > 0, message: '请选择一个'}], initialValue: 2}]" v-model="item.basisElementId" :name="item.basisElementCopyId+''">
+          <a-radio :value="1">公开</a-radio>
+          <a-radio :value="2">部分公开</a-radio>
+          <a-radio :value="3">不公开</a-radio>
+        </a-radio-group>
+      </a-form-item>
       <a-form-item
         label="标题"
         :labelCol="{lg: {span: 7}, sm: {span: 7}}"
@@ -8,7 +18,7 @@
         <a-input
           v-decorator="[
             'name',
-            {rules: [{ required: true, message: '请输入标题' }]}
+            {rules: [{ required: checkRe, message: '请输入标题' }], initialValue: '风动旛动'}
           ]"
           name="name"
           placeholder="给目标起个名字" />
@@ -22,7 +32,7 @@
           style="width: 100%"
           v-decorator="[
             'buildTime',
-            {rules: [{ required: true, message: '请选择起止日期' }]}
+            {rules: [{ required: true, message: '请选择起止日期' }], initialValue: [moment('2019-10-01'), moment('2019-10-02')]}
           ]" />
       </a-form-item>
       <a-form-item
@@ -37,6 +47,17 @@
             {rules: [{ required: true, message: '请输入目标描述' }]}
           ]" />
       </a-form-item>
+      <a-form-item
+        label="多选框"
+        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
+        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }"
+        required="true">
+        <a-checkbox-group v-decorator="['checkbox', {rules: [{required: true, message: '请选择'}], initialValue: [1,2]}]">
+          <a-checkbox :value="1">风动旛动</a-checkbox>
+          <a-checkbox :value="2">辅导辅导费</a-checkbox>
+          <a-checkbox :value="3">法典菲尔</a-checkbox>
+        </a-checkbox-group>
+      </a-form-item>
       <a-form-item
         label="衡量标准"
         :labelCol="{lg: {span: 7}, sm: {span: 7}}"
@@ -64,7 +85,6 @@
         label="邀评人"
         :labelCol="{lg: {span: 7}, sm: {span: 7}}"
         :wrapperCol="{lg: {span: 10}, sm: {span: 17} }"
-        :required="false"
       >
         <a-input placeholder="请直接 @姓名/工号,最多可邀请 5 人" />
       </a-form-item>
@@ -72,31 +92,10 @@
         label="权重"
         :labelCol="{lg: {span: 7}, sm: {span: 7}}"
         :wrapperCol="{lg: {span: 10}, sm: {span: 17} }"
-        :required="false"
       >
         <a-input-number :min="0" :max="100" />
         <span> %</span>
       </a-form-item>
-      <a-form-item
-        label="目标公开"
-        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
-        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }"
-        :required="false"
-        help="客户、邀评人默认被分享"
-      >
-        <a-radio-group v-model="value">
-          <a-radio :value="1">公开</a-radio>
-          <a-radio :value="2">部分公开</a-radio>
-          <a-radio :value="3">不公开</a-radio>
-        </a-radio-group>
-        <a-form-item>
-          <a-select mode="multiple" v-if="value === 2">
-            <a-select-option value="4">同事一</a-select-option>
-            <a-select-option value="5">同事二</a-select-option>
-            <a-select-option value="6">同事三</a-select-option>
-          </a-select>
-        </a-form-item>
-      </a-form-item>
       <a-form-item
         :wrapperCol="{ span: 24 }"
         style="text-align: center"
@@ -109,24 +108,35 @@
 </template>
 
 <script>
+import moment from 'moment'
 export default {
   name: 'BaseForm',
   data () {
     return {
       description: '表单页用于向用户收集或验证信息,基础表单常见于数据项较少的表单场景。',
-      value: 1,
+      value: undefined,
 
       // form
-      form: this.$form.createForm(this)
-
+      form: this.$form.createForm(this),
+      list: [{"isReport":0,"answers":[{"basisAnswerId":56,"elementTextValue":"","elementNumValue":-1,"basisElementId":1001}],"simple":1,"type":1,"required":1,"childEleName":"","showType":0,"event":"","elementId":1001,"level":1,"questionName":"留全血:","sort":1,"isRadio":0,"isShow":0,"unit":"","basisElementCopyId":1001,"basisElementId":1,"hasChild":-1,"isProgress":1,"logicValue":0,"isWrite":-1}]
+    }
+  },
+  computed: {
+    checkRe() {
+      return function(e){
+        console.log(e)
+        return false
+      }
     }
   },
+  created() {
+  },
   methods: {
-
+    moment,
     // handler
     handleSubmit (e) {
       e.preventDefault()
-      this.form.validateFields((err, values) => {
+      this.form.validateFieldsAndScroll((err, values) => {
         if (!err) {
           // eslint-disable-next-line no-console
           console.log('Received values of form: ', values)
diff --git a/src/views/form/advancedForm/AdvancedForm.vue b/src/views/form/advancedForm/AdvancedForm.vue
index 596aabfa67..4b0c7db5c6 100644
--- a/src/views/form/advancedForm/AdvancedForm.vue
+++ b/src/views/form/advancedForm/AdvancedForm.vue
@@ -229,7 +229,7 @@ export default {
     validate () {
       const { $refs: { repository, task }, $notification } = this
       const repositoryForm = new Promise((resolve, reject) => {
-        repository.form.validateFields((err, values) => {
+        repository.form.validateFieldsAndScroll((err, values) => {
           if (err) {
             reject(err)
             return
@@ -238,7 +238,7 @@ export default {
         })
       })
       const taskForm = new Promise((resolve, reject) => {
-        task.form.validateFields((err, values) => {
+        task.form.validateFieldsAndScroll((err, values) => {
           if (err) {
             reject(err)
             return
diff --git a/src/views/form/advancedForm/RepositoryForm.vue b/src/views/form/advancedForm/RepositoryForm.vue
index 6b326aa0de..6af8546c32 100644
--- a/src/views/form/advancedForm/RepositoryForm.vue
+++ b/src/views/form/advancedForm/RepositoryForm.vue
@@ -94,7 +94,7 @@ export default {
   methods: {
     handleSubmit (e) {
       e.preventDefault()
-      this.form.validateFields((err, values) => {
+      this.form.validateFieldsAndScroll((err, values) => {
         if (!err) {
           this.$notification['error']({
             message: 'Received values of form:',
diff --git a/src/views/form/advancedForm/TaskForm.vue b/src/views/form/advancedForm/TaskForm.vue
index eceaa9b89d..97e997fe4c 100644
--- a/src/views/form/advancedForm/TaskForm.vue
+++ b/src/views/form/advancedForm/TaskForm.vue
@@ -89,7 +89,7 @@ export default {
   methods: {
     handleSubmit (e) {
       e.preventDefault()
-      this.form.validateFields((err, values) => {
+      this.form.validateFieldsAndScroll((err, values) => {
         if (!err) {
           this.$notification['error']({
             message: 'Received values of form:',
diff --git a/src/views/form/stepForm/Step1.vue b/src/views/form/stepForm/Step1.vue
index ff106003fa..13fa92c82b 100644
--- a/src/views/form/stepForm/Step1.vue
+++ b/src/views/form/stepForm/Step1.vue
@@ -72,9 +72,9 @@ export default {
   },
   methods: {
     nextStep () {
-      const { form: { validateFields } } = this
+      const { form: { validateFieldsAndScroll } } = this
       // 先校验,通过表单校验后,才进入下一步
-      validateFields((err, values) => {
+      validateFieldsAndScroll((err, values) => {
         if (!err) {
           this.$emit('nextStep')
         }
diff --git a/src/views/form/stepForm/Step2.vue b/src/views/form/stepForm/Step2.vue
index dc50a7fb66..f2ac3a3a98 100644
--- a/src/views/form/stepForm/Step2.vue
+++ b/src/views/form/stepForm/Step2.vue
@@ -73,9 +73,9 @@ export default {
   methods: {
     nextStep () {
       const that = this
-      const { form: { validateFields } } = this
+      const { form: { validateFieldsAndScroll } } = this
       that.loading = true
-      validateFields((err, values) => {
+      validateFieldsAndScroll((err, values) => {
         if (!err) {
           console.log('表单 values', values)
           that.timer = setTimeout(function () {
diff --git a/src/views/gallery/components/mask-51.vue b/src/views/gallery/components/mask-51.vue
new file mode 100644
index 0000000000..5ab94de769
--- /dev/null
+++ b/src/views/gallery/components/mask-51.vue
@@ -0,0 +1,676 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="4" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          <!-- 受访者:{{ $route.params.name }} -->
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          <!-- 身份证:{{ $route.params.card }} -->
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patient.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <!-- 血常规 -->
+          <a-form :form="form" @submit="handleSubmit" style="height:100%;overflow:hidden auto;-ms-overflow-x: hidden;">
+            <div style="overflow: hidden;margin-top: 10px;" v-if="executeStatus !== 1">
+              <!-- <a-button class="btn fr" v-if="patientBasis.type === 3" @click="import">导入</a-button> -->
+              <a-button class="btn fr" type="primary" html-type="submit">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+
+            <div class="baselineForm" :style="baselineFormStyle">
+              <div class="title">血常规</div>
+              <a-form-item label="报告上传 :" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <div class="clearfix" style="margin-top: 10px;">
+                  <a-upload :action="uploadUrl" listType="picture-card" :fileList="fileList" @preview="handlePreview" @change="handleChange">
+                    <div v-if="fileList.length < 1">
+                      <a-icon type="plus" />
+                      <div class="ant-upload-text">Upload</div>
+                    </div>
+                  </a-upload>
+                  <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
+                    <img alt="example" style="width: 100%" :src="previewImage" />
+                  </a-modal>
+                </div>
+              </a-form-item>
+              <a-form-item label="血红蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['b1', { initialValue: initValue('b1')}]" addonAfter="g/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="白细胞:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['b2', { initialValue: initValue('b2')}]" addonAfter="10^9/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="红细胞:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['b3', { initialValue: initValue('b3')}]" addonAfter="10^12/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="血小板:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['b4', { initialValue: initValue('b4')}]" addonAfter="10^9/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="中性粒细胞绝对值:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['b5', { initialValue: initValue('b5')}]" addonAfter="10^9/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="嗜酸细胞绝对值:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['b6', { initialValue: initValue('b6')}]" addonAfter="10^9/L" autocomplete="off"></a-input>
+              </a-form-item>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree2'
+import { mapActions } from 'vuex'
+import _ from 'lodash'
+import $ from 'jquery'
+import moment from 'moment'
+import { MyIcon } from '@/components/_util/util'
+import { getReportTypeMark, saveReport, getReportFormData } from '@/api/report'
+
+export default {
+  name: 'Exec51',
+  components: {
+    STree,
+    MyIcon
+  },
+  data() {
+    return {
+      previewVisible: false,
+      previewImage: '',
+      uploadUrl: process.env.VUE_APP_API_UPLOAD_URL,
+      viewPicUrl: process.env.VUE_APP_API_VIEW_PIC_URL,
+      fileList: [],
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      title: '报告采集',
+      baselineFormStyle: {
+        // height: '444px',
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      openKeys: [],
+      defaultSelectedKeys: [51],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      reportCollectBaseId: parseInt(this.$route.params.id),
+      formData: undefined,
+      businessType: 6,
+      reportTypeId: 51,
+      reportCollectDetailId: undefined,
+      executeStatus: undefined,
+      spinning: false
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('reportCollectBaseId', this.reportCollectBaseId)
+    getReportTypeMark(params)
+      .then(res => {
+        that.orgTree = res.data.rcdList
+        that.reportCollectDetailId = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 51 }).reportCollectDetailId
+        that.executeStatus = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 51 }).collectDetailStatus
+        that.patient = res.data.patient
+        that.getFormData()
+      })
+      .catch(error => {
+        console.log(error)
+      })
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeRadio(e, t) {
+      if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    getFormData() {
+      var that = this
+      var params = new URLSearchParams()
+      params.append('reportCollectDetailId', this.reportCollectDetailId)
+      params.append('reportTypeId', this.reportTypeId)
+      params.append('businessType', this.businessType)
+      getReportFormData(params)
+        .then(res => {
+          that.formData = that.dealAnswers(res.data.bgXcg)
+          that.fileList = _.map(res.data.annexList, function(v) {
+            return {
+              uid: v.annexId,
+              url: that.viewPicUrl + v.annexAddress,
+              name: v.annexAddress,
+              status: 'done'
+            }
+          })
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.formData) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.formData[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.formData[key])
+      } else if (type === 'array') {
+        return this.formData[key].split(',')
+      } else {
+        return this.formData[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+
+      }
+      return answer
+    },
+    handleClick(e) {
+      if (e.key !== this.reportCollectBaseId) {
+        this.$router.replace('/gallery/execute/' + this.reportCollectBaseId + '/' + e.key)
+      }
+    },
+    save() {
+      if (!this.fileList.length) {
+        this.$message.warning('请上传检查报告')
+        return false
+      }
+      var re = this.form.getFieldsValue()
+      var that = this
+      var params = new URLSearchParams()
+      if (this.formData && this.formData.xcgId) {
+        re.xcgId = this.formData.xcgId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('reportCollectBase', JSON.stringify({ reportCollectBaseId: this.reportCollectBaseId }))
+      params.append('reportCollectDetail', JSON.stringify({ reportCollectDetailId: this.reportCollectDetailId, reportTypeId: this.reportTypeId, status: 1 }))
+      params.append('businessType', this.businessType)
+      var a = []
+      _.each(this.fileList, function(v) {
+        if (v.response) a.push(v.response.fileName)
+        else a.push(v.name)
+      })
+      params.append('fileName', JSON.stringify(a))
+      this.spinning = true
+      saveReport(params)
+        .then(res => {
+          that.getFormData()
+          that.spinning = false
+          that.$message.success(res.msg)
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+    },
+    handleSubmit(e) {
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      this.confirmLoading = true
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          console.log('values', values)
+          if (!this.fileList.length) {
+            this.$message.warning('请上传检查报告')
+            return false
+          }
+          var re = this.form.getFieldsValue()
+          var that = this
+          var params = new URLSearchParams()
+          if (this.formData && this.formData.xcgId) {
+            re.xcgId = this.formData.xcgId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('reportCollectBase', JSON.stringify({ reportCollectBaseId: this.reportCollectBaseId }))
+          params.append('reportCollectDetail', JSON.stringify({ reportCollectDetailId: this.reportCollectDetailId, reportTypeId: this.reportTypeId, status: 2 }))
+          params.append('businessType', this.businessType)
+          var a = []
+          _.each(this.fileList, function(v) {
+            if (v.response) a.push(v.response.fileName)
+            else a.push(v.name)
+          })
+          params.append('fileName', JSON.stringify(a))
+          this.spinning = true
+          saveReport(params)
+            .then(res => {
+              that.getFormData()
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('reportCollectBaseId', this.reportCollectBaseId)
+              getReportTypeMark(params)
+                .then(res => {
+                  that.orgTree = res.data.rcdList
+                  that.reportCollectDetailId = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 51 }).reportCollectDetailId
+                  that.executeStatus = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 51 }).collectDetailStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    handleCancel() {
+      this.previewVisible = false;
+    },
+    handlePreview(file) {
+      this.previewImage = file.url || file.thumbUrl
+      this.previewVisible = true
+    },
+    handleChange({ fileList }) {
+      var that = this
+      this.fileList = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList.forEach((f,i) => {
+          if(f.response){
+              that.$set(that.fileList,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo{
+  height:calc(100% - 10px);
+}
+/deep/ .card-box{
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/gallery/components/mask-52.vue b/src/views/gallery/components/mask-52.vue
new file mode 100644
index 0000000000..906e724ef8
--- /dev/null
+++ b/src/views/gallery/components/mask-52.vue
@@ -0,0 +1,732 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="4" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          <!-- 受访者:{{ $route.params.name }} -->
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          <!-- 身份证:{{ $route.params.card }} -->
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patient.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <!-- 血生化 -->
+          <a-form :form="form" @submit="handleSubmit" style="height:100%;overflow:hidden auto;-ms-overflow-x: hidden;">
+            <div style="overflow: hidden;margin-top: 10px;" v-if="executeStatus !== 1">
+              <!-- <a-button class="btn fr" v-if="patientBasis.type === 3" @click="import">导入</a-button> -->
+              <a-button class="btn fr" type="primary" html-type="submit">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+
+            <div class="baselineForm" :style="baselineFormStyle">
+              <div class="title">血生化</div>
+              <a-form-item label="报告上传 :" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <div class="clearfix" style="margin-top: 10px;">
+                  <a-upload :action="uploadUrl" listType="picture-card" :fileList="fileList" @preview="handlePreview" @change="handleChange">
+                    <div v-if="fileList.length < 1">
+                      <a-icon type="plus" />
+                      <div class="ant-upload-text">Upload</div>
+                    </div>
+                  </a-upload>
+                  <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
+                    <img alt="example" style="width: 100%" :src="previewImage" />
+                  </a-modal>
+                </div>
+              </a-form-item>
+              <a-form-item label="血糖:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c1', { initialValue: initValue('c1')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="谷丙转氨酶:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c2', { initialValue: initValue('c2')}]" addonAfter="IU/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="谷草转氨酶:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c3', { initialValue: initValue('c3')}]" addonAfter="IU/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="白蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c4', { initialValue: initValue('c4')}]" addonAfter="g/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="前白蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c5', { initialValue: initValue('c5')}]" addonAfter="g/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="球蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c6', { initialValue: initValue('c6')}]" addonAfter="g/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="肌酐:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c7', { initialValue: initValue('c7')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="尿素:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c8', { initialValue: initValue('c8')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="钾:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c9', { initialValue: initValue('c9')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="钠:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c10', { initialValue: initValue('c10')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="钙:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c11', { initialValue: initValue('c11')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="磷:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c12', { initialValue: initValue('c12')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="总胆固醇:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c13', { initialValue: initValue('c13')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="甘油三脂:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c14', { initialValue: initValue('c14')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="高密度脂蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c15', { initialValue: initValue('c15')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="低密度脂蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['c16', { initialValue: initValue('c16')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="DD二聚体:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                <a-input style="width: 240px;" v-decorator="['c17', { initialValue: initValue('c17')}]" addonAfter="ng/ml" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="DD二聚体:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['c171', { initialValue: initValue('c171')}]">
+                  <a-radio value="1">正常</a-radio>
+                  <a-radio value="2">降低</a-radio>
+                  <a-radio value="3">升高</a-radio>
+                  <a-radio value="4">未测量</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="维生素D:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                <a-input style="width: 240px;" v-decorator="['c18', { initialValue: initValue('c18')}]" addonAfter="nmol/l" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="维生素D:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['c181', { initialValue: initValue('c181')}]">
+                  <a-radio value="1">正常</a-radio>
+                  <a-radio value="2">降低</a-radio>
+                  <a-radio value="3">升高</a-radio>
+                  <a-radio value="4">未测量</a-radio>
+                </a-radio-group>
+              </a-form-item>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree2'
+import { mapActions } from 'vuex'
+import _ from 'lodash'
+import $ from 'jquery'
+import moment from 'moment'
+import { MyIcon } from '@/components/_util/util'
+import { getReportTypeMark, saveReport, getReportFormData } from '@/api/report'
+
+export default {
+  name: 'Exec52',
+  components: {
+    STree,
+    MyIcon
+  },
+  data() {
+    return {
+      previewVisible: false,
+      previewImage: '',
+      uploadUrl: process.env.VUE_APP_API_UPLOAD_URL,
+      viewPicUrl: process.env.VUE_APP_API_VIEW_PIC_URL,
+      fileList: [],
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      title: '报告采集',
+      baselineFormStyle: {
+        // height: '444px',
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      openKeys: [],
+      defaultSelectedKeys: [52],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      reportCollectBaseId: parseInt(this.$route.params.id),
+      controla21: false,
+      controla31: false,
+      controla41: false,
+      controla51: false,
+      controla61: false,
+      formData: undefined,
+      businessType: 7,
+      reportTypeId: 52,
+      reportCollectDetailId: undefined,
+      spinning: false,
+      executeStatus: false
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('reportCollectBaseId', this.reportCollectBaseId)
+    getReportTypeMark(params)
+      .then(res => {
+        that.orgTree = res.data.rcdList
+        that.reportCollectDetailId = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 52 }).reportCollectDetailId
+        that.executeStatus = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 52 }).collectDetailStatus
+        that.patient = res.data.patient
+        that.getFormData()
+      })
+      .catch(error => {
+        console.log(error)
+      })
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeRadio(e, t) {
+      if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    getFormData() {
+      var that = this
+      var params = new URLSearchParams()
+      params.append('reportCollectDetailId', this.reportCollectDetailId)
+      params.append('reportTypeId', this.reportTypeId)
+      params.append('businessType', this.businessType)
+      getReportFormData(params)
+        .then(res => {
+          that.formData = that.dealAnswers(res.data.bgXsh)
+          that.fileList = _.map(res.data.annexList, function(v) {
+            return {
+              uid: v.annexId,
+              url: that.viewPicUrl + v.annexAddress,
+              name: v.annexAddress,
+              status: 'done'
+            }
+          })
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.formData) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.formData[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.formData[key])
+      } else if (type === 'array') {
+        return this.formData[key].split(',')
+      } else {
+        return this.formData[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+
+      }
+      return answer
+    },
+    handleClick(e) {
+      if (e.key !== this.reportCollectBaseId) {
+        this.$router.replace('/gallery/execute/' + this.reportCollectBaseId + '/' + e.key)
+      }
+    },
+    save() {
+      if (!this.fileList.length) {
+        this.$message.warning('请上传检查报告')
+        return false
+      }
+      var re = this.form.getFieldsValue()
+      var that = this
+      var params = new URLSearchParams()
+      if (this.formData && this.formData.xshId) {
+        re.xshId = this.formData.xshId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('reportCollectBase', JSON.stringify({ reportCollectBaseId: this.reportCollectBaseId }))
+      params.append('reportCollectDetail', JSON.stringify({ reportCollectDetailId: this.reportCollectDetailId, reportTypeId: this.reportTypeId, status: 1 }))
+      params.append('businessType', this.businessType)
+      var a = []
+      _.each(this.fileList, function(v) {
+        if (v.response) a.push(v.response.fileName)
+        else a.push(v.name)
+      })
+      params.append('fileName', JSON.stringify(a))
+      this.spinning = true
+      saveReport(params)
+        .then(res => {
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+    },
+    handleSubmit(e) {
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          console.log('values', values)
+          if (!this.fileList.length) {
+            this.$message.warning('请上传检查报告')
+            return false
+          }
+          var re = this.form.getFieldsValue()
+          var that = this
+          var params = new URLSearchParams()
+          if (this.formData && this.formData.xshId) {
+            re.xshId = this.formData.xshId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('reportCollectBase', JSON.stringify({ reportCollectBaseId: this.reportCollectBaseId }))
+          params.append('reportCollectDetail', JSON.stringify({ reportCollectDetailId: this.reportCollectDetailId, reportTypeId: this.reportTypeId, status: 2 }))
+          params.append('businessType', this.businessType)
+          var a = []
+          _.each(this.fileList, function(v) {
+            if (v.response) a.push(v.response.fileName)
+            else a.push(v.name)
+          })
+          params.append('fileName', JSON.stringify(a))
+          this.spinning = true
+          saveReport(params)
+            .then(res => {
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('reportCollectBaseId', this.reportCollectBaseId)
+              getReportTypeMark(params)
+                .then(res => {
+                  that.orgTree = res.data.rcdList
+                  that.reportCollectDetailId = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 52 }).reportCollectDetailId
+                  that.executeStatus = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 52 }).collectDetailStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    handleCancel() {
+      this.previewVisible = false
+    },
+    handlePreview(file) {
+      this.previewImage = file.url || file.thumbUrl
+      this.previewVisible = true
+    },
+    handleChange({ fileList }) {
+      var that = this
+      this.fileList = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList.forEach((f,i) => {
+          if(f.response){
+              that.$set(that.fileList,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo{
+  height:calc(100% - 10px);
+}
+/deep/ .card-box{
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/gallery/components/mask-53.vue b/src/views/gallery/components/mask-53.vue
new file mode 100644
index 0000000000..a34ed7dcc6
--- /dev/null
+++ b/src/views/gallery/components/mask-53.vue
@@ -0,0 +1,737 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="4" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          <!-- 受访者:{{ $route.params.name }} -->
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          <!-- 身份证:{{ $route.params.card }} -->
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patient.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <!-- 吸入支气管舒张剂前 -->
+          <a-form :form="form" @submit="handleSubmit" style="height:100%;overflow:hidden auto;-ms-overflow-x: hidden;">
+            <div style="overflow: hidden;margin-top: 10px;" v-if="executeStatus !== 1">
+              <!-- <a-button class="btn fr" v-if="patientBasis.type === 3" @click="import">导入</a-button> -->
+              <a-button class="btn fr" type="primary" html-type="submit">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+
+            <div class="baselineForm" :style="baselineFormStyle">
+              <div class="title">吸入支气管舒张剂前</div>
+              <a-form-item label="报告上传 :" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <div class="clearfix" style="margin-top: 10px;">
+                  <a-upload :action="uploadUrl" listType="picture-card" :fileList="fileList" @preview="handlePreview" @change="handleChange">
+                    <div v-if="fileList.length < 1">
+                      <a-icon type="plus" />
+                      <div class="ant-upload-text">Upload</div>
+                    </div>
+                  </a-upload>
+                  <a-button style="position: absolute;top: 84px;left: 120px;font-size: 12px;padding: 0 5px;height: 30px;" @click="_import">OCR识别</a-button>
+                  <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
+                    <img alt="example" style="width: 100%" :src="previewImage" />
+                  </a-modal>
+                </div>
+              </a-form-item>
+              <a-form-item label="FEV1:" :labelCol="labelColHor" :wrapperCol="wrapperHor" style="border: none;">
+                <a-radio-group v-decorator="['a21', {...require2, initialValue: initValue('a21')}]" @change="changeRadio($event, 'controla21')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="具体数值:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla21" class="border-dotted">
+                <a-input style="width: 240px;" v-decorator="['a22', {...inputRequired, initialValue: initValue('a22')}]" addonAfter="L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="FEV1%pred:" :labelCol="labelColHor" :wrapperCol="wrapperHor" style="border: none;">
+                <a-radio-group v-decorator="['a31', {...require2, initialValue: initValue('a31')}]" @change="changeRadio($event, 'controla31')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="具体数值:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla31" class="border-dotted">
+                <a-input style="width: 240px;" v-decorator="['a32', {...inputRequired, initialValue: initValue('a32')}]" addonAfter="%" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="FVC:" :labelCol="labelColHor" :wrapperCol="wrapperHor" style="border: none;">
+                <a-radio-group v-decorator="['a41', {...require2, initialValue: initValue('a41')}]" @change="changeRadio($event, 'controla41')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="具体数值:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla41" class="border-dotted">
+                <a-input style="width: 240px;" v-decorator="['a42', {...inputRequired, initialValue: initValue('a42')}]" addonAfter="L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="FVC%pred:" :labelCol="labelColHor" :wrapperCol="wrapperHor" style="border: none;">
+                <a-radio-group v-decorator="['a51', {...require2, initialValue: initValue('a51')}]" @change="changeRadio($event, 'controla51')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="具体数值:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla51" class="border-dotted">
+                <a-input style="width: 240px;" v-decorator="['a52', {...inputRequired, initialValue: initValue('a52')}]" addonAfter="%" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="FEV1/FVC%pred:" :labelCol="labelColHor" :wrapperCol="wrapperHor" style="border: none;">
+                <a-radio-group v-decorator="['a61', {...require2, initialValue: initValue('a61')}]" @change="changeRadio($event, 'controla61')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="具体数值:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla61" class="border-dotted">
+                <a-input style="width: 240px;" v-decorator="['a62', {...inputRequired, initialValue: initValue('a62')}]" addonAfter="%" autocomplete="off"></a-input>
+              </a-form-item>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree2'
+import { mapActions } from 'vuex'
+import _ from 'lodash'
+import $ from 'jquery'
+import moment from 'moment'
+import { MyIcon } from '@/components/_util/util'
+import { getReportTypeMark, saveReport, getReportFormData } from '@/api/report'
+
+export default {
+  name: 'Exec53',
+  components: {
+    STree,
+    MyIcon
+  },
+  data() {
+    return {
+      previewVisible: false,
+      previewImage: '',
+      uploadUrl: process.env.VUE_APP_API_UPLOAD_URL,
+      viewPicUrl: process.env.VUE_APP_API_VIEW_PIC_URL,
+      fileList: [],
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      title: '报告采集',
+      baselineFormStyle: {
+        // height: '444px',
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      openKeys: [],
+      defaultSelectedKeys: [53],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      reportCollectBaseId: parseInt(this.$route.params.id),
+      controla21: false,
+      controla31: false,
+      controla41: false,
+      controla51: false,
+      controla61: false,
+      formData: undefined,
+      businessType: 3,
+      reportTypeId: 53,
+      reportCollectDetailId: undefined,
+      spinning: false,
+      executeStatus: false
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('reportCollectBaseId', this.reportCollectBaseId)
+    getReportTypeMark(params)
+      .then(res => {
+        that.orgTree = res.data.rcdList
+        that.reportCollectDetailId = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 53 }).reportCollectDetailId
+        that.executeStatus = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 53 }).collectDetailStatus
+        that.patient = res.data.patient
+        that.getFormData()
+      })
+      .catch(error => {
+        console.log(error)
+      })
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeRadio(e, t) {
+      if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    getFormData() {
+      var that = this
+      var params = new URLSearchParams()
+      params.append('reportCollectDetailId', this.reportCollectDetailId)
+      params.append('reportTypeId', this.reportTypeId)
+      params.append('businessType', this.businessType)
+      getReportFormData(params)
+        .then(res => {
+          that.formData = that.dealAnswers(res.data.bgFgnq)
+          that.fileList = _.map(res.data.annexList, function(v) {
+            return {
+              uid: v.annexId,
+              url: that.viewPicUrl + v.annexAddress,
+              name: v.annexAddress,
+              status: 'done'
+            }
+          })
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.formData) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.formData[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.formData[key])
+      } else if (type === 'array') {
+        return this.formData[key].split(',')
+      } else {
+        return this.formData[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        if (answer.a21 === 1) {
+          this.controla21 = true
+        }
+        if (answer.a31 === 1) {
+          this.controla31 = true
+        }
+        if (answer.a41 === 1) {
+          this.controla41 = true
+        }
+        if (answer.a51 === 1) {
+          this.controla51 = true
+        }
+        if (answer.a61 === 1) {
+          this.controla61 = true
+        }
+      }
+      return answer
+    },
+    handleClick(e) {
+      if (e.key !== this.reportCollectBaseId) {
+        this.$router.replace('/gallery/execute/' + this.reportCollectBaseId + '/' + e.key)
+      }
+    },
+    save() {
+      if (!this.fileList.length) {
+        this.$message.warning('请上传检查报告')
+        return false
+      }
+      var re = this.form.getFieldsValue()
+      var that = this
+      var params = new URLSearchParams()
+      if (this.formData && this.formData.fgnqId) {
+        re.fgnqId = this.formData.fgnqId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('reportCollectBase', JSON.stringify({ reportCollectBaseId: this.reportCollectBaseId }))
+      params.append('reportCollectDetail', JSON.stringify({ reportCollectDetailId: this.reportCollectDetailId, reportTypeId: this.reportTypeId, status: 1 }))
+      params.append('businessType', this.businessType)
+      var a = []
+      _.each(this.fileList, function(v) {
+        if (v.response) a.push(v.response.fileName)
+        else a.push(v.name)
+      })
+      params.append('fileName', JSON.stringify(a))
+      this.spinning = true
+      saveReport(params)
+        .then(res => {
+          that.getFormData()
+          that.spinning = false
+          that.$message.success(res.msg)
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+    },
+    handleSubmit(e) {
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          console.log('values', values)
+          if (!this.fileList.length) {
+            this.$message.warning('请上传检查报告')
+            return false
+          }
+          var re = this.form.getFieldsValue()
+          var that = this
+          var params = new URLSearchParams()
+          if (this.formData && this.formData.fgnqId) {
+            re.fgnqId = this.formData.fgnqId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('reportCollectBase', JSON.stringify({ reportCollectBaseId: this.reportCollectBaseId }))
+          params.append('reportCollectDetail', JSON.stringify({ reportCollectDetailId: this.reportCollectDetailId, reportTypeId: this.reportTypeId, status: 2 }))
+          params.append('businessType', this.businessType)
+          var a = []
+          _.each(this.fileList, function(v) {
+            if (v.response) a.push(v.response.fileName)
+            else a.push(v.name)
+          })
+          params.append('fileName', JSON.stringify(a))
+          this.spinning = true
+          saveReport(params)
+            .then(res => {
+              that.getFormData()
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('reportCollectBaseId', this.reportCollectBaseId)
+              getReportTypeMark(params)
+                .then(res => {
+                  that.orgTree = res.data.rcdList
+                  that.reportCollectDetailId = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 53 }).reportCollectDetailId
+                  that.executeStatus = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 53 }).collectDetailStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    handleCancel() {
+      this.previewVisible = false
+    },
+    handlePreview(file) {
+      this.previewImage = file.url || file.thumbUrl
+      this.previewVisible = true
+    },
+    handleChange({ fileList }) {
+      var that = this
+      this.fileList = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList.forEach((f,i) => {
+          if(f.response){
+              that.$set(that.fileList,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    },
+    _import() {
+      var answer = {
+        a21: 1,
+        a31: 1,
+        a41: 1,
+        a51: 1,
+        a61: 1,
+        a22: '3.19',
+        a32: '96.6',
+        a42: '4.05',
+        a52: '98.4',
+        a62: '98.4',
+      }
+      this.formData = _.extend(this.formData || {}, this.dealAnswers(answer))
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo{
+  height:calc(100% - 10px);
+}
+/deep/ .card-box{
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/gallery/components/mask-54.vue b/src/views/gallery/components/mask-54.vue
new file mode 100644
index 0000000000..1f6ea4a693
--- /dev/null
+++ b/src/views/gallery/components/mask-54.vue
@@ -0,0 +1,721 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="4" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+          <!-- 受访者:{{ patient.name }} -->
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+          <!-- 身份证:{{ patient.card }} -->
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patient.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <!-- 吸入支气管舒张剂前 -->
+          <a-form :form="form" @submit="handleSubmit" style="height:100%;overflow:hidden auto;-ms-overflow-x: hidden;">
+            <div style="overflow: hidden;margin-top: 10px;" v-if="executeStatus !== 1">
+              <!-- <a-button class="btn fr" v-if="patientBasis.type === 3" @click="import">导入</a-button> -->
+              <a-button class="btn fr" type="primary" html-type="submit">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+
+            <div class="baselineForm" :style="baselineFormStyle">
+              <div class="title">吸入支气管舒张剂后</div>
+              <a-form-item label="报告上传 :" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <div class="clearfix" style="margin-top: 10px;">
+                  <a-upload :action="uploadUrl" listType="picture-card" :fileList="fileList" @preview="handlePreview" @change="handleChange">
+                    <div v-if="fileList.length < 1">
+                      <a-icon type="plus" />
+                      <div class="ant-upload-text">Upload</div>
+                    </div>
+                  </a-upload>
+                  <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
+                    <img alt="example" style="width: 100%" :src="previewImage" />
+                  </a-modal>
+                </div>
+              </a-form-item>
+              <a-form-item label="FEV1:" :labelCol="labelColHor" :wrapperCol="wrapperHor" style="border: none;">
+                <a-radio-group v-decorator="['b23', {...require2, initialValue: initValue('b23')}]" @change="changeRadio($event, 'controlb23')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="具体数值:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb23" class="border-dotted">
+                <a-input style="width: 240px;" v-decorator="['b24', {...inputRequired, initialValue: initValue('b24')}]" addonAfter="L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="FEV1%pred:" :labelCol="labelColHor" :wrapperCol="wrapperHor" style="border: none;">
+                <a-radio-group v-decorator="['b33', {...require2, initialValue: initValue('b33')}]" @change="changeRadio($event, 'controlb33')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="具体数值:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb33" class="border-dotted">
+                <a-input style="width: 240px;" v-decorator="['b34', {...inputRequired, initialValue: initValue('b34')}]" addonAfter="%" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="FVC:" :labelCol="labelColHor" :wrapperCol="wrapperHor" style="border: none;">
+                <a-radio-group v-decorator="['b43', {...require2, initialValue: initValue('b43')}]" @change="changeRadio($event, 'controlb43')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="具体数值:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb43" class="border-dotted">
+                <a-input style="width: 240px;" v-decorator="['b44', {...inputRequired, initialValue: initValue('b44')}]" addonAfter="L" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="FVC%pred:" :labelCol="labelColHor" :wrapperCol="wrapperHor" style="border: none;">
+                <a-radio-group v-decorator="['b53', {...require2, initialValue: initValue('b53')}]" @change="changeRadio($event, 'controlb53')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="具体数值:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb53" class="border-dotted">
+                <a-input style="width: 240px;" v-decorator="['b54', {...inputRequired, initialValue: initValue('b54')}]" addonAfter="%" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="FEV1/FVC%pred:" :labelCol="labelColHor" :wrapperCol="wrapperHor" style="border: none;">
+                <a-radio-group v-decorator="['b63', {...require2, initialValue: initValue('b63')}]" @change="changeRadio($event, 'controlb63')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="具体数值:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb63" class="border-dotted">
+                <a-input style="width: 240px;" v-decorator="['b64', {...inputRequired, initialValue: initValue('b64')}]" addonAfter="%" autocomplete="off"></a-input>
+              </a-form-item>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree2'
+import { mapActions } from 'vuex'
+import _ from 'lodash'
+import $ from 'jquery'
+import moment from 'moment'
+import { MyIcon } from '@/components/_util/util'
+import { getReportTypeMark, saveReport, getReportFormData } from '@/api/report'
+
+export default {
+  name: 'Exec54',
+  components: {
+    STree,
+    MyIcon
+  },
+  data() {
+    return {
+      previewVisible: false,
+      previewImage: '',
+      uploadUrl: process.env.VUE_APP_API_UPLOAD_URL,
+      viewPicUrl: process.env.VUE_APP_API_VIEW_PIC_URL,
+      fileList: [],
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      title: '报告采集',
+      baselineFormStyle: {
+        // height: '444px'
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      openKeys: [],
+      defaultSelectedKeys: [54],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      reportCollectBaseId: parseInt(this.$route.params.id),
+      controlb23: false,
+      controlb33: false,
+      controlb43: false,
+      controlb53: false,
+      controlb63: false,
+      formData: undefined,
+      businessType: 4,
+      reportTypeId: 54,
+      reportCollectDetailId: undefined,
+      spinning: false,
+      executeStatus: false
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('reportCollectBaseId', this.reportCollectBaseId)
+    getReportTypeMark(params)
+      .then(res => {
+        that.orgTree = res.data.rcdList
+        that.reportCollectDetailId = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 54 }).reportCollectDetailId
+        that.executeStatus = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 54 }).collectDetailStatus
+        that.patient = res.data.patient
+        that.getFormData()
+      })
+      .catch(error => {
+        console.log(error)
+      })
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeRadio(e, t) {
+      if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    getFormData() {
+      var that = this
+      var params = new URLSearchParams()
+      params.append('reportCollectDetailId', this.reportCollectDetailId)
+      params.append('reportTypeId', this.reportTypeId)
+      params.append('businessType', this.businessType)
+      getReportFormData(params)
+        .then(res => {
+          that.formData = that.dealAnswers(res.data.bgFgnh)
+          that.fileList = _.map(res.data.annexList, function(v) {
+            return {
+              uid: v.annexId,
+              url: that.viewPicUrl + v.annexAddress,
+              name: v.annexAddress,
+              status: 'done'
+            }
+          })
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.formData) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.formData[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.formData[key])
+      } else if (type === 'array') {
+        return this.formData[key].split(',')
+      } else {
+        return this.formData[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        if (answer.b23 === 1) {
+          this.controlb23 = true
+        }
+        if (answer.b33 === 1) {
+          this.controlb33 = true
+        }
+        if (answer.b43 === 1) {
+          this.controlb43 = true
+        }
+        if (answer.b53 === 1) {
+          this.controlb53 = true
+        }
+        if (answer.b63 === 1) {
+          this.controlb63 = true
+        }
+      }
+      return answer
+    },
+    handleClick(e) {
+      if (e.key !== this.reportCollectBaseId) {
+        this.$router.replace('/gallery/execute/' + this.reportCollectBaseId + '/' + e.key)
+      }
+    },
+    save() {
+      if (!this.fileList.length) {
+        this.$message.warning('请上传检查报告')
+        return false
+      }
+      var re = this.form.getFieldsValue()
+      var that = this
+      var params = new URLSearchParams()
+      if (this.formData && this.formData.fgnhId) {
+        re.fgnhId = this.formData.fgnhId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('reportCollectBase', JSON.stringify({ reportCollectBaseId: this.reportCollectBaseId }))
+      params.append('reportCollectDetail', JSON.stringify({ reportCollectDetailId: this.reportCollectDetailId, reportTypeId: this.reportTypeId, status: 1 }))
+      params.append('businessType', this.businessType)
+      var a = []
+      _.each(this.fileList, function(v) {
+        if (v.response) a.push(v.response.fileName)
+        else a.push(v.name)
+      })
+      params.append('fileName', JSON.stringify(a))
+      this.spinning = true
+      saveReport(params)
+        .then(res => {
+          that.getFormData()
+          that.spinning = false
+          that.$message.success(res.msg)
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+    },
+    handleSubmit(e) {
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          console.log('values', values)
+          if (!this.fileList.length) {
+            this.$message.warning('请上传检查报告')
+            return false
+          }
+          var re = this.form.getFieldsValue()
+          var that = this
+          var params = new URLSearchParams()
+          if (this.formData && this.formData.fgnhId) {
+            re.fgnhId = this.formData.fgnhId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('reportCollectBase', JSON.stringify({ reportCollectBaseId: this.reportCollectBaseId }))
+          params.append('reportCollectDetail', JSON.stringify({ reportCollectDetailId: this.reportCollectDetailId, reportTypeId: this.reportTypeId, status: 2 }))
+          params.append('businessType', this.businessType)
+          var a = []
+          _.each(this.fileList, function(v) {
+            if (v.response) a.push(v.response.fileName)
+            else a.push(v.name)
+          })
+          params.append('fileName', JSON.stringify(a))
+          this.spinning = true
+          saveReport(params)
+            .then(res => {
+              that.getFormData()
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('reportCollectBaseId', this.reportCollectBaseId)
+              getReportTypeMark(params)
+                .then(res => {
+                  that.orgTree = res.data.rcdList
+                  that.reportCollectDetailId = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 54 }).reportCollectDetailId
+                  that.executeStatus = _.find(res.data.rcdList, function(v) { return v.reportTypeId === 54 }).collectDetailStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    handleCancel() {
+      this.previewVisible = false
+    },
+    handlePreview(file) {
+      this.previewImage = file.url || file.thumbUrl
+      this.previewVisible = true
+    },
+    handleChange({ fileList }) {
+      var that = this
+      this.fileList = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList.forEach((f,i) => {
+          if(f.response){
+              that.$set(that.fileList,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo{
+  height:calc(100% - 10px);
+}
+/deep/ .card-box{
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/gallery/execute.vue b/src/views/gallery/execute.vue
new file mode 100644
index 0000000000..27ba360b5a
--- /dev/null
+++ b/src/views/gallery/execute.vue
@@ -0,0 +1,429 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="4" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <!-- 支扩病史资料 -->
+        </a-col>
+      </a-row>
+    </a-card>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree2'
+import { mapActions } from 'vuex'
+import _ from 'lodash'
+import $ from 'jquery'
+import moment from 'moment'
+import { MyIcon } from '@/components/_util/util'
+import { getReportTypeMark } from '@/api/report'
+
+export default {
+  name: 'galleryExec',
+  components: {
+    STree,
+    MyIcon
+  },
+  data() {
+    return {
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      title: '报告采集',
+      openKeys: [],
+      defaultSelectedKeys: [],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      reportCollectBaseId: this.$route.params.id
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    // var params = new URLSearchParams()
+    // params.append('patientBasisId', this.patientBasisId)
+    // getPatientBasis(params)
+    //   .then(res => {
+    //     that.patient = res.data.patient
+    //     that.patientBasis = res.data.patientBasis
+    //     that.orgTree = res.data.list
+    //     that.basisMaskId = that.orgTree[0].basisMarkId
+    //     // that.getElementsAnswer()
+    //     that.defaultSelectedKeys = [that.basisMaskId]
+    //     that.$router.replace('/list/basis/' + that.patientBasisId + '/' + that.basisMaskId)
+    //   })
+    var params = new URLSearchParams()
+    params.append('reportCollectBaseId', this.reportCollectBaseId)
+    getReportTypeMark(params)
+      .then(res => {
+        that.orgTree = res.data.rcdList
+        that.patient = res.data.patient
+        var a = that.orgTree[0].reportTypeId
+        that.defaultSelectedKeys = [a]
+        that.$router.replace('/gallery/execute/' + that.reportCollectBaseId + '/' + a)
+      })
+      .catch(error => {
+        console.log(error)
+      })
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    handleClick(e) {
+      this.basisMaskId = e.key
+      // this.getElementsAnswer()
+    },
+    save() {
+
+    },
+    submit() {
+      this.form.validateFieldsAndScroll((err, values) => {
+        if (!err) {
+          // eslint-disable-next-line no-console
+          console.log('Received values of form: ', values)
+        }
+      })
+      return false
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo{
+  height:calc(100% - 10px);
+}
+/deep/ .card-box{
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/gallery/index.vue b/src/views/gallery/index.vue
new file mode 100644
index 0000000000..2abe81d6d7
--- /dev/null
+++ b/src/views/gallery/index.vue
@@ -0,0 +1,284 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索患者姓名、身份证号" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="toggleAdvanced" style="margin-left: 8px">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col :md="13" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="$refs.registerModal.add()">添加采集</a-button>
+            <!-- <a-button type="primary" style="margin-left: 10px;">导出</a-button> -->
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch(3)">全部报告</p>
+                    <p @click="tableSearch(1)">本月新增报告</p>
+                    <p @click="tableSearch(2)">本年新增报告</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="入组编号">
+                        <a-input v-model.trim="queryParam.fileBasisCode" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="姓名">
+                        <a-input v-model.trim="queryParam.patientName" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="身份证号">
+                        <a-input v-model.trim="queryParam.card" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="创建日期" style="margin-bottom:0;">
+                        <a-range-picker @change="changeTime" style="width: 100%" :value="dateArr" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="reportCode" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <span slot="name" slot-scope="text,record" @click="showUser(record)">
+        <p class="userName">{{text}}</p>
+      </span>
+      <span slot="collectStatus" slot-scope="text">
+        <a-badge :status="text | statusTypeFilter" :text="text | statusFilter" />
+      </span>
+      <template slot="action" slot-scope="text, record">
+        <a @click="handleEdit(record)">执行</a>
+      </template>
+    </s-table>
+    <user-detail ref="detailModal" />
+    <register-form ref="registerModal" @ok="handleOk"></register-form>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { STable, Ellipsis } from '@/components'
+import { getReportList } from '@/api/report'
+import RegisterForm from './modules/RegisterForm'
+import UserDetail from '../list/modules/UserDetail'
+const statusMap = {
+  0: {
+    status: 'default',
+    text: '未执行'
+  },
+  1: {
+    status: 'processing',
+    text: '执行中'
+  },
+  2: {
+    status: 'success',
+    text: '已完成'
+  }
+}
+
+export default {
+  name: 'Gallery',
+  components: {
+    STable,
+    Ellipsis,
+    RegisterForm,
+    UserDetail
+  },
+  data() {
+    return {
+      dateArr: [],
+      bodyStyle: {
+        padding: "10px",
+        paddingBottom: "0px"
+      },
+      mdl: {},
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      // 表头
+      columns: [{
+          title: '报告编号',
+          dataIndex: 'reportCode',
+          width: '150px',
+        },
+        {
+          title: '入组编号',
+          dataIndex: 'fileBasisCode',
+          width: '180px',
+        },
+        {
+          title: '患者姓名',
+          dataIndex: 'patientName',
+          scopedSlots: { customRender: 'name' },
+          width: '120px',
+        },
+        {
+          title: '身份证号',
+          dataIndex: 'patientCard',
+          width: '200px',
+        },
+        {
+          title: '创建时间',
+          dataIndex: 'collectDate',
+          customRender: collectDate => moment(collectDate).format('YYYY-MM-DD'),
+          width: '180px',
+        },
+        {
+          title: '采集状态',
+          dataIndex: 'collectStatus',
+          scopedSlots: { customRender: 'collectStatus' },
+          width: '180px',
+        },
+        {
+          title: '操作',
+          dataIndex: 'action',
+          width: '100px',
+          className: 'operation',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        return getReportList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      scroll: false,
+      // custom table alert & rowSelection
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      optionAlertShow: false
+    }
+  },
+  filters: {
+    statusFilter(type) {
+      return statusMap[type].text
+    },
+    statusTypeFilter(type) {
+      return statusMap[type].status
+    }
+  },
+  created() {
+    this.scroll = {
+      y: (window.screen.height - 368) + "px"
+    }
+  },
+  methods: {
+    clearForm() {
+      this.queryParam = {}
+      this.dateArr = []
+    },
+    tableSearch(type) {
+      this.queryParam.queryType = type
+      this.$refs.table.refresh();
+      this.advanced = false;
+    },
+    refreshTable() {
+      this.advanced = false
+      this.$refs.table.refresh()
+    },
+    showUser(record) {
+      this.$refs.detailModal.show(record)
+    },
+    toggleAdvanced() {
+      this.advanced = !this.advanced
+    },
+    handleOk() {
+      this.$refs.table.refresh()
+    },
+    handleEdit(record) {
+        // this.$router.push({
+        //     name: 'Exec51',
+        //     params: {
+        //         id: record.reportCollectBaseId,
+        //         name: record.patientName,
+        //         card: record.patientCard
+        //     }
+        // })
+      this.$router.push('/gallery/execute/' + record.reportCollectBaseId)
+    },
+    changeTime(time) {
+      this.dateArr = time;
+      this.queryParam.createDateStart = moment(time[0]).format('YYYY-MM-DD')
+      this.queryParam.createDateEnd = moment(time[1]).format('YYYY-MM-DD')
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+td.operation {
+  text-align: center !important;
+}
+
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+
+.userName {
+  color: #1fb2fa;
+  margin: 0;
+
+  &:active,
+  &:hover {
+    text-decoration: underline;
+    text-underline-position: under;
+    text-decoration-color: #1fb2fa;
+    cursor: pointer;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/gallery/modules/RegisterForm.vue b/src/views/gallery/modules/RegisterForm.vue
new file mode 100644
index 0000000000..236e42e96c
--- /dev/null
+++ b/src/views/gallery/modules/RegisterForm.vue
@@ -0,0 +1,124 @@
+<template>
+  <a-modal title="添加采集" :width="800" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :centered="centered" :destroyOnClose="destroyOnClose" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item v-if="JSON.stringify(userData) == '{}'">
+          <a-input-search placeholder="搜索患者姓名、身份证号" @search="onSearch" v-decorator="['card', { rules: [{ required: true , message: '该选项必填'}] }]" enterButton />
+        </a-form-item>
+        <div v-else>
+          <user-detail :option="userData"></user-detail>
+          <a-tabs defaultActiveKey="1">
+            <a-tab-pane tab="采集报告" key="1">
+              <a-form-item>
+                <a-checkbox-group v-decorator="['basisElementId', { rules: [{ required: true , message: '该选项必填'}] }]" style="width:100%">
+                  <a-row>
+                    <a-col :span="8" style="margin-top: 20px;" v-for="item in registerList" :key="item.id">
+                      <a-checkbox :value="item.value">{{ item.label }}</a-checkbox>
+                    </a-col>
+                  </a-row>
+                </a-checkbox-group>
+              </a-form-item>
+            </a-tab-pane>
+          </a-tabs>
+        </div>
+      </a-form>
+      <user-list ref="userListModule" @listen="checkuUser" />
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+  import { getReportType, createReport } from '@/api/report';
+  import UserList from './UserList';
+  import UserDetail from '../../list/modules/UserDetailTop.vue';
+  import _ from 'lodash';
+  export default {
+    components: {
+      UserList,
+      UserDetail
+    },
+    data() {
+      return {
+        userData: {},
+        registerList: [],
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 8 }
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 8 }
+        },
+        visible: false,
+        confirmLoading: false,
+        centered: true,
+        maskClosable: false,
+        destroyOnClose: true,
+        bodyStyle: {
+          height: '480px',
+          overflow: 'auto'
+        },
+        form: this.$form.createForm(this),
+        requiredRule: { rules: [{ required: true, message: '该选项必填' }] }
+      };
+    },
+    methods: {
+      add() {
+        this.userData = {};
+        this.visible = true;
+      },
+      handleSubmit() {
+        const {
+          form: { validateFieldsAndScroll }
+        } = this;
+        this.confirmLoading = true;
+        validateFieldsAndScroll((errors, fieldsValue) => {
+          const that = this;
+          if (errors) {
+            this.confirmLoading = false;
+            return;
+          }
+          const params = new URLSearchParams();
+
+          params.append('patientId', this.userData.patientId)
+          params.append('basisMarkIds', fieldsValue.basisElementId.join(','))
+          createReport(params).then(res => {
+            console.log(res);
+            that.visible = false;
+            that.confirmLoading = false;
+            that.$emit('ok');
+            // that.$router.push({
+            //   path: '/gallery/detail/' + res.data.reportCollectBaseId
+            // })
+          });
+        });
+      },
+      handleCancel() {
+        this.visible = false;
+      },
+      onSearch(value) {
+        // this.form.validateFieldsAndScroll(['card'], (errors, values) => {
+        //     if (errors) {
+        //         return
+        //     }
+        this.$refs.userListModule.add(value);
+        // })
+      },
+      checkuUser(data) {
+        const that = this;
+        this.userData = data;
+        getReportType()
+          .then(res => {
+            that.registerList = _.map(res.data, function (v) {
+              return {
+                value: v.basisMarkId,
+                label: v.basisMarkName
+              }
+            })
+          })
+          .catch(error => {
+            console.log(error)
+          })
+      }
+    }
+  };
+</script>
\ No newline at end of file
diff --git a/src/views/gallery/modules/UserList.vue b/src/views/gallery/modules/UserList.vue
new file mode 100644
index 0000000000..0ebed3005f
--- /dev/null
+++ b/src/views/gallery/modules/UserList.vue
@@ -0,0 +1,126 @@
+<template>
+  <a-modal
+    title="选择患者"
+    :width="800"
+    :destroyOnClose="destroyOnClose"
+    :bodyStyle="bodyStyle"
+    :centered="centered"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="checkuUser"
+    @cancel="handleCancel"
+  >
+    <a-spin :spinning="confirmLoading">
+      <a-table :columns="columns" rowKey="patientId" :rowSelection="rowSelection" :dataSource="data" :pagination="pagination" :loading="loading" @change="handleTableChange">
+        <template slot="name" slot-scope="name">
+          {{ name.first }} {{ name.last }}
+        </template>
+      </a-table>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+import { getPatientList } from '@/api/patient'
+import moment from 'moment'
+import _ from 'lodash'
+const columns = [
+  {
+    title: '入组编号',
+    dataIndex: 'fileBasisCode'
+  },
+  {
+    title: '患者姓名',
+    dataIndex: 'name'
+  },
+  {
+    title: '身份证号',
+    dataIndex: 'card'
+  },
+  {
+    title: '联系方式',
+    dataIndex: 'telephone1'
+  },
+  {
+    title: '创建日期',
+    dataIndex: 'createDate',
+    customRender: createDate => moment(createDate).format('YYYY-MM-DD')
+  }
+];
+export default {
+  data() {
+    return {
+      name: '',
+      userData: {},
+      data: [],
+      pagination: {
+        defaultPageSize: 5,
+        pageSize: 5,
+        hideOnSinglePage: true,
+        total: 0
+      },
+      loading: false,
+      columns,
+      visible: false,
+      confirmLoading: false,
+      destroyOnClose: true,
+      centered: true,
+      bodyStyle: {
+        height: '480px',
+        overflow: 'auto'
+      }
+    };
+  },
+  methods: {
+    add(value) {
+      this.visible = true;
+      this.confirmLoading = true;
+      this.userData = {};
+      this.getPatientList(1, this.pagination.pageSize, value);
+    },
+    checkuUser() {
+      if (JSON.stringify(this.userData) == '{}') {
+        this.$message.error('您还未选择患者!')
+        return
+      }
+      this.$emit('listen', this.userData);
+      this.visible = false;
+    },
+    handleCancel() {
+      this.visible = false;
+    },
+    handleTableChange(pagination, filters, sorter) {
+      this.getPatientList(pagination.current, pagination.pageSize);
+    },
+    getPatientList(pageNumber, pageSize, keyword) {
+      const keyWord = keyword ? keyword : '';
+      const Params = new URLSearchParams();
+      Params.append('pageNumber', pageNumber);
+      Params.append('pageSize', pageSize);
+      Params.append('keyWord', keyWord);
+      getPatientList(Params).then(res => {
+        this.data = res.data;
+        this.pagination.total = res.total;
+        this.confirmLoading = false;
+      });
+    }
+  },
+  computed: {
+    rowSelection() {
+      const { selectedRowKeys } = this;
+      return {
+        type: 'radio',
+        onChange: (selectedRowKeys, selectedRows) => {
+          this.userData = selectedRows[0];
+        },
+        getCheckboxProps: record => ({
+          props: {
+            disabled: record.name === 'Disabled User', // Column configuration not to be checked
+            name: record.name
+          }
+        })
+      };
+    }
+  }
+};
+</script>
diff --git a/src/views/group/addProject.vue b/src/views/group/addProject.vue
new file mode 100644
index 0000000000..773749c495
--- /dev/null
+++ b/src/views/group/addProject.vue
@@ -0,0 +1,301 @@
+<template>
+  <a-row :gutter="24" >
+    <a-col :sm="6">
+      <a-card :bordered="false">
+        <a-spin :spinning="confirmLoading">
+          <div class="filterCondition" :style="{height:height}">
+            <h4>
+              <img src="../../assets/proTitle.png" alt="" />
+              入组条件
+            </h4>
+            <a-checkbox-group @change="onChange" :value="filterCondition">
+              <a-row>
+                <a-col :span="24" v-for="(item, i) in filterConditionList">
+                  <p class="filterConditionItem">
+                    <a-checkbox :value="item.value">{{ item.label }}</a-checkbox>
+                  </p>
+                </a-col>
+              </a-row>
+            </a-checkbox-group>
+            <a-button type="primary" block @click="selectfilter">查询</a-button>
+          </div>
+        </a-spin>
+      </a-card>
+    </a-col>
+    <a-col :sm="18">
+      <a-card :bordered="false">
+        <div :style="{height:height}">
+          <a-row style="margin-bottom: 5px;">
+            <a-col :sm="6"><p style="margin-bottom: 0px;" class="queryResults">查询结果</p></a-col>
+            <a-col :sm="18" style="text-align:right">
+              <a-button type="primary" style="margin-right: 24px;" @click="selectAll">全选</a-button>
+              <a-button type="primary" @click="clearSelected">重置</a-button>
+            </a-col>
+          </a-row>
+          <s-table
+            style="text:left;"
+            ref="table"
+            size="small"
+            rowKey="patientId"
+            :columns="columns"
+            :data="loadData"
+            :alert="options.alert"
+            :rowSelection="options.rowSelection"
+            :showPagination="options.showPagination"
+            :scroll="options.scroll"
+          >
+            <span slot="serial" slot-scope="text, record, index">{{ index + 1 }}</span>
+            <span slot="visit" slot-scope="text"><a-badge :status="text | visitTypeFilter" :text="text | visitFilter" /></span>
+            <span slot="description" slot-scope="text">
+              <ellipsis :length="8" tooltip>{{ text }}</ellipsis>
+            </span>
+          </s-table>
+          <a-row style="margin-top: 20px;">
+            <a-col :sm="6">
+              <p>
+                共{{ this.total }}个,已添加
+                <span>{{ this.selectedRowKeys.length }}</span>
+                个
+              </p>
+            </a-col>
+            <a-col :sm="18" style="text-align:right">
+              <a-button type="default" style="margin-right: 24px;" @click="goGroup">取消</a-button>
+              <a-button type="primary" @click="addProject">添加</a-button>
+            </a-col>
+          </a-row>
+        </div>
+      </a-card>
+    </a-col>
+  </a-row>
+</template>
+<script>
+import moment from 'moment';
+import { STable, Ellipsis } from '@/components';
+import { getDatalList, getPatientList, joinProject } from '@/api/group';
+import { getDictionaryAttributeByDictionaryId } from '@/api/basis';
+import UserDetail from '../list/modules/UserDetail';
+import Drawer from './modules/Drawer';
+import _ from 'lodash';
+
+const visitMap = {
+  0: {
+    status: 'default',
+    text: '死亡'
+  },
+  1: {
+    status: 'processing',
+    text: '跟踪'
+  },
+  2: {
+    status: 'success',
+    text: '完成'
+  },
+  3: {
+    status: 'error',
+    text: '失访'
+  },
+  4: {
+    status: "warning",
+    text: "警告"
+  }
+};
+
+export default {
+  name: 'TableList',
+  components: {
+    STable,
+    Ellipsis,
+    UserDetail,
+    Drawer
+  },
+  data() {
+    return {
+      mdl: {},
+      total: 0,
+      confirmLoading: false,
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      projectId: '',
+      // 表头
+      columns: [
+        {
+          title: '入组编号',
+          dataIndex: 'fileBasisCode',
+          width: '120px',
+        },
+        {
+          title: '患者姓名',
+          dataIndex: 'name',
+          scopedSlots: { customRender: 'name' },
+          width: '140px',
+        },
+        {
+          title: '身份证号',
+          dataIndex: 'card',
+          width: '220px',
+        },
+        {
+          title: '创建日期',
+          dataIndex: 'createDate',
+          customRender: createDate => moment(createDate).format('YYYY-MM-DD HH:mm:ss'),
+          width: '200px',
+        },
+        {
+          title: '访视状态',
+          dataIndex: 'visit',
+          scopedSlots: { customRender: 'visit' },
+          width: '150px',
+        }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        parameter.pageSize = 1000;
+        this.queryParam.projectId = this.project.projectId;
+        this.queryParam.flag = 1;
+        return getPatientList(Object.assign(parameter, this.queryParam)).then(res => {
+          this.total = res.data.length;
+          return res;
+        });
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = [];
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        },
+        showPagination: false,
+        scroll: false
+      },
+      optionAlertShow: false,
+      filterConditionList: [],
+      filterCondition: [],
+      height:(window.screen.height-270)+"px"
+    };
+  },
+  filters: {
+    statusFilter(type) {
+      return statusMap[type].text;
+    },
+    statusTypeFilter(type) {
+      return statusMap[type].status;
+    },
+    visitFilter(type) {
+      return visitMap[type].text;
+    },
+    visitTypeFilter(type) {
+      return visitMap[type].status;
+    }
+  },
+  created() {
+    this.options.scroll={
+     y:(window.screen.height-400)+"px"
+    }
+    var that = this;
+    const dictionary1 = new URLSearchParams();
+    dictionary1.append('dictionaryId', 6);
+    dictionary1.append('status', 1);
+    this.confirmLoading = true;
+    getDictionaryAttributeByDictionaryId(dictionary1).then(res => {
+      that.filterConditionList = _.map(res.data, function(v) {
+        return {
+          label: v.name,
+          value: v.dictionaryAttributeId
+        };
+      });
+      _.forEach(that.filterConditionList, function(item) {
+        that.filterCondition.push(item.value);
+      });
+      console.log('this.$route.query.id', that.$route.query.patientId);
+      that.confirmLoading = false;
+      // });
+    });
+  },
+  mounted() {
+    
+  },
+  methods: {
+    onChange(checkedValues) {
+      this.filterCondition = checkedValues;
+    },
+    selectfilter() {
+      const key = {
+        // filterCondition: this.filterCondition.join(',')
+      };
+      console.log('key', key);
+      this.$refs.table.search(key);
+      this.$refs.table.clearSelected();
+    },
+    goGroup() {
+      this.$router.push({ path: '/group/index' });
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    addProject() {
+      var that = this;
+      this.$confirm({
+        title: '提示',
+        content: '确认添加患者至该项目',
+        onOk() {
+          if (!that.project.projectId) {
+            that.$message.error("请选择项目!")
+            that.$router.push({path:'/group/index'})
+            return;
+          }
+          const params = new URLSearchParams();
+          params.append('patientArray', that.selectedRowKeys);
+          params.append('projectId', that.project.projectId);
+          that.confirmLoading = true;
+          
+          joinProject(params).then(res => {
+            if(res.code==0){
+                that.$router.push({path:'/group/index'})
+            }
+            that.confirmLoading = false;
+          });
+        },
+        onCancel() {}
+      });
+
+      // console.log(this.selectedRowKeys);
+    },
+    selectAll() {
+      this.$refs.table.selectAll();
+    },
+    clearSelected() {
+      this.$refs.table.clearSelected();
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.filterCondition {
+  h4 {
+    border-bottom: 1px solid #dddddd;
+    img {
+      width: 65px;
+      vertical-align: middle;
+    }
+    font-size: 20px;
+  }
+  .filterConditionItem {
+    margin: 20px 0;
+  }
+}
+.queryResults {
+  color: #1990fe;
+  border-left: 10px solid #1990fe;
+  padding-left: 20px;
+  font-size: 18px;
+}
+</style>
diff --git a/src/views/group/index.vue b/src/views/group/index.vue
new file mode 100644
index 0000000000..e4c7deb763
--- /dev/null
+++ b/src/views/group/index.vue
@@ -0,0 +1,422 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索患者姓名、身份证号" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="toggleAdvanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col :md="13" class="button-group" :sm="24">
+            <span><img v-if="this.projectName" src="../../assets/duigou.png" alt="" /> {{this.projectName}}</span>
+            <a-button type="primary" @click="addCaces()">添加病例</a-button>
+            <a-button type="primary" @click="checkProject()" style="background: #ff8736;border: none;">选择项目</a-button>
+            <!-- <a-button type="primary" style="margin-left: 10px;">导出</a-button> -->
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch(1)">本月新增病例</p>
+                    <p @click="tableSearch(2)">本年新增病例</p>
+                    <p @click="tableSearch(3)">全部病例</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="入组编号">
+                        <a-input v-model.trim="queryParam.fileBasisCode" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="姓名">
+                        <a-input v-model.trim="queryParam.patientName" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="身份证号">
+                        <a-input v-model.trim="queryParam.card" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="入组日期" style="margin-bottom:0;">
+                        <a-range-picker @change="changeTime" style="width: 100%" :value="dateArr" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" size="small" :scroll="scroll" rowKey="patientId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <span slot="name" slot-scope="text,record" @click="showUser(record)">
+        <p class="userName">{{text}}</p>
+      </span>
+      <span slot="serial" slot-scope="text, record, index">{{ index + 1 }}</span>
+      <span slot="visit" slot-scope="text">
+        <a-badge :status="text | visitTypeFilter" :text="text | visitFilter" /></span>
+      <span slot="basisList" slot-scope="basisList">
+        <div v-for="pro in basisList" class="progressTag">
+          <div class="progressTagContent">
+            <p class="progressTagTitle">{{ pro.name }}</p>
+            <a-progress :strokeColor="pro.progress == 100 ? '#4BC5AC' : '#00A0E9'" :strokeWidth="10" :showInfo="false" :percent="parseInt(pro.progress)" size="small" />
+          </div>
+          <a-icon v-if="pro.progress == 100" type="check-circle" theme="filled" />
+          <span class="ant-progress-span" v-if="pro.progress < 100 && pro.progress > 0">23%</span>
+          <a-icon style="color:#00A0E9" v-if="pro.progress == 0" type="clock-circle" theme="filled" />
+        </div>
+      </span>
+      <span slot="description" slot-scope="text">
+        <ellipsis :length="8" tooltip>{{ text }}</ellipsis>
+      </span>
+      <span slot="action" slot-scope="text, record">
+        <template>
+          <a @click="handleEdit(record)">
+            出组
+          </a>
+        </template>
+      </span>
+    </s-table>
+    <user-detail ref="detailModal" />
+    <drawer :maskClosable="true" ref="drawerModal" @checkedP="checkedP"></drawer>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { STable, Ellipsis } from '@/components'
+import { getDatalList, getPatientList, deleteCase } from '@/api/group'
+import UserDetail from '../list/modules/UserDetail'
+import Drawer from './modules/Drawer'
+import $ from 'jquery'
+
+const visitMap = {
+  0: {
+    status: 'default',
+    text: '忽略'
+  },
+  1: {
+    status: 'processing',
+    text: '未执行'
+  },
+  2: {
+    status: 'success',
+    text: '执行中'
+  },
+  3: {
+    status: 'error',
+    text: '已完成'
+  }
+};
+
+export default {
+  name: 'Group',
+  components: {
+    STable,
+    Ellipsis,
+    UserDetail,
+    Drawer
+  },
+  data() {
+    return {
+      dateArr: [],
+      mdl: {},
+      bodyStyle: {
+        padding: "10px",
+        paddingBottom: "0px"
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      // 表头
+      columns: [{
+          title: '入组编号',
+          dataIndex: 'fileBasisCode',
+          width: '200px',
+        },
+        {
+          title: '患者姓名',
+          dataIndex: 'name',
+          scopedSlots: { customRender: 'name' },
+          width: "200px"
+        },
+        {
+          title: '身份证号',
+          dataIndex: 'card',
+          width: "250px"
+        },
+        {
+          title: '入组日期',
+          dataIndex: 'joinDate',
+          customRender: joinDate => moment(joinDate).format('YYYY-MM-DD'),
+          width: "200px"
+        },
+        // {
+        //   title: '访视状态',
+        //   dataIndex: 'visit',
+        //   scopedSlots: { customRender: 'visit' },
+        //   width: "200px"
+        // },
+        {
+          title: '操作',
+          dataIndex: 'action',
+          width: '80px',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.queryParam.projectId = this.project.projectId;
+        return getPatientList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res;
+        });
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      projectName: '',
+      // custom table alert & rowSelection
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = [];
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      scroll: false,
+      optionAlertShow: false
+    }
+  },
+  filters: {
+    statusFilter(type) {
+      return statusMap[type].text;
+    },
+    statusTypeFilter(type) {
+      return statusMap[type].status;
+    },
+    visitFilter(type) {
+      return visitMap[type].text;
+    },
+    visitTypeFilter(type) {
+      return visitMap[type].status;
+    }
+  },
+  created() {
+    this.scroll = {
+      y: (window.screen.height - 368) + "px"
+    }
+  },
+  mounted() {
+    this.checkProject()
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  },
+  methods: {
+    clearForm() {
+      this.queryParam = {}
+      this.dateArr = []
+    },
+    tableSearch(type) {
+      this.queryParam.type = type
+      this.$refs.table.refresh();
+      this.advanced = false;
+    },
+    refreshTable() {
+      this.advanced = false;
+      this.$refs.table.refresh();
+    },
+    showUser(record) {
+      this.$refs.detailModal.show(record);
+    },
+    handleEdit(record) {
+      var that = this;
+      this.$confirm({
+        title: '提示',
+        content: '确认将该患者移除项目?',
+        onOk() {
+          const params = new URLSearchParams();
+          params.append('patientId', record.patientId);
+          params.append('projectId', that.project.projectId);
+          that.confirmLoading = true;
+          deleteCase(params).then(res => {
+            if (res.code == 0) {
+              that.$message.success(res.msg);
+              that.$refs.table.refresh();
+            }
+            that.confirmLoading = false;
+          });
+        },
+        onCancel() {}
+      });
+    },
+    handleSub(record) {
+      if (record.status !== 0) {
+        this.$message.info(`${record.no} 订阅成功`);
+      } else {
+        this.$message.error(`${record.no} 订阅失败,规则已关闭`);
+      }
+    },
+    handleOk() {
+      this.$refs.table.refresh();
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    toggleAdvanced() {
+      this.advanced = !this.advanced;
+    },
+    resetSearchForm() {
+      this.queryParam = {
+        date: moment(new Date())
+      };
+    },
+    addCaces() {
+      this.$router.push({ path: '/group/addProject' })
+    },
+    checkProject() {
+      this.$refs.drawerModal.showDrawer();
+    },
+    checkedP(data) {
+      this.project.projectId = data.projectId;
+      this.projectName = data.projectName;
+      const key = {
+        projectId: data.projectId
+      };
+      this.$refs.table.search(key)
+    },
+    changeTime(time) {
+      this.dateArr = time;
+      this.queryParam.joinDateStart = moment(time[0]).format('YYYY-MM-DD')
+      this.queryParam.joinDateEnd = moment(time[1]).format('YYYY-MM-DD')
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+
+.progressTag {
+  display: inline-block;
+  width: 140px;
+
+  /deep/ .progressTagContent {
+    display: inline-block;
+    width: 100px;
+    margin-right: 5px;
+  }
+
+  /deep/ .progressTagTitle {
+    padding-left: 40px;
+    margin-bottom: 2px;
+  }
+
+  /deep/ .progressTag .anticon {
+    color: #4bc5ac;
+    font-size: 18px;
+    vertical-align: bottom;
+  }
+
+  /deep/ .ant-progress-inner {
+    background-color: #e5f6ff;
+  }
+
+  /deep/ .progressTag .ant-progress-span {
+    color: rgb(0, 160, 233);
+  }
+}
+
+.tableSearch {
+  background: #FFFFFF;
+  position: absolute;
+  top: 52px;
+  z-index: 100;
+}
+
+.userName {
+  color: #1FB2FA;
+  margin: 0;
+}
+
+.userName:active,
+.userName:hover {
+  text-decoration: underline;
+  text-underline-position: under;
+  text-decoration-color: #1FB2FA;
+  cursor: pointer;
+}
+
+.button-group {
+  overflow: hidden;
+
+  span {
+    float: left;
+    color: #1890ff;
+    font-size: 18px;
+    height: 32px;
+    line-height: 32px;
+
+    img {
+      display: inline-block;
+      width: 18px;
+      height: 18px;
+      margin-bottom: 3px;
+    }
+  }
+
+  button {
+    float: right;
+    margin-right: 10px;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/group/modules/Drawer.vue b/src/views/group/modules/Drawer.vue
new file mode 100644
index 0000000000..535bcfa32f
--- /dev/null
+++ b/src/views/group/modules/Drawer.vue
@@ -0,0 +1,107 @@
+<template>
+  <div>
+    <a-drawer width="350" placement="right" :closable="false" @close="onClose" :visible="visible" :maskClosable="maskClosable">
+      <div class="porjectInfo">
+        <h4 class="proJectInfoTitle">
+          <img src="../../../assets/proTitle.png" alt="" />
+          项目
+        </h4>
+        <p :class="[{checkedPro:i==n},'porjectItem']"   @click="checkedPro(item,i)"  v-for="(item,i) in dataList">
+          <my-icon type="iconziyuan1" />
+          {{item.projectName}}
+        </p>
+      </div>
+      <div
+        :style="{
+          position: 'absolute',
+          left: 0,
+          bottom: 0,
+          width: '100%',
+          borderTop: '1px solid #e9e9e9',
+          padding: '10px 16px',
+          background: '#fff',
+          textAlign: 'right'
+        }"
+      >
+      </div>
+    </a-drawer>
+  </div>
+</template>
+<script>
+import { MyIcon } from '@/components/_util/util'
+import { getDatalList,getPatientList,joinProject } from '@/api/group'
+export default {
+  data() {
+    return {
+      dataList:[],
+      n:0,
+      checkedP:{},
+      visible: false,
+      maskClosable: true,
+      pStyle: {
+        fontSize: '16px',
+        color: 'rgba(0,0,0,0.85)',
+        lineHeight: '24px',
+        display: 'block',
+        marginBottom: '16px'
+      },
+      pStyle2: {
+        marginBottom: '24px'
+      }
+    };
+  },
+  created(){
+    const parems = new URLSearchParams()
+    parems.append('pageNumber', 1)
+    parems.append('pageSize', 10)
+    getDatalList(parems).then(res => {
+      this.dataList=res.data
+    })
+  },
+  components: {
+    MyIcon
+  },
+  methods: {
+    showDrawer() {
+      this.visible = true
+    },
+    onClose() {
+      this.$emit('checkedP', this.dataList[this.n])
+      this.visible = false
+    },
+    checkedPro(value,i){
+      this.n = i
+      this.$emit('checkedP', this.dataList[this.n])
+      this.visible = false
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.porjectInfo {
+  .proJectInfoTitle {
+    height: 65px;
+    color: #019fe7;
+    font-size: 20px;
+    border-bottom: 1px solid #dddddd;
+    img {
+      width: 65px;
+    }
+  }
+  .porjectItem {
+    margin: 0px;
+    font-size: 18px;
+    padding:20px;
+    color: #838383;
+    &:hover,&.checkedPro{
+      background-color: #eaf2fd;
+      color: #35b4ed;
+    }
+    .anticon{
+      font-size: 25px;
+      margin-right: 15px;
+      vertical-align: text-top;
+    }
+  }
+}
+</style>
diff --git a/src/views/gw/article.vue b/src/views/gw/article.vue
new file mode 100644
index 0000000000..5f882fa3a4
--- /dev/null
+++ b/src/views/gw/article.vue
@@ -0,0 +1,139 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.title" placeholder="搜索文章标题" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+            </a-form-item>
+          </a-col>
+          <a-col :md="13" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="handleReview">新增</a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="textId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <template slot="terminal" slot-scope="text">
+        <span v-if="text == 1">微信</span>
+        <span v-if="text == 2">官网</span>
+      </template>
+      <template slot="operation" slot-scope="text, record">
+        <a @click="handleReview(record)">编辑</a>
+      </template>
+    </s-table>
+
+    <article-detail ref="articleDetail" @ok="handleOk"></article-detail>
+  </a-card>
+</template>
+
+<script>
+  import moment from 'moment'
+  import { getWebsiteList } from '@/api/text'
+  import { STable } from '@/components'
+  import ArticleDetail from './modules/ArticleDetail'
+  export default {
+    components: {
+      STable,
+      ArticleDetail
+    },
+    data() {
+      return {
+        bodyStyle: {
+          padding: '10px',
+          paddingBottom: '0px'
+        },
+        // 查询参数
+        queryParam: {},
+        scroll: false,
+        loadData: parameter => {
+          return getWebsiteList(Object.assign(parameter, this.queryParam)).then(res => {
+            return res
+          })
+        },
+        selectedRowKeys: [],
+        selectedRows: [],
+        options: {
+          alert: {
+            show: false,
+            clear: () => {
+              this.selectedRowKeys = []
+            }
+          },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            onChange: this.onSelectChange
+          }
+        },
+        columns: [
+          {
+            title: '文章标题',
+            dataIndex: 'title',
+            width: '220px'
+          },
+          {
+            title: '文章发布人',
+            dataIndex: 'publisher',
+            width: '100px'
+          },
+          {
+            title: '发布终端',
+            dataIndex: 'terminal',
+            scopedSlots: { customRender: 'terminal' },
+            width: '100px'
+          },
+          {
+            title: '发布时间',
+            dataIndex: 'publishDate',
+            customRender: publishDate => moment(publishDate).format('YYYY-MM-DD'),
+            width: '150px'
+          },
+          {
+            title: '阅读量',
+            dataIndex: 'num',
+            width: '100px'
+          },
+          {
+            title: '操作',
+            dataIndex: 'operation',
+            scopedSlots: { customRender: 'operation' },
+            width: '100px'
+          }
+        ],
+      }
+    },
+    created() {
+      this.scroll = {
+        y: window.screen.height - 368 + 'px'
+      }
+    },
+    methods: {
+      onSelectChange(selectedRowKeys, selectedRows) {
+        this.selectedRowKeys = selectedRowKeys;
+        this.selectedRows = selectedRows;
+      },
+      refreshTable() {
+        this.$refs.table.refresh()
+      },
+      handleReview(recode) {
+        this.$refs.articleDetail.show(recode.textId)
+      },
+      handleOk() {
+        this.$refs.table.refresh()
+      }
+    },
+  }
+</script>
+
+<style lang="less" scoped>
+  /deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+    margin-bottom: 10px;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/gw/modules/ArticleDetail.vue b/src/views/gw/modules/ArticleDetail.vue
new file mode 100644
index 0000000000..d5c3c20de6
--- /dev/null
+++ b/src/views/gw/modules/ArticleDetail.vue
@@ -0,0 +1,245 @@
+<template>
+  <a-modal :title="title" okText="发布" :width="800" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :centered="centered" :destroyOnClose="destroyOnClose" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item label="文章标题" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['title', requiredRule]" />
+        </a-form-item>
+        <a-form-item label="标题配图" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-upload v-decorator="[ 'url', { ...requiredRule, valuePropName: 'fileList', getValueFromEvent: normFile }]" :action="action" list-type="picture" @preview="handlePreview" :remove="handleRemove">
+            <a-button v-if="!fileName">
+              <a-icon type="upload" />点击上传
+            </a-button>
+          </a-upload>
+          <a-modal :visible="previewVisible" :footer="null" @cancel="previewVisible=false">
+            <img alt="example" style="width: 100%" :src="previewImage" />
+          </a-modal>
+        </a-form-item>
+        <a-form-item label="模块类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-select style="width: 100%" v-decorator="['type', requiredRule]">
+            <a-select-option value="1">新闻动态</a-select-option>
+            <a-select-option value="2">通知公告</a-select-option>
+            <a-select-option value="3">前沿热点</a-select-option>
+            <a-select-option value="4">继教学院</a-select-option>
+            <a-select-option value="6">科普文章</a-select-option>
+            <a-select-option value="7">患教课件</a-select-option>
+            <a-select-option value="8">关于我们</a-select-option>
+          </a-select>
+        </a-form-item>
+        <a-form-item label="文章发布人" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['publisher', requiredRule]" />
+        </a-form-item>
+        <a-form-item class="textarea" label="文章内容" :labelCol="labelCol" :wrapperCol="wrapperCol" style="margin-bottom:0">
+          <quill-editor v-decorator="['text', { valuePropName: 'value', getValueFromEvent: normEditor }]" :options="editorOption"></quill-editor>
+        </a-form-item>
+        <a-form-item label="附件上传" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-upload v-decorator="[ 'annexUrl', { valuePropName: 'fileList', getValueFromEvent: normFile2 }]" :action="action" list-type="text" :remove="handleRemove2">
+            <a-button v-if="!fileName2">
+              <a-icon type="upload" />点击上传
+            </a-button>
+          </a-upload>
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+import { getArticleDetail, addOrEdit } from '@/api/text'
+import { quillEditor, Quill } from 'vue-quill-editor'
+import Video from '@/utils/quill-video.js'
+import 'quill/dist/quill.snow.css'
+import quillConfig from '@/utils/quillConfig'
+Quill.register(Video, true)
+export default {
+  components: {
+    quillEditor
+  },
+  data() {
+    return {
+      editorOption: quillConfig,
+      title: '',
+      bodyStyle: {
+        height: '500px',
+        overflow: 'auto'
+      },
+      maskClosable: false,
+      centered: true,
+      destroyOnClose: true,
+      visible: false,
+      confirmLoading: false,
+      form: this.$form.createForm(this),
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 17 }
+      },
+      requiredRule: { rules: [{ required: true, message: '该选项必填' }] },
+      textId: '',
+      previewVisible: false,
+      previewImage: '',
+      action: process.env.VUE_APP_API_UPLOAD_URL,
+      attachsPrefix: process.env.VUE_APP_API_VIEW_PIC_URL,
+      fileName: '',
+      fileName2: '',
+      originalFileName: ''
+    }
+  },
+  methods: {
+    show(textId) {
+      this.visible = true;
+      this.textId = textId;
+
+      if (textId) {
+        this.confirmLoading = true
+        this.title = '修改文章'
+        const params = {
+          textId,
+          terminal: '2'
+        }
+        getArticleDetail(params).then(res => {
+          this.confirmLoading = false
+          this.form.setFieldsValue({
+            title: res.data.title,
+            type: String(res.data.type),
+            publisher: res.data.publisher,
+            text: res.data.text
+          });
+          if (res.data.url) {
+            this.form.setFieldsValue({
+              url: [{
+                uid: '1',
+                name: res.data.url,
+                status: 'done',
+                url: this.attachsPrefix + res.data.url
+              }],
+            })
+          }
+          this.fileName = res.data.url
+          if (res.data.annexUrl) {
+            this.form.setFieldsValue({
+              annexUrl: [{
+                uid: '2',
+                name: res.data.annexUrl,
+                status: 'done',
+                url: this.attachsPrefix + res.data.annexUrl
+              }],
+            })
+          }
+          this.fileName2 = res.data.annexUrl
+          this.originalFileName = res.data.originalFileName
+        })
+      } else {
+        this.title = '新增文章'
+        this.fileName = ''
+        this.fileName2 = ''
+        this.originalFileName = ''
+      }
+    },
+    handleChange(e) {
+      if (e.target.value) {
+        this.form.setFieldsValue({ type: '' })
+      }
+    },
+    normEditor(e) {
+      return e && e.html
+    },
+    normFile(e) {
+      if (Array.isArray(e)) {
+        return e;
+      }
+      const isJPG = e.file.type === 'image/jpeg';
+      const isPNG = e.file.type === 'image/png';
+      if (!(isJPG || isPNG)) {
+        this.$message.error('请上传正确的图片格式');
+      }
+      const isLt1M = e.file.size / 1024 / 1024 < 1;
+      if (!isLt1M) {
+        this.$message.error('图片大小不能超过1MB!');
+      }
+      if (e.file.status == 'done') {
+        this.fileName = e.file.response.fileName
+      }
+      if ((isJPG || isPNG) && isLt1M) {
+        return e && e.fileList;
+      }
+      return []
+    },
+    normFile2(e) {
+      if (Array.isArray(e)) {
+        return e;
+      }
+      if (e.file.status == 'done') {
+        this.fileName2 = e.file.response.fileName
+        this.originalFileName = e.file.response.originalFileName
+      }
+      return e && e.fileList
+    },
+    handleRemove(file) {
+      this.fileName = ''
+    },
+    handleRemove2(file) {
+      this.fileName2 = ''
+      this.originalFileName = ''
+    },
+    handlePreview(file) {
+      this.previewImage = file.url || file.thumbUrl
+      this.previewVisible = true
+    },
+    handleSubmit() {
+      this.confirmLoading = true
+
+      const { form: { validateFieldsAndScroll } } = this;
+
+      validateFieldsAndScroll((errors, fieldsValue) => {
+        if (errors) {
+          this.confirmLoading = false;
+          return;
+        }
+
+        const params = new FormData()
+        const textWx = {
+          ...fieldsValue,
+          terminal: '2',
+          url: this.fileName,
+          annexUrl: this.fileName2,
+          originalFileName: this.originalFileName
+        }
+        if (this.textId) {
+          textWx.textId = this.textId
+        }
+        params.append('entity', JSON.stringify(textWx))
+
+        addOrEdit(params).then(res => {
+          this.$message.success(res.msg);
+          this.visible = false
+          this.confirmLoading = false
+          this.$emit('ok')
+        })
+      })
+    },
+    handleCancel() {
+      this.visible = false
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+.textarea {
+  /deep/.ant-form-item-control {
+    line-height: 1;
+  }
+}
+
+/deep/ .ql-editor {
+  height: 350px;
+}
+/deep/ .ql-video[type='file'] {
+  display: none;
+}
+/deep/ .ql-editor .ql-video {
+  width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/gw/pageConfigure.vue b/src/views/gw/pageConfigure.vue
new file mode 100644
index 0000000000..35d2658f34
--- /dev/null
+++ b/src/views/gw/pageConfigure.vue
@@ -0,0 +1,299 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <a-spin :spinning="isLoading">
+      <a-row class="btns" type="flex" justify="end">
+        <a-button type="primary" :loading="isLoading" @click="save">保存</a-button>
+      </a-row>
+      <a-row class="content">
+        <a-divider orientation="left">Banner</a-divider>
+        <a-row class="block-item" type="flex" justify="space-between">
+          <a-col class="banner-item" v-for="(item, index) in bannerData" :key="index">
+            <a-row class="banner-item-top" type="flex" justify="space-between" align="middle">
+              <span class="title">banner{{index+1}}</span>
+              <a-upload v-if="item.src" :beforeUpload="(res)=>beforeUpload(res,index)" :showUploadList="false" :action="action" @change="handleBannerChange">
+                <a-button>
+                  <a-icon type="upload" />替换
+                </a-button>
+              </a-upload>
+            </a-row>
+            <div class="banner-item-img" :class="item.src ? 'active' : ''">
+              <img v-if="item.src" :src="attachsPrefix + item.src">
+              <a-upload-dragger v-else :beforeUpload="(res)=>beforeUpload(res,index)" :showUploadList="false" :action="action" @change="handleBannerChange">
+                <p class="ant-upload-drag-icon">
+                  <a-icon type="upload" />
+                </p>
+                <p class="ant-upload-text">上传图片</p>
+              </a-upload-dragger>
+            </div>
+            <a-row type="flex" align="middle">
+              <span class="tip-icon"></span>
+              <span>建议图片尺寸1100*400px,小于1MB</span>
+            </a-row>
+          </a-col>
+        </a-row>
+
+        <a-divider orientation="left">项目介绍</a-divider>
+        <a-row class="block-item">
+          <quill-editor v-model="text" :options="editorOption"></quill-editor>
+        </a-row>
+
+        <a-divider orientation="left">项目轮播图</a-divider>
+        <a-row class="block-item" type="flex" justify="space-between">
+          <a-col class="lunbo-item" v-for="(item, index) in lunboData" :key="index">
+            <a-row class="lunbo-item-top" type="flex" justify="space-between" align="middle">
+              <span class="title">轮播图{{index+1}}</span>
+              <a-upload v-if="item.src" :beforeUpload="(res)=>beforeUpload(res,index)" :showUploadList="false" :action="action" @change="handleLunboChange">
+                <a-button>
+                  <a-icon type="upload" />替换
+                </a-button>
+              </a-upload>
+            </a-row>
+            <div class="lunbo-item-img" :class="item.src ? 'active' : ''">
+              <img v-if="item.src" :src="attachsPrefix + item.src">
+              <a-upload-dragger v-else :beforeUpload="(res)=>beforeUpload(res,index)" :showUploadList="false" :action="action" @change="handleLunboChange">
+                <p class="ant-upload-drag-icon">
+                  <a-icon type="upload" />
+                </p>
+                <p class="ant-upload-text">上传图片</p>
+              </a-upload-dragger>
+            </div>
+            <a-row type="flex" align="middle">
+              <span class="tip-icon"></span>
+              <span>建议图片尺寸320*240px,小于500KB</span>
+            </a-row>
+            <a-row style="margin-top:10px">
+              <a-input v-model="item.remake" placeholder="填写图片说明" />
+            </a-row>
+          </a-col>
+        </a-row>
+
+        <a-divider orientation="left">友情链接</a-divider>
+        <a-row type="flex" justify="space-between">
+          <a-col class="blog-item" v-for="(item, index) in blogData" :key="index">
+            <a-row class="blog-item-top" type="flex" justify="space-between" align="middle">
+              <span class="title">友情链接{{index+1}}</span>
+              <a-upload v-if="item.url" :beforeUpload="(res)=>beforeUpload(res,index)" :showUploadList="false" :action="action" @change="handleBlogChange">
+                <a-button>
+                  <a-icon type="upload" />替换
+                </a-button>
+              </a-upload>
+            </a-row>
+            <div class="blog-item-img" :class="item.url ? 'active' : ''">
+              <img v-if="item.url" :src="attachsPrefix + item.url">
+              <a-upload-dragger v-else :beforeUpload="(res)=>beforeUpload(res,index)" :showUploadList="false" :action="action" @change="handleBlogChange">
+                <p class="ant-upload-drag-icon">
+                  <a-icon type="upload" />
+                </p>
+                <p class="ant-upload-text">上传图片</p>
+              </a-upload-dragger>
+            </div>
+            <a-row type="flex" align="middle">
+              <span class="tip-icon"></span>
+              <span>建议图片尺寸240*100px,小于500KB</span>
+            </a-row>
+            <a-row style="margin-top:10px">
+              <a-input v-model="item.link" placeholder="链接地址" />
+            </a-row>
+          </a-col>
+        </a-row>
+      </a-row>
+    </a-spin>
+  </a-card>
+</template>
+
+<script>
+  import { getDataList, saveData } from '@/api/textGwLb'
+  import { quillEditor } from 'vue-quill-editor'
+  import 'quill/dist/quill.snow.css'
+  import quillConfig from '@/utils/quillConfig'
+  export default {
+    components: {
+      quillEditor
+    },
+    data() {
+      return {
+        bodyStyle: {
+          padding: '10px'
+        },
+        isLoading: false,
+        bannerData: [
+          { src: '' },
+          { src: '' },
+          { src: '' }
+        ],
+        text: '',
+        editorOption: quillConfig,
+        lunboData: [
+          { src: '', remake: '' },
+          { src: '', remake: '' },
+          { src: '', remake: '' }
+        ],
+        blogData: [
+          { url: '', link: '' },
+          { url: '', link: '' },
+          { url: '', link: '' },
+          { url: '', link: '' }
+        ],
+        activeIndex: 0,
+        action: process.env.VUE_APP_API_UPLOAD_URL,
+        attachsPrefix: process.env.VUE_APP_API_VIEW_PIC_URL,
+      }
+    },
+    mounted() {
+      this.getData();
+    },
+    methods: {
+      getData() {
+        this.isLoading = true
+        getDataList().then(res => {
+          this.isLoading = false
+
+          this.bannerData[0].src = res.data.textGwLb.topUrl1
+          this.bannerData[1].src = res.data.textGwLb.topUrl2
+          this.bannerData[2].src = res.data.textGwLb.topUrl3
+          this.lunboData[0].src = res.data.textGwLb.projectUrl1
+          this.lunboData[1].src = res.data.textGwLb.projectUrl2
+          this.lunboData[2].src = res.data.textGwLb.projectUrl3
+          this.lunboData[0].remake = res.data.textGwLb.url1Remake
+          this.lunboData[1].remake = res.data.textGwLb.url2Remake
+          this.lunboData[2].remake = res.data.textGwLb.url3Remake
+          this.text = res.data.textGwLb.text
+
+          res.data.textGwLbDetailList.forEach((item, index) => {
+            this.blogData[index].url = item.url
+            this.blogData[index].link = item.link
+          })
+        })
+      },
+      beforeUpload(file, index) {
+        this.activeIndex = index
+        const isJPG = file.type === 'image/jpeg';
+        const isPNG = file.type === 'image/png';
+        if (!(isJPG || isPNG)) {
+          this.$message.error('只能上传jpg或png格式的图片!');
+        }
+        const isLt1M = file.size / 1024 / 1024 < 1;
+        if (!isLt1M) {
+          this.$message.error('图片大小不能超过1MB!');
+        }
+        return (isJPG || isPNG) && isLt1M;
+      },
+      handleBannerChange(info) {
+        if (info.file.status === 'done') {
+          this.bannerData[this.activeIndex].src = info.file.response.fileName
+        }
+      },
+      handleLunboChange(info) {
+        if (info.file.status === 'done') {
+          this.lunboData[this.activeIndex].src = info.file.response.fileName
+        }
+      },
+      handleBlogChange(info) {
+        if (info.file.status === 'done') {
+          this.blogData[this.activeIndex].url = info.file.response.fileName
+        }
+      },
+      save() {
+        const params = new FormData()
+        const textGwLb = {
+          textId: 1,
+          top_url1: this.bannerData[0].src,
+          top_url2: this.bannerData[1].src,
+          top_url3: this.bannerData[2].src,
+          text: this.text,
+          project_url1: this.lunboData[0].src,
+          url1Remake: this.lunboData[0].remake,
+          project_url2: this.lunboData[1].src,
+          url2Remake: this.lunboData[1].remake,
+          project_url3: this.lunboData[2].src,
+          url3Remake: this.lunboData[2].remake,
+        }
+        params.append('textGwLb', JSON.stringify(textGwLb))
+        params.append('entity', JSON.stringify(this.blogData))
+
+        this.isLoading = true
+        saveData(params).then(res => {
+          this.isLoading = false
+          this.$message.success(res.msg)
+        })
+      }
+    },
+  }
+</script>
+
+<style lang="less" scoped>
+  /deep/ .ql-editor {
+    height: 350px;
+  }
+  /deep/ .ant-spin-nested-loading > div > .ant-spin {
+    max-height: inherit;
+  }
+  /deep/ .ant-divider-horizontal.ant-divider-with-text-left {
+    margin: 10px 0;
+  }
+  img {
+    width: 100%;
+    height: 100%;
+  }
+  .btns {
+    padding-bottom: 10px;
+  }
+  .content {
+    height: 780px;
+    padding: 0 20px 20px;
+    overflow: auto;
+  }
+  .block-item {
+    margin-bottom: 80px;
+  }
+  .title {
+    height: 20px;
+    line-height: 20px;
+    font-size: 16px;
+    font-weight: bold;
+    border-left: 5px solid #1890ff;
+    padding-left: 5px;
+  }
+  .tip-icon {
+    width: 16px;
+    height: 20px;
+    background-image: url('../../assets/tip-icon.png');
+    background-size: 100% 100%;
+    margin-right: 5px;
+  }
+  .active {
+    // border: 2px solid #40a9ff;
+    border: 2px solid rgba(64, 169, 255, 0.6);
+    padding: 5px;
+  }
+  .banner-item {
+    width: 450px;
+    &-top {
+      height: 36px;
+    }
+    &-img {
+      height: 170px;
+      margin: 15px 0;
+    }
+  }
+  .lunbo-item {
+    width: 350px;
+    &-top {
+      height: 36px;
+    }
+    &-img {
+      height: 250px;
+      margin: 15px 0;
+    }
+  }
+  .blog-item {
+    width: 300px;
+    &-top {
+      height: 36px;
+    }
+    &-img {
+      height: 130px;
+      margin: 15px 0;
+    }
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/icon/jxjzq.vue b/src/views/icon/jxjzq.vue
new file mode 100644
index 0000000000..1a35514300
--- /dev/null
+++ b/src/views/icon/jxjzq.vue
@@ -0,0 +1,1271 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height: 100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <a-form-item label="(1) 急性加重日期" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-date-picker placeholder="请选择" style="width: 240px;" :disabledDate="disabledDate" v-decorator="['t', {...dateRequire, initialValue: initValue('t', 'time')}]"></a-date-picker>
+              </a-form-item>
+              <a-form-item label="(2) 急性加重结束日期" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-date-picker placeholder="请选择" style="width: 240px;" :disabledDate="disabledDate" v-decorator="['t4', {...dateRequire, initialValue: initValue('t4', 'time')}]"></a-date-picker>
+              </a-form-item>
+              <a-form-item label="(3) 急性加重的症状(多选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-checkbox-group v-decorator="['t1', {...selectRequired, initialValue: initValue('t1', 'array')}]" class="control-m-line">
+                  <a-checkbox value="1">咳嗽</a-checkbox>
+                  <a-checkbox value="2">咳痰</a-checkbox>
+                  <a-checkbox value="3">脓性痰</a-checkbox>
+                  <a-checkbox value="4">痰血</a-checkbox>
+                  <a-checkbox value="5">咯血</a-checkbox>
+                  <a-checkbox value="6">胸闷</a-checkbox>
+                  <a-checkbox value="7">喘息</a-checkbox>
+                  <a-checkbox value="8">呼吸困难</a-checkbox>
+                  <a-checkbox value="9">胸痛</a-checkbox>
+                  <a-checkbox value="10">发热</a-checkbox>
+                  <a-checkbox value="11">乏力</a-checkbox>
+                  <a-checkbox value="12">纳差</a-checkbox>
+                  <a-checkbox value="13">消瘦</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="(4) 气道分泌物微生物培养" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['t2', {nitialValue: initValue('t2')}]" @change="changeRadio($event, 'controlt2')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlt2">
+                <a-form-item label="分离到微生物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['a', { initialValue: initValue('a', 'array')}]">
+                    <a-checkbox value="1" @change="changeSelect($event, 'control1')">细菌</a-checkbox>
+                    <a-checkbox value="2" @change="changeSelect($event, 'control2')">真菌</a-checkbox>
+                    <a-checkbox value="3" @change="changeSelect($event, 'control3')">分枝杆菌</a-checkbox>
+                    <a-checkbox value="4" @change="changeSelect($event, 'control4')">其他</a-checkbox>
+                    <a-checkbox value="5" @change="changeSelect($event, 'control5')">无</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <div v-if="control1">
+                  <div class="title">1.细菌</div>
+                  <a-form-item label="(1) 取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['a1', { initialValue: initValue('a1', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                  </a-form-item>
+                  <a-form-item label="(2) 种类:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['a11', { initialValue: initValue('a11', 'array')}]">
+                      <a-checkbox value="1">铜绿假单胞菌</a-checkbox>
+                      <a-checkbox value="2">肺炎链球菌</a-checkbox>
+                      <a-checkbox value="3">肺炎克雷伯菌</a-checkbox>
+                      <a-checkbox value="4">阴沟肠杆菌</a-checkbox>
+                      <a-checkbox value="5">副流感嗜血杆菌</a-checkbox>
+                      <a-checkbox value="6">鲍曼不动杆菌</a-checkbox>
+                      <a-checkbox value="7">金黄色葡萄球菌</a-checkbox>
+                      <a-checkbox value="8" @change="changeSelect($event, 'controla118')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <a-form-item label="其他细菌名称:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controla118">
+                    <a-input style="width: 240px;margin-right: 10px;" autocomplete="off" v-decorator="['a12', {...inputRequired, initialValue: initValue('a12')}]"></a-input>
+                  </a-form-item>
+                </div>
+                <div v-if="control2">
+                  <div class="title">2.真菌</div>
+                  <a-form-item label="(1) 取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['a2', { initialValue: initValue('a2', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                  </a-form-item>
+                  <a-form-item label="(2) 种类:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['a21', { initialValue: initValue('a21', 'array')}]">
+                      <a-checkbox value="0">白色念珠菌</a-checkbox>
+                      <a-checkbox value="1">曲霉</a-checkbox>
+                      <a-checkbox value="2" @change="changeSelect($event, 'controla212')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <a-form-item label="其他真菌名称:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controla212">
+                    <a-input style="width: 240px;margin-right: 10px;" autocomplete="off" v-decorator="['a22', {...inputRequired, initialValue: initValue('a22')}]"></a-input>
+                  </a-form-item>
+                </div>
+                <div v-if="control3">
+                  <div class="title">3.分枝杆菌</div>
+                  <a-form-item label="(1) 取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['a3', { initialValue: initValue('a3', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                  </a-form-item>
+                  <a-form-item label="(2) 种类:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['a31', { initialValue: initValue('a31', 'array')}]">
+                      <a-checkbox value="1">结核分枝杆菌</a-checkbox>
+                      <a-checkbox value="2">非结核分枝杆菌</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                </div>
+                <div v-if="control4">
+                  <div class="title">4.其他病原</div>
+                  <a-form-item label="(1) 取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['a4', { initialValue: initValue('a4', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                  </a-form-item>
+                  <a-form-item label="(2) 种类:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-input style="width: 240px;" v-decorator="['a41', {...inputRequired, initialValue: initValue('a41')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                </div>
+              </div>
+              <a-form-item label="(5) 其他方法获得的病原学信息" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+              </a-form-item>
+              <a-form-item label="取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['a5', {initialValue: initValue('a5', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+              </a-form-item>
+              <a-form-item label="种类:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['a51', {initialValue: initValue('a51')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(6) 血常规检测结果" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['b1', {initialValue: initValue('b1')}]" @change="changeRadio($event, 'controlb1')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb1">
+                <a-form-item label="检查时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" v-decorator="['b11', {  initialValue: initValue('b11', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="白细胞:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b12', { initialValue: initValue('b12')}]" addonAfter="10^9/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="中性粒细胞绝对值:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b13', { initialValue: initValue('b13')}]" addonAfter="10^9/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="淋巴细胞绝对值:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b14', { initialValue: initValue('b14')}]" addonAfter="10^9/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="C反应蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b15', { initialValue: initValue('b15')}]" addonAfter="mg/L" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(7) 急性加重是否住院" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['b2', {initialValue: initValue('b2')}]" @change="changeRadio($event, 'controlb2')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb2">
+                <a-form-item label="(7-1) 本次支气管扩张急性加重的住院日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-date-picker placeholder="请选择" v-decorator="['b21', {initialValue: initValue('b21', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="(7-2) 本次支气管扩张急性加重的出院日期" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" v-decorator="['b22', {initialValue: initValue('b22', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                </a-form-item>
+              </div>
+              <a-form-item label="(8) 本次支气管扩张急性加重时的抗生素治疗" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-checkbox-group v-decorator="['b3', {...selectRequired, initialValue: initValue('b3', 'array')}]" class="control-m-line">
+                  <a-checkbox value="1" @change="changeSelect($event, 'controlb31')">哌拉西林</a-checkbox>
+                  <a-checkbox value="2" @change="changeSelect($event, 'controlb32')">哌拉西林/他唑巴坦</a-checkbox>
+                  <a-checkbox value="19" @change="changeSelect($event, 'controlb319')">头孢曲松</a-checkbox>
+                  <a-checkbox value="3" @change="changeSelect($event, 'controlb33')">头孢他啶</a-checkbox>
+                  <a-checkbox value="4" @change="changeSelect($event, 'controlb34')">头孢哌酮</a-checkbox>
+                  <a-checkbox value="5" @change="changeSelect($event, 'controlb35')">头孢哌酮/舒巴坦</a-checkbox>
+                  <a-checkbox value="6" @change="changeSelect($event, 'controlb36')">头孢吡肟</a-checkbox>
+                  <a-checkbox value="20" @change="changeSelect($event, 'controlb320')">头孢类抗生素(头孢呋辛、头孢西丁等)</a-checkbox>
+                  <a-checkbox value="7" @change="changeSelect($event, 'controlb37')">亚胺培南</a-checkbox>
+                  <a-checkbox value="8" @change="changeSelect($event, 'controlb38')">美罗培南</a-checkbox>
+                  <a-checkbox value="9" @change="changeSelect($event, 'controlb39')">氨曲南</a-checkbox>
+                  <a-checkbox value="10" @change="changeSelect($event, 'controlb310')">环丙沙星</a-checkbox>
+                  <a-checkbox value="11" @change="changeSelect($event, 'controlb311')">左氧氟沙星</a-checkbox>
+                  <a-checkbox value="12" @change="changeSelect($event, 'controlb312')">阿米卡星</a-checkbox>
+                  <a-checkbox value="13" @change="changeSelect($event, 'controlb313')">妥布霉素</a-checkbox>
+                  <a-checkbox value="14" @change="changeSelect($event, 'controlb314')">庆大霉素</a-checkbox>
+                  <a-checkbox value="15" @change="changeSelect($event, 'controlb315')">多黏菌素E</a-checkbox>
+                  <a-checkbox value="16" @change="changeSelect($event, 'controlb316')">多黏菌素B</a-checkbox>
+                  <a-checkbox value="17" @change="changeSelect($event, 'controlb317')">磷霉素</a-checkbox>
+                  <a-checkbox value="18" @change="changeSelect($event, 'controlb318')">其他</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <div v-if="controlb31">
+                <a-form-item label="哌拉西林起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b31', { initialValue: initValue('b31', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="哌拉西林停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b32', { initialValue: initValue('b32', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb32">
+                <a-form-item label="哌拉西林/他唑巴坦起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b41', { initialValue: initValue('b41', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="哌拉西林/他唑巴坦停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b42', { initialValue: initValue('b42', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb319">
+                <a-form-item label="头孢曲松起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b231', { initialValue: initValue('b231', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="头孢曲松停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b232', { initialValue: initValue('b232', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb33">
+                <a-form-item label="头孢他啶起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b51', { initialValue: initValue('b51', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="头孢他啶停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b52', { initialValue: initValue('b52', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb34">
+                <a-form-item label="头孢哌酮起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b61', { initialValue: initValue('b61', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="头孢哌酮停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b62', { initialValue: initValue('b62', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb35">
+                <a-form-item label="头孢哌酮/舒巴坦起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b71', { initialValue: initValue('b71', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="头孢哌酮/舒巴坦停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b72', { initialValue: initValue('b72', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb36">
+                <a-form-item label="头孢吡肟起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b81', { initialValue: initValue('b81', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="头孢吡肟停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b82', { initialValue: initValue('b82', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb320">
+                <a-form-item label="头孢类抗生素(头孢呋辛、头孢西丁等)起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b241', { initialValue: initValue('b241', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="头孢类抗生素(头孢呋辛、头孢西丁等)停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b242', { initialValue: initValue('b242', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb37">
+                <a-form-item label="亚胺培南起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b91', { initialValue: initValue('b91', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="亚胺培南停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b92', { initialValue: initValue('b92', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb38">
+                <a-form-item label="美罗培南起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b101', { initialValue: initValue('b101', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="美罗培南停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b102', { initialValue: initValue('b102', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb39">
+                <a-form-item label="氨曲南起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b111', { initialValue: initValue('b111', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="氨曲南停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b112', { initialValue: initValue('b112', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb310">
+                <a-form-item label="环丙沙星起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b121', { initialValue: initValue('b121', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="环丙沙星停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b122', { initialValue: initValue('b122', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb311">
+                <a-form-item label="左氧氟沙星起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b131', { initialValue: initValue('b131', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="左氧氟沙星停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b132', { initialValue: initValue('b132', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb312">
+                <a-form-item label="阿米卡星起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b141', { initialValue: initValue('b141', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="阿米卡星停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b142', { initialValue: initValue('b142', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb313">
+                <a-form-item label="妥布霉素起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b151', { initialValue: initValue('b151', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="妥布霉素停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b152', { initialValue: initValue('b152', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb314">
+                <a-form-item label="庆大霉素起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b161', { initialValue: initValue('b161', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="庆大霉素停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b162', { initialValue: initValue('b162', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb315">
+                <a-form-item label="多黏菌素E起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b171', { initialValue: initValue('b171', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="多黏菌素E停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b172', { initialValue: initValue('b172', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb316">
+                <a-form-item label="多黏菌素B起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b181', { initialValue: initValue('b181', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="多黏菌素B停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b182', { initialValue: initValue('b182', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb317">
+                <a-form-item label="磷霉素起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b191', { initialValue: initValue('b191', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="磷霉素停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b192', { initialValue: initValue('b192', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+              <div v-if="controlb318">
+                <a-form-item label="其他抗生素种类" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;margin-right: 10px;" autocomplete="off" v-decorator="['b201', { initialValue: initValue('b201')}]"></a-input>
+                </a-form-item>
+                <a-form-item label="其他抗生素起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b202', {initialValue: initValue('b202', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="其他抗生素停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b203', {initialValue: initValue('b203', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="其他抗生素种类" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;margin-right: 10px;" autocomplete="off" v-decorator="['b211', {...inputRequired, initialValue: initValue('b211')}]"></a-input>
+                </a-form-item>
+                <a-form-item label="其他抗生素起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b212', {initialValue: initValue('b212', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="其他抗生素停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b213', {initialValue: initValue('b213', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="其他抗生素种类" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;margin-right: 10px;" autocomplete="off" v-decorator="['b221', {...inputRequired, initialValue: initValue('b221')}]"></a-input>
+                </a-form-item>
+                <a-form-item label="其他抗生素起始日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b222', {initialValue: initValue('b222', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="其他抗生素停药日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b223', {initialValue: initValue('b223', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+              </div>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, getMedicineAllergyList, recoverSubmit } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import AddTable from "@/views/account/center/model/table"
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+export default {
+  name: 'iconJxjzq',
+  components: {
+    STree,
+    MyIcon,
+    AddTable
+  },
+  data() {
+    return {
+      markName: 'iconjxjz',
+      title: '急性加重期',
+      openKeys: [],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      defaultSelectedKeys: [],
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      baselineFormStyle: {
+        // height: '444px',
+        'padding-top': '52px'
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 5, offset: 3 }
+      },
+      wrapperOffset: {
+        md: { span: 16 }
+      },
+      labelColOffset2: {
+        md: { span: 6, offset: 3 }
+      },
+      wrapperOffset2: {
+        md: { span: 15 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      inputNumRequired: {
+        rules: [{ type: 'number', required: true, message: '请填写数字!',transform:(value)=> {return Number(value)} }]
+      },
+      form: this.$form.createForm(this),
+      patientBasisId: this.$route.params.id,
+      iconjxjz: undefined,
+      maskId: undefined,
+      spinning: false,
+      executeStatus: false,
+      optionDataSource: [],
+      picList: [],
+      type: '',
+      controlt2: false,
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      control1: false,
+      control2: false,
+      control3: false,
+      control4: false,
+      control5: false,
+      controla118: false,
+      controla212: false,
+      controlb1: false,
+      controlb2: false,
+      controlb31: false,
+      controlb32: false,
+      controlb33: false,
+      controlb34: false,
+      controlb35: false,
+      controlb36: false,
+      controlb37: false,
+      controlb38: false,
+      controlb39: false,
+      controlb310: false,
+      controlb311: false,
+      controlb312: false,
+      controlb313: false,
+      controlb314: false,
+      controlb315: false,
+      controlb316: false,
+      controlb317: false,
+      controlb318: false,
+      controlb319: false,
+      controlb320: false
+    }
+  },
+  created() {
+    var that = this
+
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.maskId = res.data.list[1].basisMarkId
+        that.defaultSelectedKeys = [that.maskId]
+        that.executeStatus = res.data.list[1].executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+        that.getFormData()
+      })
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeSelect(e, t) {
+      var that = this
+      this[t] = e.target.checked
+      if (t === 'control5' && e.target.checked) {
+        this.control1 = false
+        this.control2 = false
+        this.control3 = false
+        this.control4 = false
+        //赋值必须要延时
+        setTimeout(function() {
+          that.form.setFieldsValue({ a: ['5'] })
+        }, 0)
+      }
+    },
+    changeRadio(e, t) {
+      if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      if (e.key > 64) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      }
+      return false
+    },
+    handleSubmit(e) {
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      this.confirmLoading = true
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          console.log('values', values)
+          var re = this.form.getFieldsValue()
+          re = {
+            ...re,
+            'a': typeof re['a'] !== 'undefined' ? re['a'].join(',') : '',
+            't1': typeof re['t1'] !== 'undefined' ? re['t1'].join(',') : '',
+            'a11': typeof re['a11'] !== 'undefined' ? re['a11'].join(',') : '',
+            'a21': typeof re['a21'] !== 'undefined' ? re['a21'].join(',') : '',
+            'a31': typeof re['a31'] !== 'undefined' ? re['a31'].join(',') : '',
+            'b3': typeof re['b3'] !== 'undefined' ? re['b3'].join(',') : '',
+            'a1': typeof re['a1'] !== 'undefined' ? re['a1'].format('YYYY-MM-DD') : '',
+            't': typeof re['t'] !== 'undefined' ? re['t'].format('YYYY-MM-DD') : '',
+            't4': typeof re['t4'] !== 'undefined' ? re['t4'].format('YYYY-MM-DD') : '',
+            'a2': typeof re['a2'] !== 'undefined' ? re['a2'].format('YYYY-MM-DD') : '',
+            'a3': typeof re['a3'] !== 'undefined' ? re['a3'].format('YYYY-MM-DD') : '',
+            'a4': typeof re['a4'] !== 'undefined' ? re['a4'].format('YYYY-MM-DD') : '',
+            'a5': typeof re['a5'] !== 'undefined' ? re['a5'].format('YYYY-MM-DD') : '',
+            'b11': typeof re['b11'] !== 'undefined' ? re['b11'].format('YYYY-MM-DD') : '',
+            'b21': typeof re['b21'] !== 'undefined' ? re['b21'].format('YYYY-MM-DD') : '',
+            'b22': typeof re['b22'] !== 'undefined' ? re['b22'].format('YYYY-MM-DD') : '',
+            'b31': typeof re['b31'] !== 'undefined' ? re['b31'].format('YYYY-MM-DD') : '',
+            'b32': typeof re['b32'] !== 'undefined' ? re['b32'].format('YYYY-MM-DD') : '',
+            'b41': typeof re['b41'] !== 'undefined' ? re['b41'].format('YYYY-MM-DD') : '',
+            'b42': typeof re['b42'] !== 'undefined' ? re['b42'].format('YYYY-MM-DD') : '',
+            'b51': typeof re['b51'] !== 'undefined' ? re['b51'].format('YYYY-MM-DD') : '',
+            'b52': typeof re['b52'] !== 'undefined' ? re['b52'].format('YYYY-MM-DD') : '',
+            'b61': typeof re['b61'] !== 'undefined' ? re['b61'].format('YYYY-MM-DD') : '',
+            'b62': typeof re['b62'] !== 'undefined' ? re['b62'].format('YYYY-MM-DD') : '',
+            'b71': typeof re['b71'] !== 'undefined' ? re['b71'].format('YYYY-MM-DD') : '',
+            'b72': typeof re['b72'] !== 'undefined' ? re['b72'].format('YYYY-MM-DD') : '',
+            'b81': typeof re['b81'] !== 'undefined' ? re['b81'].format('YYYY-MM-DD') : '',
+            'b82': typeof re['b82'] !== 'undefined' ? re['b82'].format('YYYY-MM-DD') : '',
+            'b91': typeof re['b91'] !== 'undefined' ? re['b91'].format('YYYY-MM-DD') : '',
+            'b92': typeof re['b92'] !== 'undefined' ? re['b92'].format('YYYY-MM-DD') : '',
+            'b101': typeof re['b101'] !== 'undefined' ? re['b101'].format('YYYY-MM-DD') : '',
+            'b102': typeof re['b102'] !== 'undefined' ? re['b102'].format('YYYY-MM-DD') : '',
+            'b111': typeof re['b111'] !== 'undefined' ? re['b111'].format('YYYY-MM-DD') : '',
+            'b112': typeof re['b112'] !== 'undefined' ? re['b112'].format('YYYY-MM-DD') : '',
+            'b121': typeof re['b121'] !== 'undefined' ? re['b121'].format('YYYY-MM-DD') : '',
+            'b122': typeof re['b122'] !== 'undefined' ? re['b122'].format('YYYY-MM-DD') : '',
+            'b131': typeof re['b131'] !== 'undefined' ? re['b131'].format('YYYY-MM-DD') : '',
+            'b132': typeof re['b132'] !== 'undefined' ? re['b132'].format('YYYY-MM-DD') : '',
+            'b141': typeof re['b141'] !== 'undefined' ? re['b141'].format('YYYY-MM-DD') : '',
+            'b142': typeof re['b142'] !== 'undefined' ? re['b142'].format('YYYY-MM-DD') : '',
+            'b151': typeof re['b151'] !== 'undefined' ? re['b151'].format('YYYY-MM-DD') : '',
+            'b152': typeof re['b152'] !== 'undefined' ? re['b152'].format('YYYY-MM-DD') : '',
+            'b161': typeof re['b161'] !== 'undefined' ? re['b161'].format('YYYY-MM-DD') : '',
+            'b162': typeof re['b162'] !== 'undefined' ? re['b162'].format('YYYY-MM-DD') : '',
+            'b171': typeof re['b171'] !== 'undefined' ? re['b171'].format('YYYY-MM-DD') : '',
+            'b172': typeof re['b172'] !== 'undefined' ? re['b172'].format('YYYY-MM-DD') : '',
+            'b181': typeof re['b181'] !== 'undefined' ? re['b181'].format('YYYY-MM-DD') : '',
+            'b182': typeof re['b182'] !== 'undefined' ? re['b182'].format('YYYY-MM-DD') : '',
+            'b191': typeof re['b191'] !== 'undefined' ? re['b191'].format('YYYY-MM-DD') : '',
+            'b192': typeof re['b192'] !== 'undefined' ? re['b192'].format('YYYY-MM-DD') : '',
+            'b203': typeof re['b203'] !== 'undefined' ? re['b203'].format('YYYY-MM-DD') : '',
+            'b202': typeof re['b202'] !== 'undefined' ? re['b202'].format('YYYY-MM-DD') : '',
+            'b213': typeof re['b213'] !== 'undefined' ? re['b213'].format('YYYY-MM-DD') : '',
+            'b212': typeof re['b212'] !== 'undefined' ? re['b212'].format('YYYY-MM-DD') : '',
+            'b223': typeof re['b223'] !== 'undefined' ? re['b223'].format('YYYY-MM-DD') : '',
+            'b222': typeof re['b222'] !== 'undefined' ? re['b222'].format('YYYY-MM-DD') : '',
+            'b231': typeof re['b231'] !== 'undefined' ? re['b231'].format('YYYY-MM-DD') : '',
+            'b232': typeof re['b232'] !== 'undefined' ? re['b232'].format('YYYY-MM-DD') : '',
+            'b241': typeof re['b241'] !== 'undefined' ? re['b241'].format('YYYY-MM-DD') : '',
+            'b242': typeof re['b242'] !== 'undefined' ? re['b242'].format('YYYY-MM-DD') : ''
+          }
+          var that = this
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.iconjxjz && this.iconjxjz.iconJxjzqId) {
+            re.iconJxjzqId = this.iconjxjz.iconJxjzqId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', this.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.maskId = res.data.list[1].basisMarkId
+                  that.defaultSelectedKeys = [that.maskId]
+                  that.executeStatus = res.data.list[1].executeStatus
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.iconjxjz) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.iconjxjz[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.iconjxjz[key])
+      } else if (type === 'array') {
+        return this.iconjxjz[key].split(',')
+      } else {
+        return this.iconjxjz[key] + ''
+      }
+    },
+    getFormData() {
+      this.spinning = true
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', that.maskId)
+      getBasisForm(params)
+        .then(res => {
+          this.spinning = false
+          if (res.data && res.data.iconjxjz)
+            that.iconjxjz = that.dealAnswers(res.data)
+        })
+        .catch(error => {
+          this.spinning = false
+          console.log(error)
+        })
+    },
+    dealAnswers(data) {
+      var that = this
+      var answer = data.iconjxjz
+      if (answer && !_.isEmpty(answer)) {
+        var splitArr = []
+        if (answer.a) {
+          splitArr = answer.a.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.control1 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.control2 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.control3 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.control4 = true
+          }
+        }
+        if (answer.a11) {
+          splitArr = answer.a11.split(',')
+          if (splitArr.indexOf('8') > -1) {
+            this.controla118 = true
+          }
+        }
+        if (answer.a21) {
+          splitArr = answer.a21.split(',')
+          if (splitArr.indexOf('2') > -1) {
+            this.controla212 = true
+          }
+        }
+        if (answer.b1 == 1) {
+          this.controlb1 = true
+        }
+        if (answer.b2 == 1) {
+          this.controlb2 = true
+        }
+        if (answer.t2 == 1) {
+          this.controlt2 = true
+        }
+        if (answer.b3) {
+          splitArr = answer.b3.split(',')
+          for (let i in splitArr) {
+            this['controlb3' + splitArr[i]] = true
+          }
+        }
+      }
+      return answer
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      re = {
+        ...re,
+        'a': typeof re['a'] !== 'undefined' ? re['a'].join(',') : '',
+        't1': typeof re['t1'] !== 'undefined' ? re['t1'].join(',') : '',
+        'a11': typeof re['a11'] !== 'undefined' ? re['a11'].join(',') : '',
+        'a21': typeof re['a21'] !== 'undefined' ? re['a21'].join(',') : '',
+        'a31': typeof re['a31'] !== 'undefined' ? re['a31'].join(',') : '',
+        'b3': typeof re['b3'] !== 'undefined' ? re['b3'].join(',') : '',
+        'a1': typeof re['a1'] !== 'undefined' ? re['a1'].format('YYYY-MM-DD') : '',
+        't': typeof re['t'] !== 'undefined' ? re['t'].format('YYYY-MM-DD') : '',
+        't4': typeof re['t4'] !== 'undefined' ? re['t4'].format('YYYY-MM-DD') : '',
+        'a2': typeof re['a2'] !== 'undefined' ? re['a2'].format('YYYY-MM-DD') : '',
+        'a3': typeof re['a3'] !== 'undefined' ? re['a3'].format('YYYY-MM-DD') : '',
+        'a4': typeof re['a4'] !== 'undefined' ? re['a4'].format('YYYY-MM-DD') : '',
+        'a5': typeof re['a5'] !== 'undefined' ? re['a5'].format('YYYY-MM-DD') : '',
+        'b11': typeof re['b11'] !== 'undefined' ? re['b11'].format('YYYY-MM-DD') : '',
+        'b21': typeof re['b21'] !== 'undefined' ? re['b21'].format('YYYY-MM-DD') : '',
+        'b22': typeof re['b22'] !== 'undefined' ? re['b22'].format('YYYY-MM-DD') : '',
+        'b31': typeof re['b31'] !== 'undefined' ? re['b31'].format('YYYY-MM-DD') : '',
+        'b32': typeof re['b32'] !== 'undefined' ? re['b32'].format('YYYY-MM-DD') : '',
+        'b41': typeof re['b41'] !== 'undefined' ? re['b41'].format('YYYY-MM-DD') : '',
+        'b42': typeof re['b42'] !== 'undefined' ? re['b42'].format('YYYY-MM-DD') : '',
+        'b51': typeof re['b51'] !== 'undefined' ? re['b51'].format('YYYY-MM-DD') : '',
+        'b52': typeof re['b52'] !== 'undefined' ? re['b52'].format('YYYY-MM-DD') : '',
+        'b61': typeof re['b61'] !== 'undefined' ? re['b61'].format('YYYY-MM-DD') : '',
+        'b62': typeof re['b62'] !== 'undefined' ? re['b62'].format('YYYY-MM-DD') : '',
+        'b71': typeof re['b71'] !== 'undefined' ? re['b71'].format('YYYY-MM-DD') : '',
+        'b72': typeof re['b72'] !== 'undefined' ? re['b72'].format('YYYY-MM-DD') : '',
+        'b81': typeof re['b81'] !== 'undefined' ? re['b81'].format('YYYY-MM-DD') : '',
+        'b82': typeof re['b82'] !== 'undefined' ? re['b82'].format('YYYY-MM-DD') : '',
+        'b91': typeof re['b91'] !== 'undefined' ? re['b91'].format('YYYY-MM-DD') : '',
+        'b92': typeof re['b92'] !== 'undefined' ? re['b92'].format('YYYY-MM-DD') : '',
+        'b101': typeof re['b101'] !== 'undefined' ? re['b101'].format('YYYY-MM-DD') : '',
+        'b102': typeof re['b102'] !== 'undefined' ? re['b102'].format('YYYY-MM-DD') : '',
+        'b111': typeof re['b111'] !== 'undefined' ? re['b111'].format('YYYY-MM-DD') : '',
+        'b112': typeof re['b112'] !== 'undefined' ? re['b112'].format('YYYY-MM-DD') : '',
+        'b121': typeof re['b121'] !== 'undefined' ? re['b121'].format('YYYY-MM-DD') : '',
+        'b122': typeof re['b122'] !== 'undefined' ? re['b122'].format('YYYY-MM-DD') : '',
+        'b131': typeof re['b131'] !== 'undefined' ? re['b131'].format('YYYY-MM-DD') : '',
+        'b132': typeof re['b132'] !== 'undefined' ? re['b132'].format('YYYY-MM-DD') : '',
+        'b141': typeof re['b141'] !== 'undefined' ? re['b141'].format('YYYY-MM-DD') : '',
+        'b142': typeof re['b142'] !== 'undefined' ? re['b142'].format('YYYY-MM-DD') : '',
+        'b151': typeof re['b151'] !== 'undefined' ? re['b151'].format('YYYY-MM-DD') : '',
+        'b152': typeof re['b152'] !== 'undefined' ? re['b152'].format('YYYY-MM-DD') : '',
+        'b161': typeof re['b161'] !== 'undefined' ? re['b161'].format('YYYY-MM-DD') : '',
+        'b162': typeof re['b162'] !== 'undefined' ? re['b162'].format('YYYY-MM-DD') : '',
+        'b171': typeof re['b171'] !== 'undefined' ? re['b171'].format('YYYY-MM-DD') : '',
+        'b172': typeof re['b172'] !== 'undefined' ? re['b172'].format('YYYY-MM-DD') : '',
+        'b181': typeof re['b181'] !== 'undefined' ? re['b181'].format('YYYY-MM-DD') : '',
+        'b182': typeof re['b182'] !== 'undefined' ? re['b182'].format('YYYY-MM-DD') : '',
+        'b191': typeof re['b191'] !== 'undefined' ? re['b191'].format('YYYY-MM-DD') : '',
+        'b192': typeof re['b192'] !== 'undefined' ? re['b192'].format('YYYY-MM-DD') : '',
+        'b203': typeof re['b203'] !== 'undefined' ? re['b203'].format('YYYY-MM-DD') : '',
+        'b202': typeof re['b202'] !== 'undefined' ? re['b202'].format('YYYY-MM-DD') : '',
+        'b213': typeof re['b213'] !== 'undefined' ? re['b213'].format('YYYY-MM-DD') : '',
+        'b212': typeof re['b212'] !== 'undefined' ? re['b212'].format('YYYY-MM-DD') : '',
+        'b223': typeof re['b223'] !== 'undefined' ? re['b223'].format('YYYY-MM-DD') : '',
+        'b222': typeof re['b222'] !== 'undefined' ? re['b222'].format('YYYY-MM-DD') : '',
+        'b231': typeof re['b231'] !== 'undefined' ? re['b231'].format('YYYY-MM-DD') : '',
+        'b232': typeof re['b232'] !== 'undefined' ? re['b232'].format('YYYY-MM-DD') : '',
+        'b241': typeof re['b241'] !== 'undefined' ? re['b241'].format('YYYY-MM-DD') : '',
+        'b242': typeof re['b242'] !== 'undefined' ? re['b242'].format('YYYY-MM-DD') : ''
+      }
+      var that = this
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.iconjxjz && this.iconjxjz.iconJxjzqId) {
+        re.iconJxjzqId = this.iconjxjz.iconJxjzqId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', this.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.maskId = res.data.list[1].basisMarkId
+              that.defaultSelectedKeys = [that.maskId]
+              that.executeStatus = res.data.list[1].executeStatus
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    withdraw() {
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.iconjxjz.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+.single-line {
+  height: 56px;
+  overflow: hidden;
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+
+      .treeSubTitle {
+        font-size: 14px;
+      }
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+    // padding-top: 52px;
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .label-overflow .ant-form-item-label {
+      line-height: 20px;
+      position: relative;
+      top: 12px;
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+.control-m-line.ant-checkbox-group {
+  top: 10px;
+  position: relative;
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/icon/task.vue b/src/views/icon/task.vue
new file mode 100644
index 0000000000..d1ef9d4aa8
--- /dev/null
+++ b/src/views/icon/task.vue
@@ -0,0 +1,1013 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!</p>
+              <div class="title">1.呼吸系统相关治疗</div>
+              <a-form-item label="(1) 随访期间有否长期氧疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b1', {...require1, initialValue: initValue('b1')}]">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(2) 随访期间有否无创辅助通气:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b2', {...require1, initialValue: initValue('b2')}]">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(3) 随访期间有否进行各类物理治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b3', {...require1, initialValue: initValue('b3')}]" @change="changeRadio($event, 'controlb3')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="治疗方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb3">
+                <a-checkbox-group v-decorator="['b31', {...selectRequired, initialValue: initValue('b31', 'array')}]">
+                  <a-checkbox value="1">手动拍击背部排痰</a-checkbox>
+                  <a-checkbox value="2">体位引流</a-checkbox>
+                  <a-checkbox value="3">规律锻炼身体</a-checkbox>
+                  <a-checkbox value="4">借助排痰仪器</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="(4) 随访期间有否进行各类呼吸疾病药物治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b4', {...require1, initialValue: initValue('b4')}]" @change="changeRadio($event, 'controlb4')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb4">
+                <a-form-item label="4-1 规律抗生素治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b41', {...selectRequired, initialValue: initValue('b41', 'array')}]">
+                    <a-checkbox value="0">无</a-checkbox>
+                    <a-checkbox value="1">口服</a-checkbox>
+                    <a-checkbox value="2">吸入/雾化</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="4-2 祛痰药物治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b42', {...selectRequired, initialValue: initValue('b42', 'array')}]">
+                    <a-checkbox value="0">无</a-checkbox>
+                    <a-checkbox value="1">口服</a-checkbox>
+                    <a-checkbox value="2">雾化</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="4-3 支气管扩张剂:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b43', {...selectRequired, initialValue: initValue('b43', 'array')}]" class="control-m-line">
+                    <a-checkbox value="0">无</a-checkbox>
+                    <a-checkbox value="1">长效抗胆碱能药物</a-checkbox>
+                    <a-checkbox value="2">长效β受体激动剂</a-checkbox>
+                    <a-checkbox value="3">长效抗胆碱能药物/长效β受体激动剂</a-checkbox>
+                    <a-checkbox value="4" :checked="controlb43" @change="changeSelect($event, 'controlb43')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他支气管扩张剂::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb43">
+                  <a-input style="width: 240px;" v-decorator="['b431', {...inputRequired, initialValue: initValue('b431')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="4-4 吸入激素:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b44', {...require1, initialValue: initValue('b44')}]">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="4-5 其他治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b45', { initialValue: initValue('b45')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(5) 随访期间有否进行各类免疫调节剂治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b5', {...require1, initialValue: initValue('b5')}]" @change="changeRadio($event, 'controlb5')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb5">
+                <a-form-item label="治疗方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b51', {...selectRequired, initialValue: initValue('b51', 'array')}]">
+                    <a-checkbox value="1">细菌溶解产物胶囊</a-checkbox>
+                    <a-checkbox value="2">匹多莫德</a-checkbox>
+                    <a-checkbox value="3">胸腺肽</a-checkbox>
+                    <a-checkbox value="4">脾氨肽</a-checkbox>
+                    <a-checkbox value="5" :checked="controlb51" @change="changeSelect($event, 'controlb51')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他治疗::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb5 && controlb51">
+                  <a-input style="width: 240px;" v-decorator="['b52', {...inputRequired, initialValue: initValue('b52')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(6) 胸部CT检查:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['d', {...require1, initialValue: initValue('d')}]" @change="changeRadio($event, 'controld')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controld">
+                <a-form-item label="6-1 CT检查日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['d1', {...dateRequire, initialValue: initValue('d1', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="支扩位于CT图像上:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['d2', {...selectRequired, initialValue: initValue('d2', 'array')}]">
+                    <a-checkbox value="1" @change="changeSelect($event, 'controld3')">右上叶</a-checkbox>
+                    <a-checkbox value="2" @change="changeSelect($event, 'controld4')">左上叶</a-checkbox>
+                    <a-checkbox value="3" @change="changeSelect($event, 'controld5')">右中叶</a-checkbox>
+                    <a-checkbox value="4" @change="changeSelect($event, 'controld6')">左舌叶</a-checkbox>
+                    <a-checkbox value="5" @change="changeSelect($event, 'controld7')">右下叶</a-checkbox>
+                    <a-checkbox value="6" @change="changeSelect($event, 'controld8')">左下叶</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="右上叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controld3">
+                  <a-radio-group v-decorator="['d3', {...selectRequired, initialValue: initValue('d3')}]" @change="computeReiff">
+                    <a-radio value="1">柱状</a-radio>
+                    <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                    <a-radio value="3">囊状</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="左上叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controld4">
+                  <a-radio-group v-decorator="['d4', {...selectRequired, initialValue: initValue('d4')}]" @change="computeReiff">
+                    <a-radio value="1">柱状</a-radio>
+                    <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                    <a-radio value="3">囊状</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="右中叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controld5">
+                  <a-radio-group v-decorator="['d5', {...selectRequired, initialValue: initValue('d5')}]" @change="computeReiff">
+                    <a-radio value="1">柱状</a-radio>
+                    <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                    <a-radio value="3">囊状</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="左舌叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controld6">
+                  <a-radio-group v-decorator="['d6', {...selectRequired, initialValue: initValue('d6')}]" @change="computeReiff">
+                    <a-radio value="1">柱状</a-radio>
+                    <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                    <a-radio value="3">囊状</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="右下叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controld7">
+                  <a-radio-group v-decorator="['d7', {...selectRequired, initialValue: initValue('d7')}]" @change="computeReiff">
+                    <a-radio value="1">柱状</a-radio>
+                    <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                    <a-radio value="3">囊状</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="左下叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controld8">
+                  <a-radio-group v-decorator="['d8', {...selectRequired, initialValue: initValue('d8')}]" @change="computeReiff">
+                    <a-radio value="1">柱状</a-radio>
+                    <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                    <a-radio value="3">囊状</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="影像Reiff评分:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['d9', {initialValue: initValue('d9')}]" :readOnly="true" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(7) 各类肺功能测试:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['e', {...require1, initialValue: initValue('e')}]" @change="changeRadio($event, 'controle')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controle">
+                <a-form-item label="7-1 检查日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['e1', {...dateRequire, initialValue: initValue('e1', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="7-2 FVC:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input addonAfter="L" style="width: 240px;" v-decorator="['e2', {...inputRequired, initialValue: initValue('e2')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="7-3 FVC pred:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input addonAfter="%" style="width: 240px;" v-decorator="['e3', {...inputRequired, initialValue: initValue('e3')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="7-4 FEV1:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input addonAfter="L" style="width: 240px;" v-decorator="['e4', {...inputRequired, initialValue: initValue('e4')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="7-5 FEV1 pred:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input addonAfter="L" style="width: 240px;" v-decorator="['e5', {...inputRequired, initialValue: initValue('e5')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="7-6 FEV1/FVC:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input addonAfter="L" style="width: 240px;" v-decorator="['e6', {...inputRequired, initialValue: initValue('e6')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="7-7 DLCO SB:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input addonAfter="ml/min/mmHg" style="width: 240px;" v-decorator="['e7', {...inputRequired, initialValue: initValue('e7')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="7-8 DLCO/VA:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input addonAfter="ml/min/mmHg" style="width: 240px;" v-decorator="['e8', {...inputRequired, initialValue: initValue('e8')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="7-9 DLCO SB:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input addonAfter="mmol/min/kPa" style="width: 240px;" v-decorator="['e9', {...inputRequired, initialValue: initValue('e9')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="7-10 DLCO/VA:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input addonAfter="mmol/min/kPa/L" style="width: 240px;" v-decorator="['e10', {...inputRequired, initialValue: initValue('e10')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, recoverSubmit, computeScore } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+export default {
+  name: 'iconTask',
+  components: {
+    STree,
+    MyIcon
+  },
+  data() {
+    return {
+      markName: 'iconcgsf',
+      title: 'ICON常规随访',
+      openKeys: [],
+      defaultSelectedKeys: [4],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: '100%',
+        "padding-right": "0px",
+        "border-right": "1px solid #ddd"
+      },
+      baselineFormStyle: {
+        // height: '444px',
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 7 },
+        md: { span: 7 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 17 },
+        md: { span: 17 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 4, offset: 7 }
+      },
+      wrapperOffset: {
+        md: { span: 13 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: undefined,
+      patientBasisId: this.$route.params.id,
+      controlb3: false,
+      controlb4: false,
+      controlb43: false,
+      controlb5: false,
+      controlb51: false,
+      spinning: false,
+      executeStatus: false,
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined,
+      iconcgsf: undefined,
+      controld3: false,
+      controld4: false,
+      controld5: false,
+      controld6: false,
+      controld7: false,
+      controld8: false,
+      controld: false,
+      controle: false
+    }
+  },
+  created() {
+    var that = this
+    this.defaultSelectedKeys = [4]
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.maskId = res.data.list[0].basisMarkId
+        that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+        that.getFormData()
+      })
+
+  },
+  activated() {
+    // this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeSelect(e, t) {
+      var arr = ['controld3', 'controld4', 'controld5', 'controld6', 'controld7', 'controld8']
+      if (arr.indexOf(t) > -1 && !e.target.checked) {
+        this.computeReiff()
+      }
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      if (e.key >= 31 && e.key <= 36) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      } else if (e.key < 63) {
+        this.$router.replace('/list/basis/' + this.patientBasisId + '/' + e.key)
+      }
+      return false;
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          var that = this
+          re = {
+            ...re,
+            'b31': typeof re['b31'] !== 'undefined' ? re['b31'].join(',') : '',
+            'b41': typeof re['b41'] !== 'undefined' ? re['b41'].join(',') : '',
+            'b42': typeof re['b42'] !== 'undefined' ? re['b42'].join(',') : '',
+            'b43': typeof re['b43'] !== 'undefined' ? re['b43'].join(',') : '',
+            'b51': typeof re['b51'] !== 'undefined' ? re['b51'].join(',') : '',
+            'd2': typeof re['d2'] !== 'undefined' ? re['d2'].join(',') : '',
+            'd1': typeof re['d1'] !== 'undefined' ? re['d1'].format('YYYY-MM-DD') : '',
+            'e1': typeof re['e1'] !== 'undefined' ? re['e1'].format('YYYY-MM-DD') : ''
+          }
+          var that = this
+          console.log(re)
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.iconcgsf && this.iconcgsf.iconCgfsId) {
+            re.iconCgfsId = this.iconcgsf.iconCgfsId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          that.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', this.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+          return false
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.iconcgsf) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.iconcgsf[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.iconcgsf[key])
+      } else if (type === 'array') {
+        return this.iconcgsf[key].split(',')
+      } else {
+        return this.iconcgsf[key] + ''
+      }
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    computeReiff() {
+      var that = this
+      this.$nextTick(() => {
+        var params = new URLSearchParams()
+        params.append('scoreType', 'iconReiff')
+        params.append('iconcgfsStr', JSON.stringify(that.form.getFieldsValue()))
+        computeScore(params)
+          .then(res => {
+            console.log(res.data.d9)
+            that.form.setFieldsValue({
+              d9: res.data.d9
+            })
+          })
+          .catch(error => {
+            console.log(error)
+          })
+      })
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        var splitArr = []
+        if (answer.b3 === 1) {
+          this.controlb3 = true
+        }
+        if (answer.b4 === 1) {
+          this.controlb4 = true
+        }
+        if (answer.b5 === 1) {
+          this.controlb5 = true
+        }
+        if (answer.b43) {
+          splitArr = answer.b43.split(',')
+          if (splitArr.indexOf('4') > -1) {
+            this.controlb43 = true
+          }
+        }
+        if (answer.b51) {
+          splitArr = answer.b51.split(',')
+          if (splitArr.indexOf('5') > -1) {
+            this.controlb51 = true
+          }
+        }
+        if (answer.d === 1) {
+          this.controld = true
+        }
+        if (answer.e === 1) {
+          this.controle = true
+        }
+        if (answer.d2) {
+          splitArr = answer.d2.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controld3 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controld4 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.controld5 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.controld6 = true
+          }
+          if (splitArr.indexOf('5') > -1) {
+            this.controld7 = true
+          }
+          if (splitArr.indexOf('6') > -1) {
+            this.controld8 = true
+          }
+        }
+      }
+      return answer
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      re = {
+        ...re,
+        'b31': typeof re['b31'] !== 'undefined' ? re['b31'].join(',') : '',
+        'b41': typeof re['b41'] !== 'undefined' ? re['b41'].join(',') : '',
+        'b42': typeof re['b42'] !== 'undefined' ? re['b42'].join(',') : '',
+        'b43': typeof re['b43'] !== 'undefined' ? re['b43'].join(',') : '',
+        'b51': typeof re['b51'] !== 'undefined' ? re['b51'].join(',') : '',
+        'd2': typeof re['d2'] !== 'undefined' ? re['d2'].join(',') : '',
+        'd1': typeof re['d1'] !== 'undefined' ? re['d1'].format('YYYY-MM-DD') : '',
+        'e1': typeof re['e1'] !== 'undefined' ? re['e1'].format('YYYY-MM-DD') : ''
+      }
+      var that = this
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.iconcgsf && this.iconcgsf.iconCgfsId) {
+        re.iconCgfsId = this.iconcgsf.iconCgfsId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      that.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    getFormData() {
+      this.spinning = true
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          if (res.data && res.data.iconcgsf) {
+            that.iconcgsf = that.dealAnswers(res.data.iconcgsf)
+          } else {
+            that.form.resetFields()
+          }
+          this.spinning = false
+        })
+        .catch(error => {
+          this.spinning = false
+          console.log(error)
+        })
+    },
+    withdraw() {
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.iconcgsf.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+
+      .treeSubTitle {
+        font-size: 14px;
+      }
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+    margin-top: 42px;
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 20px 20px 60px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+@media screen and (max-width: 1366px) {
+  .control-m-line.ant-checkbox-group {
+    top: 10px;
+    position: relative;
+  }
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/list/TableList.vue b/src/views/list/TableList.vue
index 0e48153066..8278a4d530 100644
--- a/src/views/list/TableList.vue
+++ b/src/views/list/TableList.vue
@@ -1,280 +1,914 @@
-<template>
-  <a-card :bordered="false">
-    <div class="table-page-search-wrapper">
-      <a-form layout="inline">
-        <a-row :gutter="48">
-          <a-col :md="8" :sm="24">
-            <a-form-item label="规则编号">
-              <a-input v-model="queryParam.id" placeholder=""/>
-            </a-form-item>
-          </a-col>
-          <a-col :md="8" :sm="24">
-            <a-form-item label="使用状态">
-              <a-select v-model="queryParam.status" placeholder="请选择" default-value="0">
-                <a-select-option value="0">全部</a-select-option>
-                <a-select-option value="1">关闭</a-select-option>
-                <a-select-option value="2">运行中</a-select-option>
-              </a-select>
-            </a-form-item>
-          </a-col>
-          <template v-if="advanced">
-            <a-col :md="8" :sm="24">
-              <a-form-item label="调用次数">
-                <a-input-number v-model="queryParam.callNo" style="width: 100%"/>
-              </a-form-item>
-            </a-col>
-            <a-col :md="8" :sm="24">
-              <a-form-item label="更新日期">
-                <a-date-picker v-model="queryParam.date" style="width: 100%" placeholder="请输入更新日期"/>
-              </a-form-item>
-            </a-col>
-            <a-col :md="8" :sm="24">
-              <a-form-item label="使用状态">
-                <a-select v-model="queryParam.useStatus" placeholder="请选择" default-value="0">
-                  <a-select-option value="0">全部</a-select-option>
-                  <a-select-option value="1">关闭</a-select-option>
-                  <a-select-option value="2">运行中</a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-            <a-col :md="8" :sm="24">
-              <a-form-item label="使用状态">
-                <a-select placeholder="请选择" default-value="0">
-                  <a-select-option value="0">全部</a-select-option>
-                  <a-select-option value="1">关闭</a-select-option>
-                  <a-select-option value="2">运行中</a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-          </template>
-          <a-col :md="!advanced && 8 || 24" :sm="24">
-            <span class="table-page-search-submitButtons" :style="advanced && { float: 'right', overflow: 'hidden' } || {} ">
-              <a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
-              <a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button>
-              <a @click="toggleAdvanced" style="margin-left: 8px">
-                {{ advanced ? '收起' : '展开' }}
-                <a-icon :type="advanced ? 'up' : 'down'"/>
-              </a>
-            </span>
-          </a-col>
-        </a-row>
-      </a-form>
-    </div>
-
-    <div class="table-operator">
-      <a-button type="primary" icon="plus" @click="$refs.createModal.add()">新建</a-button>
-      <a-button type="dashed" @click="tableOption">{{ optionAlertShow && '关闭' || '开启' }} alert</a-button>
-      <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0">
-        <a-menu slot="overlay">
-          <a-menu-item key="1"><a-icon type="delete" />删除</a-menu-item>
-          <!-- lock | unlock -->
-          <a-menu-item key="2"><a-icon type="lock" />锁定</a-menu-item>
-        </a-menu>
-        <a-button style="margin-left: 8px">
-          批量操作 <a-icon type="down" />
-        </a-button>
-      </a-dropdown>
-    </div>
-
-    <s-table
-      ref="table"
-      size="default"
-      rowKey="key"
-      :columns="columns"
-      :data="loadData"
-      :alert="options.alert"
-      :rowSelection="options.rowSelection"
-      showPagination="auto"
-    >
-      <span slot="serial" slot-scope="text, record, index">
-        {{ index + 1 }}
-      </span>
-      <span slot="status" slot-scope="text">
-        <a-badge :status="text | statusTypeFilter" :text="text | statusFilter" />
-      </span>
-      <span slot="description" slot-scope="text">
-        <ellipsis :length="4" tooltip>{{ text }}</ellipsis>
-      </span>
-
-      <span slot="action" slot-scope="text, record">
-        <template>
-          <a @click="handleEdit(record)">配置</a>
-          <a-divider type="vertical" />
-          <a @click="handleSub(record)">订阅报警</a>
-        </template>
-      </span>
-    </s-table>
-    <create-form ref="createModal" @ok="handleOk" />
-    <step-by-step-modal ref="modal" @ok="handleOk"/>
-  </a-card>
-</template>
-
-<script>
-import moment from 'moment'
-import { STable, Ellipsis } from '@/components'
-import StepByStepModal from './modules/StepByStepModal'
-import CreateForm from './modules/CreateForm'
-import { getRoleList, getServiceList } from '@/api/manage'
-
-const statusMap = {
-  0: {
-    status: 'default',
-    text: '关闭'
-  },
-  1: {
-    status: 'processing',
-    text: '运行中'
-  },
-  2: {
-    status: 'success',
-    text: '已上线'
-  },
-  3: {
-    status: 'error',
-    text: '异常'
-  }
-}
-
-export default {
-  name: 'TableList',
-  components: {
-    STable,
-    Ellipsis,
-    CreateForm,
-    StepByStepModal
-  },
-  data () {
-    return {
-      mdl: {},
-      // 高级搜索 展开/关闭
-      advanced: false,
-      // 查询参数
-      queryParam: {},
-      // 表头
-      columns: [
-        {
-          title: '#',
-          scopedSlots: { customRender: 'serial' }
-        },
-        {
-          title: '规则编号',
-          dataIndex: 'no'
-        },
-        {
-          title: '描述',
-          dataIndex: 'description',
-          scopedSlots: { customRender: 'description' }
-        },
-        {
-          title: '服务调用次数',
-          dataIndex: 'callNo',
-          sorter: true,
-          needTotal: true,
-          customRender: (text) => text + ' 次'
-        },
-        {
-          title: '状态',
-          dataIndex: 'status',
-          scopedSlots: { customRender: 'status' }
-        },
-        {
-          title: '更新时间',
-          dataIndex: 'updatedAt',
-          sorter: true
-        },
-        {
-          title: '操作',
-          dataIndex: 'action',
-          width: '150px',
-          scopedSlots: { customRender: 'action' }
-        }
-      ],
-      // 加载数据方法 必须为 Promise 对象
-      loadData: parameter => {
-        console.log('loadData.parameter', parameter)
-        return getServiceList(Object.assign(parameter, this.queryParam))
-          .then(res => {
-            return res.result
-          })
-      },
-      selectedRowKeys: [],
-      selectedRows: [],
-
-      // custom table alert & rowSelection
-      options: {
-        alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
-        rowSelection: {
-          selectedRowKeys: this.selectedRowKeys,
-          onChange: this.onSelectChange
-        }
-      },
-      optionAlertShow: false
-    }
-  },
-  filters: {
-    statusFilter (type) {
-      return statusMap[type].text
-    },
-    statusTypeFilter (type) {
-      return statusMap[type].status
-    }
-  },
-  created () {
-    this.tableOption()
-    getRoleList({ t: new Date() })
-  },
-  methods: {
-    tableOption () {
-      if (!this.optionAlertShow) {
-        this.options = {
-          alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
-          rowSelection: {
-            selectedRowKeys: this.selectedRowKeys,
-            onChange: this.onSelectChange,
-            getCheckboxProps: record => ({
-              props: {
-                disabled: record.no === 'No 2', // Column configuration not to be checked
-                name: record.no
-              }
-            })
-          }
-        }
-        this.optionAlertShow = true
-      } else {
-        this.options = {
-          alert: false,
-          rowSelection: null
-        }
-        this.optionAlertShow = false
-      }
-    },
-
-    handleEdit (record) {
-      console.log(record)
-      this.$refs.modal.edit(record)
-    },
-    handleSub (record) {
-      if (record.status !== 0) {
-        this.$message.info(`${record.no} 订阅成功`)
-      } else {
-        this.$message.error(`${record.no} 订阅失败,规则已关闭`)
-      }
-    },
-    handleOk () {
-      this.$refs.table.refresh()
-    },
-    onSelectChange (selectedRowKeys, selectedRows) {
-      this.selectedRowKeys = selectedRowKeys
-      this.selectedRows = selectedRows
-    },
-    toggleAdvanced () {
-      this.advanced = !this.advanced
-    },
-    resetSearchForm () {
-      this.queryParam = {
-        date: moment(new Date())
-      }
-    }
-  }
-}
-</script>
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <a-spin :spinning="confirmLoading">
+      <div class="table-page-search-wrapper">
+        <a-form :form="form" layout="inline">
+          <a-row :gutter="16">
+            <a-col :md="5" :sm="24">
+              <a-form-item>
+                <a-input v-model.trim="queryParam.keyWord" placeholder="搜索患者姓名、身份证号、入组编号" />
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item>
+                <a-button type="primary" @click="refreshTable">查询</a-button>
+                <a @click="toggleAdvanced" style="margin-left: 8px" class="toggleAdvanced">
+                  {{ advanced ? '更多筛选' : '更多筛选' }}
+                  <a-icon :type="advanced ? 'up' : 'down'" />
+                </a>
+              </a-form-item>
+            </a-col>
+            <a-col v-if="advanced" class="tableSearch" :md="8">
+              <div>
+                <a-tabs defaultActiveKey="1">
+                  <a-tab-pane tab="常用检索" key="1">
+                    <div class="commonRetrieval">
+                      <p @click="tableSearch(3)">全部病例</p>
+                      <p @click="tableSearch(1)">本月新增病例</p>
+                      <p @click="tableSearch(2)">本年新增病例</p>
+                    </div>
+                  </a-tab-pane>
+                  <a-tab-pane tab="自定义检索" key="2" forceRender>
+                    <a-card :bordered="false">
+                      <a-form>
+                        <a-row>
+                          <a-col :md="12">
+                            <a-form-item label="是否ICON">
+                              <a-radio-group v-model="queryParam.isIcon">
+                                <a-radio value="-1">否</a-radio>
+                                <a-radio value="1">是</a-radio>
+                              </a-radio-group>
+                            </a-form-item>
+                          </a-col>
+                          <a-col :md="12">
+                            <a-form-item label="是否CF筛查" class="wider-label">
+                              <a-radio-group v-model="queryParam.c1">
+                                <a-radio value="-1">否</a-radio>
+                                <a-radio value="1">是</a-radio>
+                              </a-radio-group>
+                            </a-form-item>
+                          </a-col>
+                        </a-row>
+                        <a-form-item label="入组编号">
+                          <a-input v-model.trim="queryParam.fileCode" style="width: 100%" />
+                        </a-form-item>
+                        <a-form-item label="姓名">
+                          <a-input v-model.trim="queryParam.patientName" style="width: 100%" />
+                        </a-form-item>
+                        <a-form-item label="身份证号">
+                          <a-input v-model.trim="queryParam.card" style="width: 100%" />
+                        </a-form-item>
+                        <a-form-item label="创建日期" style="margin-bottom:0;">
+                          <a-range-picker @change="changeTime" style="width: 100%" :value="dateArr" />
+                        </a-form-item>
+                        <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                          <a-button type="primary" @click="clearForm()">清空</a-button>
+                          <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                        </a-form-item>
+                      </a-form>
+                    </a-card>
+                  </a-tab-pane>
+                </a-tabs>
+              </div>
+            </a-col>
+            <a-col :md="2" :sm="24" :offset="11">
+              <a-form-item>
+                <a-button type="primary" @click="handleExport" v-if="canExport">导出数据</a-button>
+              </a-form-item>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+      <s-table ref="table" size="small" :scroll="{ x: 1600 }" rowKey="tId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+        <span slot="name" slot-scope="text, record" @click="showUser(record)">
+          <p class="userName">{{modifyName(text)}}</p>
+        </span>
+        <span slot="unSubmitquestion" slot-scope="text, record">
+          <p>{{ record.unSubmitquestion }}</p>
+        </span>
+        <span slot="submitStatus" slot-scope="text">
+          <a-badge :status="text | visitTypeFilter" :text="text | visitFilter" /></span>
+        <span slot="questionStatus" slot-scope="text">
+          <a-badge :status="text | visitTypeFilter" :text="text | visitFilter" /></span>
+        <span slot="basisList" slot-scope="basisList" v-if="basisList.length">
+          <div class="progressTag">
+            <router-link :to="{path:'/list/basis/' + basisList[0].patientBasisId}">
+              <p class="progressTagTitle">{{ basisList[0].typeName }}</p>
+              <div style="margin-right: 15px;display: inline-block;width: 130px;">
+                <div class="progressTagContent">
+                  <a-progress class="progressline" :strokeColor="basisList[0].progress == 100 ? '#4BC5AC' : '#00A0E9'" :showInfo="false" :percent="parseInt(basisList[0].progress)" size="small" />
+                </div>
+                <a-icon v-if="basisList[0].executeStatus != 3" type="clock-circle" theme="filled" style="color:#00A0E9" />
+                <!-- <span class="ant-progress-span" v-if="basisList[0].executeStatus == 2">{{basisList[0].progress}}%</span> -->
+                <a-icon v-else-if="basisList[0].executeStatus == 3" type="check-circle" theme="filled" style="color:#4BC5AC" />
+              </div>
+            </router-link>
+            <Visit :patientId="basisList[0].patientId"></Visit>
+          </div>
+        </span>
+        <span slot="description" slot-scope="text">
+          <ellipsis :length="8" tooltip>{{ text }}</ellipsis>
+        </span>
+        <span slot="action" slot-scope="text, record" style="text-align: center;">
+          <template>
+            <a @click="handleEdit(record)">编辑</a>
+            <a-divider type="vertical" />
+            <a @click="handleSubmit(record)" v-if="record.basisList[0].executeStatus == 3 && record.basisList[0].submitStatus == 0">提交</a>
+            <span v-else style="color:rgba(0, 0, 0, 0.25)">提交</span>
+            <a-divider type="vertical" />
+            <a @click="handleOut(record)" :disabled="record.visit != 1">退组</a>
+          </template>
+        </span>
+      </s-table>
+    </a-spin>
+    <create-form ref="createModal" @ok="handleOk" />
+    <user-detail ref="detailModal" />
+    <a-modal :visible="visible" title="退组" @ok="outSubmit" :confirmLoading="confirmLoading" :centered="centered" :destroyOnClose="destroyOnClose" @cancel="handleClose">
+      <a-form :form="form">
+        <input type="hidden" v-model="patientId">
+        <a-form-item label="退组原因" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-radio-group v-decorator="['status', requiredRule]">
+            <a-radio value="1">访视结束</a-radio>
+            <a-radio value="2">失访</a-radio>
+            <a-radio value="3">死亡</a-radio>
+          </a-radio-group>
+        </a-form-item>
+      </a-form>
+    </a-modal>
+    <a-modal title="基线提交" :width="800" :bodyStyle="detailStyle" :maskClosable="maskClosable" :centered="centered" :destroyOnClose="destroyOnClose" :visible="detailVisible" :footer="null" @cancel="handleCancel">
+      <div class="userDetail">
+        <div class="userDetailTop">
+          <img src="../../assets/woman.png" alt="" v-if="scoreData.sex == 0" />
+          <img src="../../assets/man.png" alt="" v-else />
+          <div class="name">{{scoreData.patientName}}</div>
+          <div class="age">
+            <span class="userDetailAge" :class="scoreData.sex == 0 ? 'womenBg' : ''">
+              <a-icon :type="scoreData.sex == 1 ? 'man':'woman'" />
+              {{scoreData.age}}岁
+            </span>
+          </div>
+          <div class="tl">{{scoreData.isTl}}</div>
+        </div>
+      </div>
+      <div class="scores">
+        <p class="title">支扩评分</p>
+        <a-row :gutter="10">
+          <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix heighter">
+              <div class="name">BSI评分</div>
+              <div class="score">{{scoreData.BSI}}分</div>
+              <mini-area />
+            </div>
+          </a-col>
+          <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix heighter">
+              <div class="name">FACED评分</div>
+              <div class="score">{{scoreData.FACED}}分</div>
+              <mini-area />
+            </div>
+          </a-col>
+          <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix heighter">
+              <div class="name">BACI评分</div>
+              <div class="score">{{scoreData.BACI}}分</div>
+              <mini-area />
+            </div>
+          </a-col>
+          <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix heighter">
+              <div class="name">Reffi评分</div>
+              <div class="score">{{scoreData.Reiff}}分</div>
+              <mini-area />
+            </div>
+          </a-col>
+        </a-row>
+      </div>
+      <div class="scores">
+        <p class="title">问卷评分</p>
+        <a-row :gutter="10">
+          <a-col :sm="24" :md="12" :xl="8" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix">
+              <div class="name">BHQ评分</div>
+              <div class="score" style="color: mediumpurple">{{scoreData.BHQ.score}}分</div>
+              <mini-progress color="mediumpurple" :target="scoreData.BHQ.score" :percentage="scoreData.BHQ.score" height="8px" />
+            </div>
+          </a-col>
+          <a-col :sm="24" :md="12" :xl="8" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix">
+              <div class="name">MMRC评分</div>
+              <div class="score" style="color: #fd94dc">{{scoreData.MMRC.score}}分</div>
+              <mini-progress color="#fd94dc" :target="scoreData.MMRC.score / 4 * 100" :percentage="scoreData.MMRC.score / 4 * 100" height="8px" />
+            </div>
+          </a-col>
+          <a-col :sm="24" :md="12" :xl="8" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix">
+              <div class="name">HADS评分</div>
+              <div class="score" style="color: orange">{{scoreData.HAD.score}}分</div>
+              <mini-progress color="orange" :target="scoreData.HAD.score / 42 * 100" :percentage="scoreData.HAD.score / 42 * 100" height="8px" />
+            </div>
+          </a-col>
+        </a-row>
+        <a-row>
+          <a-col :sm="24" :md="24" :xl="24" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix">
+              <div class="name">LCQ评分</div>
+              <div class="score" style="color: lightseagreen">总{{scoreData.LCQ.score}}分</div>
+              <a-row :gutter="10">
+                <a-col :sm="24" :md="12" :xl="8" :style="{ marginBottom: '10px' }">
+                  <label>生理</label>
+                  <mini-progress color="lightseagreen" :target="scoreData.LCQ.score1 / 56 * 100" :percentage="scoreData.LCQ.score1 / 56 * 100" height="8px" />
+                  <label>{{scoreData.LCQ.score1}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="8" :style="{ marginBottom: '10px' }">
+                  <label>心理</label>
+                  <mini-progress color="lightseagreen" :target="scoreData.LCQ.score2 / 49 * 100" :percentage="scoreData.LCQ.score2 / 49 * 100" height="8px" />
+                  <label>{{scoreData.LCQ.score2}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="8" :style="{ marginBottom: '10px' }">
+                  <label>社会</label>
+                  <mini-progress color="lightseagreen" :target="scoreData.LCQ.score3 / 28 * 100" :percentage="scoreData.LCQ.score3/ 28 * 100" height="8px" />
+                  <label>{{scoreData.LCQ.score3}}分</label>
+                </a-col>
+              </a-row>
+            </div>
+          </a-col>
+        </a-row>
+        <a-row>
+          <a-col :sm="24" :md="24" :xl="24" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix">
+              <div class="name">QoL-B评分</div>
+              <a-row :gutter="10">
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>身体功能性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score1" :percentage="scoreData.QOLB.score1" height="8px" />
+                  <label>{{scoreData.QOLB.score1}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>角色功能性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score2" :percentage="scoreData.QOLB.score2" height="8px" />
+                  <label>{{scoreData.QOLB.score2}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>活力性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score3" :percentage="scoreData.QOLB.score3" height="8px" />
+                  <label>{{scoreData.QOLB.score3}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>情绪功能性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score4" :percentage="scoreData.QOLB.score4" height="8px" />
+                  <label>{{scoreData.QOLB.score4}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>社会功能性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score5" :percentage="scoreData.QOLB.score5" height="8px" />
+                  <label>{{scoreData.QOLB.score5}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>医疗负担性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score6" :percentage="scoreData.QOLB.score6" height="8px" />
+                  <label>{{scoreData.QOLB.score6}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>健康感觉性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score7" :percentage="scoreData.QOLB.score7" height="8px" />
+                  <label>{{scoreData.QOLB.score7}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>呼吸症状性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score8" :percentage="scoreData.QOLB.score8" height="8px" />
+                  <label>{{scoreData.QOLB.score8}}分</label>
+                </a-col>
+              </a-row>
+            </div>
+          </a-col>
+        </a-row>
+      </div>
+    </a-modal>
+    <contact-form ref="contactModal" @ok="handleOk" />
+  </a-card>
+</template>
+<script>
+import moment from 'moment';
+import {
+  STable,
+  Ellipsis
+} from '@/components'
+import StepByStepModal from './modules/StepByStepModal'
+import CreateForm from './modules/CreateForm'
+import UserDetail from './modules/UserDetail'
+import Visit from './modules/Visit'
+import { getPatientList } from '@/api/patient'
+import { ChartCard, MiniProgress, MiniArea } from '@/components'
+import { MyIcon } from '@/components/_util/util'
+import ContactForm from '@/views/account/ContactForm'
+import {
+  addVasit,
+  outGroup,
+  getJxDataList,
+  submitCheck,
+  exportAllData
+} from '@/api/basis'
+import {
+  mapGetters,
+  mapActions
+} from 'vuex'
+import $ from 'jquery'
+import {
+  ACCESS_TOKEN
+} from '@/store/mutation-types'
+
+const visitMap = {
+  '已提交': {
+    status: 'success',
+    text: '已提交'
+  },
+  '未提交': {
+    status: 'error',
+    text: '未提交'
+  }
+};
+
+var columns = [{
+  title: '入组编号',
+  width: 110,
+  dataIndex: 'fileCode'
+}, {
+  title: '患者姓名',
+  dataIndex: 'name',
+  width: 80,
+  scopedSlots: {
+    customRender: 'name'
+  }
+},{
+  title: '是否ICON',
+  dataIndex: 'research',
+  width: 80,
+},{
+  title: '是否CF筛查',
+  dataIndex: 'c1',
+  width: 80,
+}, {
+  title: '创建日期',
+  dataIndex: 'createDate',
+  width: 90,
+  customRender: createDate => moment(createDate).format('YYYY-MM-DD')
+}, {
+  title: '提交状态',
+  dataIndex: 'submitStatus',
+  width: 80,
+  scopedSlots: {
+    customRender: 'submitStatus'
+  }
+}, {
+  title: '访视进度',
+  dataIndex: 'basisList',
+  width: 160,
+  scopedSlots: {
+    customRender: 'basisList'
+  }
+}, {
+  title: '分支中心',
+  width: 200,
+  dataIndex: 'centerName'
+}, {
+  title: '问卷状态',
+  width: 80,
+  dataIndex: 'questionStatus',
+  scopedSlots: {
+    customRender: 'questionStatus'
+  }
+}, {
+  title: '未提交问卷',
+  width: 200,
+  dataIndex: ' unSubmitquestion',
+  scopedSlots: {
+    customRender: 'unSubmitquestion'
+  }
+}, {
+  title: '操作',
+  dataIndex: 'action',
+  width: 120,
+  className: 'operation',
+  scopedSlots: {
+    customRender: 'action'
+  }
+}]
+
+var groupColumns = [{
+  title: '入组编号',
+  width: 110,
+  dataIndex: 'fileCode'
+}, {
+  title: '创建日期',
+  dataIndex: 'createDate',
+  width: 90,
+  customRender: createDate => moment(createDate).format('YYYY-MM-DD')
+}, {
+  title: '提交状态',
+  dataIndex: 'submitStatus',
+  width: 80,
+  scopedSlots: {
+    customRender: 'submitStatus'
+  }
+}, {
+  title: '访视进度',
+  dataIndex: 'basisList',
+  width: 160,
+  scopedSlots: {
+    customRender: 'basisList'
+  }
+}, {
+  title: '分支中心',
+  dataIndex: 'centerName',
+  width: 200
+}, {
+  title: '问卷状态',
+  width: 80,
+  dataIndex: 'questionStatus',
+  scopedSlots: {
+    customRender: 'questionStatus'
+  }
+}, {
+  title: '未提交问卷',
+  width: 200,
+  dataIndex: ' unSubmitquestion',
+  scopedSlots: {
+    customRender: 'unSubmitquestion'
+  }
+}]
+
+export default {
+  name: 'TableList',
+  components: {
+    STable,
+    Ellipsis,
+    CreateForm,
+    StepByStepModal,
+    UserDetail,
+    Visit,
+    MyIcon,
+    ChartCard,
+    MiniProgress,
+    MiniArea,
+    ContactForm
+  },
+  data() {
+    return {
+      confirmLoading: false,
+      patientBasisId: '',
+      dateArr: [],
+      mdl: {},
+      baseUrl: process.env.VUE_APP_API_BASE_URL,
+      bodyStyle: {
+        padding: "10px",
+        paddingBottom: "0px"
+      },
+      detailStyle: {
+        height: '500px',
+        overflow: 'auto',
+        background: "#F8FBFC"
+      },
+      maskClosable: false,
+      centered: true,
+      destroyOnClose: true,
+      scoreData: {
+        isTl: '铜绿感染',
+        age: 62,
+        patientName: '宋国军',
+        sex: 1,
+        BACI: 0,
+        BSI: 9,
+        FACED: 4,
+        Reiff: 12,
+        HAD: {
+          score: 22
+        },
+        LCQ: {
+          score: 9.79,
+          score1: 3.25,
+          score2: 3.29,
+          score3: 3.25
+        },
+        MMRC: {
+          score: 3
+        },
+        BHQ: {
+          score: 46.32649
+        },
+        QOLB: {
+          score1: 26.67,
+          score2: 26.67,
+          score3: 26.67,
+          score4: 16.67,
+          score5: 26.67,
+          score6: 26.67,
+          score7: 8.33,
+          score8: 25.39
+        }
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      // 表头
+      columns: this.$ls.get(ACCESS_TOKEN).roleId === 1 ? groupColumns : columns,
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        return getPatientList(Object.assign(parameter, this.queryParam)).then(res => {
+          res.data.forEach((item, index) => {
+            if (item.basisList.length > 0) {
+              item.basisList[0].progress = item.basisList[0].executeStatus == 3 ? 100 : item.basisList[0].progress
+            }
+            item.tId = index
+          })
+          return res;
+        });
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+
+      // custom table alert & rowSelection
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = [];
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      scroll: false,
+      optionAlertShow: false,
+      form: this.$form.createForm(this),
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      visible: false,
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 7 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 15 }
+      },
+      requiredRule: { rules: [{ required: true, message: '该选项必填!' }] },
+      patientId: null,
+      confirmLoading: false,
+      detailVisible: false,
+      canExport: this.$ls.get(ACCESS_TOKEN).purviewType === 1
+    }
+  },
+  created() {
+    this.setSidebar(true)
+    this.scroll = {
+      y: (window.screen.height - 368) + "px"
+    }
+  },
+  computed: {
+    ...mapGetters(['token'])
+  },
+  mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  },
+  filters: {
+    statusFilter(type) {
+      return statusMap[type].text;
+    },
+    statusTypeFilter(type) {
+      return statusMap[type].status;
+    },
+    visitFilter(type) {
+      return visitMap[type].text;
+    },
+    visitTypeFilter(type) {
+      return visitMap[type].status;
+    }
+  },
+  methods: {
+    ...mapActions(['setSidebar']),
+    modifyName(name) {
+      return name.replace(/(.)(.*)/, (_, $1, $2) => $1 + '*'.repeat($2.length))
+    },
+    clearForm() {
+      console.log(this.dateArr)
+      this.queryParam = {}
+      this.dateArr = []
+    },
+    tableSearch(type) {
+      this.queryParam.queryType = type
+      this.$refs.table.refresh();
+      this.advanced = false;
+    },
+    refreshTable() {
+      this.advanced = false;
+      this.$refs.table.refresh();
+    },
+    showUser(record) {
+      this.$refs.detailModal.show(record);
+    },
+    handleEdit(record) {
+      this.$router.push('/list/basis/' + record.basisList[0].patientBasisId)
+    },
+    handleOk() {
+      this.$refs.table.refresh();
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    toggleAdvanced() {
+      this.advanced = !this.advanced;
+    },
+    changeTime(time) {
+      this.dateArr = time;
+      this.queryParam.createDateStart = moment(time[0]).format('YYYY-MM-DD')
+      this.queryParam.createDateEnd = moment(time[1]).format('YYYY-MM-DD')
+    },
+    exportData() {
+      window.open(this.baseUrl + '/patient/export?doctorId=' + this.token.doctorId)
+    },
+    handleCancel() {
+      this.detailVisible = false
+    },
+    handleClose() {
+      this.visible = false
+    },
+    handleSubmit(record) {
+      this.patientBasisId = record.basisList[0].patientBasisId
+      this.$refs.contactModal.add()
+    },
+    handleOut(record) {
+      this.visible = true
+      this.patientId = record.patientId
+    },
+    outSubmit() {
+      var that = this
+      this.form.validateFieldsAndScroll((errors, fieldsValue) => {
+        if (errors) {
+          that.confirmLoading = false
+          return
+        }
+        const params = new URLSearchParams()
+        params.append('patientId', that.patientId)
+        params.append('status', fieldsValue.status)
+        outGroup(params).then(res => {
+          that.visible = false
+          that.confirmLoading = false
+          that.$message.success(res.msg)
+          that.$refs.table.refresh()
+        });
+      });
+    },
+    handleOk(v) {
+      var that = this
+      this.$confirm({
+        title: '确认提交?',
+        onOk() {
+          var params = new URLSearchParams()
+          params.append('patientBasisId', that.patientBasisId)
+          params.append('submitName', v.submitName)
+          params.append('submitTelephone', v.submitTelephone)
+          submitCheck(params)
+            .then(res => {
+              if (res.code === -1) {
+                that.$message.error(res.msg)
+              } else {
+                that.$message.success(res.msg)
+                that.$refs.table.refresh()
+                that.scoreData = res.data
+                that.detailVisible = true
+              }
+
+            }).catch(error => {
+              console.log(error)
+            })
+        }
+      })
+    },
+    handleExport() {
+      window.open(this.baseUrl + 'patientReport/exportAllDate')
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.ant-table td {
+  white-space: nowrap;
+}
+
+/deep/th.operation {
+  text-align: center !important;
+}
+
+/deep/.ant-table-tbody>tr>td.operation {
+  text-align: center !important;
+}
+
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px
+}
+
+/deep/.ant-table-row:hover .progressTag .ant-progress-inner {
+  background-color: #ffffff !important;
+}
+
+.progressTag {
+  display: inline-block;
+  width: 250px;
+
+  /deep/ .progressTagContent {
+    display: inline-block;
+    width: 80px;
+    margin-right: 5px;
+  }
+
+  /deep/ .progressTagTitle {
+    font-size: 12px;
+    text-align: center;
+    color: #000;
+    margin-bottom: 0;
+    margin-right: 15px;
+    display: inline-block;
+  }
+
+  /deep/ .progressTag .anticon {
+    color: #4bc5ac;
+    font-size: 18px;
+    vertical-align: bottom;
+  }
+
+  /deep/ .ant-progress-inner {
+    background-color: #e5f6ff;
+  }
+
+  /deep/ .progressTag .ant-progress-span {
+    color: rgb(0, 160, 233);
+  }
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item.wider-label > .ant-form-item-label {
+    width: 100px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+
+.userName {
+  color: #1fb2fa;
+  margin: 0;
+
+  &:active,
+  &:hover {
+    text-decoration: underline;
+    text-underline-position: under;
+    text-decoration-color: #1fb2fa;
+    cursor: pointer;
+  }
+}
+
+.userDetail {
+  border: 1px solid #f8f8f8;
+  border-top: 4px solid #168ffd;
+  padding: 15px 25px;
+  background-color: #ffffff;
+
+  .userDetailTop {
+    overflow: hidden;
+
+    img {
+      display: inline-block;
+      vertical-align: top;
+      width: 60px;
+      height: 60px;
+      float: left;
+    }
+
+    .name {
+      float: left;
+      line-height: 60px;
+      height: 60px;
+      margin: 0 10px;
+    }
+
+    .age {
+      float: left;
+      margin-top: 20px;
+
+      .userDetailAge {
+        display: inline-block;
+        background-color: #96dcfd;
+        color: #ffffff;
+        padding: 0px 10px;
+        border-radius: 3px;
+
+        .anticon {
+          margin-right: 5px;
+        }
+      }
+    }
+
+    .tl {
+      float: left;
+      height: 21px;
+      line-height: 21px;
+      background: #ff4856;
+      border-radius: 3px;
+      padding: 0 10px;
+      margin-top: 20px;
+      margin-left: 10px;
+      color: #fff;
+    }
+  }
+}
+
+.scores {
+  margin-top: 10px;
+  border-top: 2px solid #168ffd;
+  background-color: #fff;
+  padding: 10px;
+
+  .title {
+    color: #096dd9;
+    margin-bottom: 10px;
+  }
+
+  .block {
+    border: 1px solid #eee;
+    padding: 10px;
+
+    &.heighter {
+      height: 100px;
+    }
+
+    .name {
+      float: left;
+    }
+
+    .score {
+      float: right;
+      color: #096dd9;
+      font-weight: bold;
+
+      &.no {
+        color: gray;
+      }
+    }
+
+    .chart-mini-progress {
+      clear: both;
+    }
+
+    .ant-row {
+      clear: both;
+      margin-top: 30px;
+
+      .chart-mini-progress {
+        clear: none;
+        float: left;
+        width: 56%;
+        margin: 0 10px;
+      }
+
+      label {
+        float: left;
+        font-size: 12px;
+      }
+    }
+
+    /deep/.antv-chart-mini .chart-wrapper {
+      bottom: -100px !important;
+    }
+  }
+
+}
+</style>
\ No newline at end of file
diff --git a/src/views/list/modules/CreateForm.vue b/src/views/list/modules/CreateForm.vue
index c35c4554af..e58987bcda 100644
--- a/src/views/list/modules/CreateForm.vue
+++ b/src/views/list/modules/CreateForm.vue
@@ -1,67 +1,682 @@
-<template>
-  <a-modal
-    title="新建规则"
-    :width="640"
-    :visible="visible"
-    :confirmLoading="confirmLoading"
-    @ok="handleSubmit"
-    @cancel="handleCancel"
-  >
-    <a-spin :spinning="confirmLoading">
-      <a-form :form="form">
-        <a-form-item
-          label="描述"
-          :labelCol="labelCol"
-          :wrapperCol="wrapperCol"
-        >
-          <a-input v-decorator="['desc', {rules: [{required: true, min: 5, message: '请输入至少五个字符的规则描述!'}]}]" />
-        </a-form-item>
-      </a-form>
-    </a-spin>
-  </a-modal>
-</template>
-
-<script>
-export default {
-  data () {
-    return {
-      labelCol: {
-        xs: { span: 24 },
-        sm: { span: 7 }
-      },
-      wrapperCol: {
-        xs: { span: 24 },
-        sm: { span: 13 }
-      },
-      visible: false,
-      confirmLoading: false,
-
-      form: this.$form.createForm(this)
-    }
-  },
-  methods: {
-    add () {
-      this.visible = true
-    },
-    handleSubmit () {
-      const { form: { validateFields } } = this
-      this.confirmLoading = true
-      validateFields((errors, values) => {
-        if (!errors) {
-          console.log('values', values)
-          setTimeout(() => {
-            this.visible = false
-            this.confirmLoading = false
-            this.$emit('ok', values)
-          }, 1500)
-        } else {
-          this.confirmLoading = false
-        }
-      })
-    },
-    handleCancel () {
-      this.visible = false
-    }
-  }
-}
-</script>
+<template>
+  <a-modal :title="options.title" :width="800" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :destroyOnClose="destroyOnClose" :centered="centered" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item label="病例识别号" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input placeholder="请输入身份证号" v-decorator="['card', { rules: [{ validator: isIdCardNo }] }]" />
+        </a-form-item>
+        <!-- <a-form-item label="病例入组编号" :labelCol="labelCol" :wrapperCol="wrapperCol"><a-input v-decorator="['card', { rules: [{ required: true }] }]" /></a-form-item> -->
+        <a-form-item label="患者同意注册日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-date-picker style="width: 100%" format="YYYY-MM-DD" v-decorator="['registerDate', requiredRule]" :disabledDate="disabledDate" />
+        </a-form-item>
+        <a-form-item label="姓名" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['name', requiredRule]" />
+        </a-form-item>
+        <!-- <a-form-item label="是否ICON患者" :labelCol="labelCol" :wrapperCol="wrapperCol" class="aaa">
+          <a-popover>
+            <template slot="content">
+              入选标准:1、临床诊断为支气管扩张症(根据中国2021年《成人支气管扩张症诊治专家共识》,患者既往胸部CT检查必须存在影像学上支气管扩张的表现)。2、年龄≥18岁的患者。<br />
+              排除标准:1、囊性纤维化引起的支气管扩张症。2、入组前4周内曾发生支气管扩张症急性加重*。3、入组前6个月内参与了任何干预性临床试验。4、无法或不愿提供知情同意书的患者。
+            </template>
+            <a-icon
+              type="exclamation-circle"
+              style="position: relative; left: -20px; color: #0399ec; cursor: pointer"
+            />
+          </a-popover>
+          <a-radio-group v-decorator="['isIcon', requiredRule]" @change="changeRadio($event, 'isShowPat')">
+            <a-radio value="1">是</a-radio>
+            <a-radio value="-1">否</a-radio>
+          </a-radio-group>
+        </a-form-item> -->
+        <div v-if="isShowPat">
+          <a-form-item label="ICON入组时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
+            <a-date-picker style="width: 100%" format="YYYY-MM-DD" v-decorator="['iconJoinDate', requiredRule]" :disabledDate="disabledDate" />
+          </a-form-item>
+          <a-form-item label="既往胸部CT是否存在影像学上支气管扩张的表现" :labelCol="labelCol" :wrapperCol="wrapperCol">
+            <a-radio-group v-decorator="['isbiaoxian', { rules: [{ validator: isbiaoxianRule }] }]">
+              <a-radio value="1">是</a-radio>
+              <a-radio value="-1">否</a-radio>
+            </a-radio-group>
+          </a-form-item>
+          <a-form-item label="是否有囊性纤维化引起的支气管扩张症" :labelCol="labelCol" :wrapperCol="wrapperCol">
+            <a-radio-group v-decorator="['iskuozhang', { rules: [{ validator: iskuozhangRule }] }]">
+              <a-radio value="1">是</a-radio>
+              <a-radio value="-1">否</a-radio>
+            </a-radio-group>
+          </a-form-item>
+          <a-form-item label="入组前4周是否发生支气管扩张症急性加重" :labelCol="labelCol" :wrapperCol="wrapperCol">
+            <a-radio-group v-decorator="['isjiazhong', { rules: [{ validator: isjiazhongRule }] }]">
+              <a-radio value="1">是</a-radio>
+              <a-radio value="-1">否</a-radio>
+            </a-radio-group>
+          </a-form-item>
+          <a-form-item label="入组前6个月是否参加任何干预性临床试验" :labelCol="labelCol" :wrapperCol="wrapperCol">
+            <a-radio-group v-decorator="['isshiyan', { rules: [{ validator: isshiyanRule }] }]">
+              <a-radio value="1">是</a-radio>
+              <a-radio value="-1">否</a-radio>
+            </a-radio-group>
+          </a-form-item>
+          <a-form-item label="患者是否无法或不愿意提供知情同意书" :labelCol="labelCol" :wrapperCol="wrapperCol">
+            <a-radio-group v-decorator="['istongyi', { rules: [{ validator: istongyiRule }] }]">
+              <a-radio value="1">是</a-radio>
+              <a-radio value="-1">否</a-radio>
+            </a-radio-group>
+          </a-form-item>
+        </div>
+        <a-form-item label="出现咳嗽咳痰等呼吸相关症状时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-date-picker style="width: 100%" format="YYYY-MM-DD" v-decorator="['coughDate']" :disabledDate="disabledDate" />
+        </a-form-item>
+        <a-form-item label="性别" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-radio-group v-decorator="['sex', requiredRule]">
+            <a-radio value="1">男</a-radio>
+            <a-radio value="0">女</a-radio>
+          </a-radio-group>
+        </a-form-item>
+        <a-form-item label="出生日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-date-picker style="width: 100%" format="YYYY-MM-DD" :disabled="true" v-decorator="['birthDate', requiredRule]" />
+        </a-form-item>
+        <a-form-item label="常居住地" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-row :gutter="8">
+            <a-col :span="12">
+              <a-form-item>
+                <a-cascader v-decorator="['residence', requiredRule]" :options="residences" :fieldNames="{ label: 'city', value: 'cityId', children: 'children' }" placeholder="选择省/市" />
+              </a-form-item>
+            </a-col>
+            <a-col :span="12">
+              <a-form-item>
+                <a-input v-decorator="['address', requiredRule]" placeholder="请输入详细地址" />
+              </a-form-item>
+            </a-col>
+          </a-row>
+        </a-form-item>
+        <a-form-item label="民族" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-select v-decorator="['nation', requiredRule]" :options="nationList"></a-select>
+        </a-form-item>
+        <a-form-item label="职业" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-radio-group :options="professionList" v-decorator="['work', requiredRule]" />
+        </a-form-item>
+        <a-form-item label="文化程度" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-radio-group :options="censusList" v-decorator="['census', requiredRule]" />
+        </a-form-item>
+        <a-form-item label="家庭年收入" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['income', requiredRule]" addonAfter="万元" />
+        </a-form-item>
+        <a-form-item label="医疗费用支付情况" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-radio-group :options="payTypeList" v-decorator="['payType', requiredRule]" />
+        </a-form-item>
+        <a-form-item label="联系电话1" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['telephone1', requiredRule]" />
+        </a-form-item>
+        <a-form-item label="联系电话2" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['telephone2']" />
+        </a-form-item>
+        <a-form-item label="联系电话3" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['telephone3']" />
+        </a-form-item>
+        <a-form-item label="随访开始时间" :labelCol="labelCol" :wrapperCol="wrapperCol" class="aaa">
+          <a-popover>
+            <template slot="content"> 第一次半年随访根据此时间生成 </template>
+            <a-icon type="exclamation-circle" style="position: relative; left: -20px; color: #0399ec; cursor: pointer" />
+          </a-popover>
+          <a-date-picker style="width: 100%" format="YYYY-MM-DD" v-decorator="['startDate', requiredRule]" />
+        </a-form-item>
+        <a-form-item label="推荐医生" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['doctorName', requiredRule]" />
+        </a-form-item>
+        <a-form-item label="是否去世" v-if="options.title == '编辑患者'" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-radio-group v-decorator="['deathFlag', requiredRule]" @change="changeRadio($event, 'isDeath')">
+            <a-radio value="0">否</a-radio>
+            <a-radio value="1">是</a-radio>
+          </a-radio-group>
+        </a-form-item>
+        <div v-if="isDeath">
+          <a-form-item label="去世时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
+            <a-date-picker style="width: 100%" format="YYYY-MM-DD" v-decorator="['deathDate', requiredRule]" :disabledDate="disabledDate" />
+          </a-form-item>
+        </div>
+        <a-form-item :wrapperCol="agrWrapperCol">
+          <a-checkbox v-decorator="[
+              'agreeMent',
+              { rules: [{ required: true, validator: agrValidator }], valuePropName: 'checked' },
+            ]" :disabled="options.title == '编辑患者'">
+            患者是否已签署
+            <a href="javascript:;" @click="download">知情同意书</a>
+          </a-checkbox>
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+import {
+  getProvinceAndCity,
+  getNation,
+  getDictionaryAttributeByDictionaryId,
+  addOrUpdate,
+  validateCard,
+  updateDataEcho
+} from '@/api/basis'
+import moment from 'moment'
+import _ from 'lodash'
+export default {
+  data() {
+    return {
+      options: {},
+      residences: [],
+      nationList: [],
+      professionList: [],
+      censusList: [],
+      baseUrl: process.env.VUE_APP_API_BASE_URL,
+      maskClosable: false,
+      payTypeList: [],
+      isShowPat: false,
+      isDeath: false,
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 10 },
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 13 },
+      },
+      agrWrapperCol: {
+        xs: {
+          span: 24,
+          offset: 0,
+        },
+        sm: {
+          span: 18,
+          offset: 6,
+        },
+      },
+      visible: false,
+      confirmLoading: false,
+      centered: true,
+      destroyOnClose: true,
+      bodyStyle: {
+        height: '500px',
+        overflow: 'auto'
+      },
+      form: this.$form.createForm(this),
+      requiredRule: { rules: [{ required: true, message: '该选项必填!' }] },
+      patientId: undefined,
+      patientPendingId: undefined,
+      wxPatientId: undefined
+    }
+  },
+  created() {
+    const that = this
+    getProvinceAndCity().then((res) => {
+      const keyMap = { province: 'city', provinceId: 'cityId' }
+      _.each(res.data, function(item, index) {
+        that.residences[index] = Object.keys(item).reduce((newData, key) => {
+          let newKey = keyMap[key] || key
+          newData[newKey] = item[key]
+          return newData
+        }, {})
+      })
+    })
+    getNation().then((res) => {
+      const keyMap = { name: 'title', nationId: 'value' }
+      _.each(res.data, function(item, index) {
+        that.nationList[index] = Object.keys(item).reduce((newData, key) => {
+          let newKey = keyMap[key] || key
+          newData[newKey] = item[key]
+          return newData
+        }, {})
+      })
+    })
+    const dictionary1 = new URLSearchParams()
+    dictionary1.append('dictionaryId', 1)
+    dictionary1.append('status', 1)
+    getDictionaryAttributeByDictionaryId(dictionary1).then((res) => {
+      const keyMap = { name: 'label', dictionaryAttributeId: 'value' }
+      _.each(res.data, function(item, index) {
+        that.professionList[index] = Object.keys(item).reduce((newData, key) => {
+          let newKey = keyMap[key] || key
+          newData[newKey] = item[key]
+          return newData
+        }, {})
+      })
+    })
+    const dictionary2 = new URLSearchParams()
+    dictionary2.append('dictionaryId', 2)
+    dictionary2.append('status', 1)
+    getDictionaryAttributeByDictionaryId(dictionary2).then((res) => {
+      const keyMap = { name: 'label', dictionaryAttributeId: 'value' }
+      _.each(res.data, function(item, index) {
+        that.censusList[index] = Object.keys(item).reduce((newData, key) => {
+          let newKey = keyMap[key] || key
+          newData[newKey] = item[key]
+          return newData
+        }, {})
+      })
+    })
+
+    const dictionary3 = new URLSearchParams()
+    dictionary3.append('dictionaryId', 3)
+    dictionary3.append('status', 1)
+    getDictionaryAttributeByDictionaryId(dictionary3).then((res) => {
+      const keyMap = { name: 'label', dictionaryAttributeId: 'value' }
+      _.each(res.data, function(item, index) {
+        that.payTypeList[index] = Object.keys(item).reduce((newData, key) => {
+          let newKey = keyMap[key] || key
+          newData[newKey] = item[key]
+          return newData
+        }, {})
+      })
+    })
+  },
+  methods: {
+    add() {
+      this.options.title = '新建患者'
+      this.patientId = undefined
+      this.visible = true
+    },
+    changeRadio(e, t) {
+      if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    dataEcho(value) {
+      this.options.title = '患者入组信息'
+      this.patientPendingId = value.patientPendingId
+      this.wxPatientId = value.wxPatientId
+      value.residence = [value.addressP, value.addressC]
+      setTimeout(() => {
+        this.form.setFieldsValue({
+          card: value.card,
+          name: value.name,
+          sex: String(value.sex),
+          birthDate: moment(value.birthDate, 'x'),
+          residence: value.residence,
+          address: value.address,
+          nation: value.nation,
+          work: value.work,
+          census: value.census,
+          income: value.income,
+          payType: value.payType,
+          telephone1: value.telephone1,
+          telephone2: value.telephone2,
+          telephone3: value.telephone3
+        })
+        if (value.startDate)
+          this.form.setFieldsValue({
+            startDate: moment(value.startDate, 'YYYY-MM-DD'),
+          })
+      }, 0)
+      this.visible = true
+    },
+    edit(value) {
+      this.options.title = '编辑患者'
+      this.patientId = value.patientId
+      value.residence = [value.addressP, value.addressC]
+      // if (value.isIcon === 1) {
+      //   this.isShowPat = true
+      // } else {
+      //   this.isShowPat = false
+      // }
+      if (value.deathFlag == 1) {
+        this.isDeath = true
+      } else {
+        this.isDeath = false
+      }
+      setTimeout(() => {
+        this.form.setFieldsValue({
+          card: value.card,
+          registerDate: moment(value.registerDate, 'x'),
+          coughDate: value.coughDate ? moment(value.coughDate, 'x') : null,
+          name: value.name,
+          sex: String(value.sex),
+          birthDate: moment(value.birthDate, 'x'),
+          residence: value.residence,
+          address: value.address,
+          nation: value.nation,
+          work: value.work,
+          census: value.census,
+          income: value.income,
+          payType: value.payType,
+          telephone1: value.telephone1,
+          telephone2: value.telephone2,
+          deathFlag: value.deathFlag,
+          telephone3: value.telephone3,
+          agreeMent: JSON.parse(value.agreeMent),
+          doctorName: value.doctorName,
+          // isIcon: String(value.isIcon)
+        })
+        // if (value.isIcon == 1) {
+        //   this.form.setFieldsValue({
+        //     isbiaoxian: String(value.isIcon),
+        //     iskuozhang: '-1',
+        //     isjiazhong: '-1',
+        //     isshiyan: '-1',
+        //     istongyi: '-1',
+        //     iconJoinDate: value.iconJoinDate ? moment(value.iconJoinDate, 'YYYY-MM-DD') : null,
+        //   })
+        // }
+        if (value.deathFlag == 1) {
+          this.form.setFieldsValue({
+            deathDate: value.deathDate ? moment(value.deathDate, 'YYYY-MM-DD') : null,
+          })
+        }
+        if (value.startDate)
+          this.form.setFieldsValue({
+            startDate: moment(value.startDate, 'YYYY-MM-DD')
+          })
+      }, 0)
+      this.visible = true
+    },
+    handleSubmit() {
+      if (!this.confirmLoading) {
+        this.confirmLoading = true
+        var submitPatientPendingId = this.patientPendingId || ''
+        var submitWxPatientId = this.wxPatientId || ''
+        this.form.validateFieldsAndScroll((errors, fieldsValue) => {
+          // if (
+          //   this.form.getFieldValue('birthDate') &&
+          //   new Date().getFullYear() - this.form.getFieldValue('birthDate')._d.getFullYear() < 18 &&
+          //   this.form.getFieldValue('isIcon') == 1
+          // ) {
+          //   this.$message.warning('患者不满18岁,不符合ICON患者条件')
+          //   this.confirmLoading = false
+          //   return false
+          // }
+          const that = this
+          if (errors) {
+            this.confirmLoading = false
+            return
+          }
+          const residence = fieldsValue['residence']
+          const values = {
+            ...fieldsValue,
+            birthDate: fieldsValue['birthDate'].format('YYYY-MM-DD'),
+            registerDate: fieldsValue['registerDate'].format('YYYY-MM-DD'),
+            startDate: fieldsValue['startDate'].format('YYYY-MM-DD'),
+            addressP: residence[0],
+            addressC: residence[1],
+            patientId: this.patientId || ''
+          }
+          if (fieldsValue['iconJoinDate']) {
+            values.iconJoinDate = fieldsValue['iconJoinDate'].format('YYYY-MM-DD')
+          }
+          if (fieldsValue['deathDate']) {
+            console.log(values.deathDate)
+            values.deathDate = fieldsValue['deathDate'].format('YYYY-MM-DD')
+          }
+          if (fieldsValue['coughDate']) {
+            values.coughDate = fieldsValue['coughDate'].format('YYYY-MM-DD')
+          }
+          const params = new URLSearchParams()
+          params.append('patientStr', JSON.stringify(values))
+          params.append('changeCenter', '')
+          params.append('centerId', '')
+          if (submitPatientPendingId && submitWxPatientId) {
+            updateDataEcho(submitPatientPendingId, submitWxPatientId, params).then((res) => {
+              that.visible = false
+              that.confirmLoading = false
+              that.$message.success(res.msg)
+              that.$emit('ok', values)
+            })
+          } else {
+            addOrUpdate(params).then((res) => {
+              that.visible = false
+              that.confirmLoading = false
+              that.$message.success(res.msg)
+              that.$emit('ok', values)
+            })
+          }
+        })
+      }
+    },
+    handleCancel() {
+      this.visible = false
+    },
+    agrValidator(rule, value, callback) {
+      if (this.options.title == '编辑患者') {
+        callback()
+        return
+      }
+      if (!value) {
+        callback('该选项必填!')
+        return
+      }
+      callback()
+    },
+    isbiaoxianRule(rule, value, callback) {
+      if (!value) {
+        callback('该选项必填!')
+        return
+      }
+      if (this.form.getFieldValue('isbiaoxian') == -1) {
+        callback('患者ICON研究必须符合入选标准,请仔细核对入选标准后再选择。')
+        return
+      }
+      callback()
+    },
+    iskuozhangRule(rule, value, callback) {
+      if (!value) {
+        callback('该选项必填!')
+        return
+      }
+      if (this.form.getFieldValue('iskuozhang') == 1) {
+        callback('患者ICON研究必须符合入选标准,请仔细核对入选标准后再选择。')
+        return
+      }
+      callback()
+    },
+    isjiazhongRule(rule, value, callback) {
+      if (!value) {
+        callback('该选项必填!')
+        return
+      }
+      if (this.form.getFieldValue('isjiazhong') == 1) {
+        callback('患者ICON研究必须符合入选标准,请仔细核对入选标准后再选择。')
+        return
+      }
+      callback()
+    },
+    isshiyanRule(rule, value, callback) {
+      if (!value) {
+        callback('该选项必填!')
+        return
+      }
+      if (this.form.getFieldValue('isshiyan') == 1) {
+        callback('患者ICON研究必须符合入选标准,请仔细核对入选标准后再选择。')
+        return
+      }
+      callback()
+    },
+    istongyiRule(rule, value, callback) {
+      if (!value) {
+        callback('该选项必填!')
+        return
+      }
+      if (this.form.getFieldValue('istongyi') == 1) {
+        callback('患者ICON研究必须符合入选标准,请仔细核对入选标准后再选择。')
+        return
+      }
+      callback()
+    },
+    isIdCardNo(rule, value, callback) {
+      if (!value) {
+        callback('该选项必填!')
+        return
+      }
+      if (this.form.getFieldValue('work') === 4 && !value) {
+        callback()
+        return
+      }
+      if (!value) {
+        callback('该选项必填!')
+        return
+      }
+      let num = value.toUpperCase()
+      const reg = /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/;
+      if (!reg.test(num)) {
+        callback('请输入正确的身份证号!')
+        return
+      }
+      if (num.length === 18) {
+        //验证城市
+        let aCity = {
+          11: '北京',
+          12: '天津',
+          13: '河北',
+          14: '山西',
+          15: '内蒙古',
+          21: '辽宁',
+          22: '吉林',
+          23: '黑龙江 ',
+          31: '上海',
+          32: '江苏',
+          33: '浙江',
+          34: '安徽',
+          35: '福建',
+          36: '江西',
+          37: '山东',
+          41: '河南',
+          42: '湖北',
+          43: '湖南',
+          44: '广东',
+          45: '广西',
+          46: '海南',
+          50: '重庆',
+          51: '四川',
+          52: '贵州',
+          53: '云南',
+          54: '西藏',
+          61: '陕西',
+          62: '甘肃',
+          63: '青海',
+          64: '宁夏',
+          65: '新疆',
+          71: '台湾',
+          81: '香港',
+          82: '澳门',
+          91: '国外',
+        }
+        if (aCity[parseInt(num.substr(0, 2))] == null) {
+          callback('身份证号不正确或不符合规定!')
+          return
+        }
+        // 验证生日
+        let reg = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/)
+        let arrSplit = num.match(reg)
+        let dtmBirth = new Date(arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4])
+        let bGoodDay
+        bGoodDay =
+          dtmBirth.getFullYear() == Number(arrSplit[2]) &&
+          dtmBirth.getMonth() + 1 == Number(arrSplit[3]) &&
+          dtmBirth.getDate() == Number(arrSplit[4])
+        if (!bGoodDay) {
+          callback('身份证号不正确或不符合规定!')
+          return
+        }
+        // 验证格式
+        var valnum
+        var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
+        var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
+        var nTemp = 0
+        for (var i = 0; i < 17; i++) {
+          nTemp += num.substr(i, 1) * arrInt[i]
+        }
+        valnum = arrCh[nTemp % 11]
+        if (valnum != num.substr(17, 1)) {
+          callback('身份证号不正确或不符合规定!')
+          return
+        }
+        // 回显性别、生日
+        // this.form.resetFields(['birthDate', 'sex'])
+        this.confirmLoading = true
+        const params = new FormData()
+        params.append('card', num)
+        validateCard(params).then((res) => {
+          this.confirmLoading = false
+          switch (res.code) {
+            case 2:
+              callback(res.msg)
+              this.form.setFieldsValue({card: ''})
+              this.$message.warning(res.msg)
+              break
+            case 3:
+              let birthDate = new Date(num.substr(6, 8).replace(/(.{4})(.{2})/, '$1-$2-')).getTime()
+              let sex = parseInt(num.charAt(16) / 2) * 2 != num.charAt(16) ? '1' : '0'
+              this.form.setFieldsValue({
+                birthDate: moment(birthDate, 'x'),
+                sex,
+              })
+              callback()
+              break
+            case 4:
+              if(this.patientId) {
+                callback()
+              } else {
+                callback('该患者已存在,请在列表内搜索!')
+                this.form.setFieldsValue({card: ''})
+                this.$message.warning('该患者已存在,请在列表内搜索!')
+              }
+              break
+            default:
+              callback()
+          }
+        })
+      }
+      if (num.length === 15) {
+        const arr = num.match(/^\d{6}(\d{2})(\d{2})(\d{2})\d{3}$/)
+        // 回显性别、生日
+        this.form.resetFields(['birthDate'])
+        this.confirmLoading = true
+        const params = new FormData()
+        params.append('card', num)
+        validateCard(params).then((res) => {
+          this.confirmLoading = false
+          switch (res.code) {
+            case 2:
+              callback(res.msg)
+              break
+            case 3:
+              let birthDate = new Date(arr[1] + '/' + arr[2] + '/' + arr[3]).getTime()
+              this.form.setFieldsValue({
+                birthDate: moment(birthDate, 'x')
+              })
+              callback()
+              break
+            case 4:
+              callback('该患者已存在,请在列表内搜索!')
+              break
+            default:
+              callback()
+          }
+        })
+      }
+      callback()
+      return
+    },
+    disabledDate(current) {
+      // Can not select days before today and today
+      return current && (current > moment().endOf('day') || current.get('year') < 1930)
+    },
+    download() {
+      window.open(this.baseUrl + '/patient/downLoad')
+    }
+  },
+}
+</script>
+<style lang="less" scoped>
+/deep/ .ant-form-item:last-child {
+  margin-bottom: 0;
+}
+
+/deep/ .aaa .ant-form-item-label {
+  position: relative;
+  left: -18px;
+}
+
+.aaa .ant-form-item-children>i {
+  position: absolute !important;
+  left: -22px !important;
+  top: 4px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/list/modules/StepByStepModal.vue b/src/views/list/modules/StepByStepModal.vue
index 9200a94420..e3db16e067 100644
--- a/src/views/list/modules/StepByStepModal.vue
+++ b/src/views/list/modules/StepByStepModal.vue
@@ -133,11 +133,11 @@ export default {
       })
     },
     handleNext (step) {
-      const { form: { validateFields } } = this
+      const { form: { validateFieldsAndScroll } } = this
       const currentStep = step + 1
       if (currentStep <= 2) {
         // stepForms
-        validateFields(stepForms[ this.currentStep ], (errors, values) => {
+        validateFieldsAndScroll(stepForms[ this.currentStep ], (errors, values) => {
           if (!errors) {
             this.currentStep = currentStep
           }
@@ -146,7 +146,7 @@ export default {
       }
       // last step
       this.confirmLoading = true
-      validateFields((errors, values) => {
+      validateFieldsAndScroll((errors, values) => {
         console.log('errors:', errors, 'val:', values)
         if (!errors) {
           console.log('values:', values)
diff --git a/src/views/list/modules/TaskForm.vue b/src/views/list/modules/TaskForm.vue
index 4d4cad96b5..474b962d9a 100644
--- a/src/views/list/modules/TaskForm.vue
+++ b/src/views/list/modules/TaskForm.vue
@@ -66,9 +66,9 @@ export default {
       })
     },
     handleSubmit () {
-      const { form: { validateFields } } = this
+      const { form: { validateFieldsAndScroll } } = this
       this.visible = true
-      validateFields((errors, values) => {
+      validateFieldsAndScroll((errors, values) => {
         if (!errors) {
           console.log('values', values)
         }
diff --git a/src/views/list/modules/UserDetail.vue b/src/views/list/modules/UserDetail.vue
new file mode 100644
index 0000000000..93a5e7d194
--- /dev/null
+++ b/src/views/list/modules/UserDetail.vue
@@ -0,0 +1,577 @@
+<template>
+  <a-modal title="患者详情" :width="800" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :centered="centered" :destroyOnClose="destroyOnClose" :visible="visible" :confirmLoading="confirmLoading" :footer="null" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <user-detail :option="patient"></user-detail>
+      <a-tabs defaultActiveKey="1">
+        <a-tab-pane tab="详细信息" key="1">
+          <div class="userCard">
+            <a-row id="userInfo">
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>患者同意注册日期:</span>
+                  {{ patient.registerDate | formDate }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>文化程度:</span>
+                  {{ patient.censusName }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>访视状态:</span>
+                  {{ patient.visitName }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>医疗费用支付情况:</span>
+                  {{ patient.payTypeName }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>职业:</span>
+                  {{ patient.workName }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>家庭年收入:</span>
+                  {{ patient.income }}万
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>创建机构:</span>
+                  {{ patient.centerName }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>创建时间:</span>
+                  {{ patient.ceateDate | formDate }}
+                </p>
+              </a-col>
+              <a-col :sm="8">
+                <p class="userInfoItem">
+                  <span>创建人:</span>
+                  {{ patient.creatorName }}
+                </p>
+              </a-col>
+              <a-col :sm="16">
+                <p class="userInfoItem">
+                  <span>出现咳嗽咳痰等呼吸相关症状时间:</span>
+                  {{ patient.coughDate | formDate }}
+                </p>
+              </a-col>
+            </a-row>
+          </div>
+        </a-tab-pane>
+        <a-tab-pane tab="待访视任务" key="2" forceRender>
+          <div class="userCard" v-if="visitTasks.length>0">
+            <div class="followupItem" v-for="item in visitTasks" :key="item.id">
+              <my-icon class="my-icon-huaban" type="iconshijian_huaban" />
+              <p>
+                <span>计划时间:</span>
+                {{item.planDate | formDate}}
+              </p>
+              <p>
+                <span>随访摘要:</span>
+                {{item.typeName}}
+              </p>
+              <a @click="exec(item.type, item.patientBasisId)">
+                <a-button type="primary" size="small" style="float:right;">
+                  <my-icon type="iconxiangqing_huaban" />
+                  执行
+                </a-button>
+              </a>
+            </div>
+          </div>
+          <div v-else class="userCard">
+            <div style="text-align: center;">
+              <img src="@/assets/noData.png" alt="">
+              <p>暂无数据</p>
+            </div>
+          </div>
+        </a-tab-pane>
+        <a-tab-pane tab="访视情况" key="3">
+          <div class="userCard" v-if="patientBasisList.length>0">
+            <a-timeline>
+              <a-timeline-item v-for="item in patientBasisList" :key="item.id">
+                <span class="followupDate">{{item.createDate|formDate}}</span>
+                <div class="followupInfoItem">
+                  <div class="followupInfoItemType">
+                    <p>
+                      访视类型:
+                      <span>{{item.type|patientBasisType}}</span>
+                    </p>
+                    <p>访视时间: {{item.wirteDate|formDate}}</p>
+                  </div>
+                  <div class="followupInfoItemPro">
+                    <p>
+                      访视进度:
+                      <span>{{item.executeStatus == 3 ? '已完成' : '未完成'}}</span>
+                    </p>
+                    <!-- <p>
+                      <a-progress  :percent="item.progress" status="active" />
+                    </p> -->
+                  </div>
+                  <a v-if="item.type == 1" @click="basisDetail(item.patientBasisId)">
+                    <a-button type="primary" size="small" style="float:right;margin-top:5px ;">
+                      <my-icon type="iconxiangqing_huaban" />
+                      详情
+                    </a-button>
+                  </a>
+                  <a v-else-if="item.type == 2||item.type == 3" @click="taskDetail(item.patientBasisId)">
+                    <a-button type="primary" size="small" style="float:right;margin-top:5px ;">
+                      <my-icon type="iconxiangqing_huaban" />
+                      详情
+                    </a-button>
+                  </a>
+                  <a v-else-if="item.type == 4" @click="jxjzq(item.patientBasisId)">
+                    <a-button type="primary" size="small" style="float:right;margin-top:5px;">
+                      <my-icon type="iconxiangqing_huaban" />
+                      详情
+                    </a-button>
+                  </a>
+                </div>
+              </a-timeline-item>
+            </a-timeline>
+          </div>
+          <div v-else class="userCard">
+            <div style="text-align: center;">
+              <img src="@/assets/noData.png" alt="">
+              <p>暂无数据</p>
+            </div>
+          </div>
+        </a-tab-pane>
+      </a-tabs>
+      <div class="scores" v-if="zkScore != 0">
+        <p class="title">支扩评分</p>
+        <a-row :gutter="10">
+          <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix heighter">
+              <div class="name">BSI评分</div>
+              <div class="score">{{scoreData.BSI}}分</div>
+              <mini-area />
+            </div>
+          </a-col>
+          <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix heighter">
+              <div class="name">FACED评分</div>
+              <div class="score">{{scoreData.FACED}}分</div>
+              <mini-area />
+            </div>
+          </a-col>
+          <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix heighter">
+              <div class="name">BACI评分</div>
+              <div class="score">{{scoreData.BACI}}分</div>
+              <mini-area />
+            </div>
+          </a-col>
+          <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix heighter">
+              <div class="name">Reffi评分</div>
+              <div class="score">{{scoreData.Reiff}}分</div>
+              <mini-area />
+            </div>
+          </a-col>
+        </a-row>
+      </div>
+      <div class="scores" v-if="zkScore != 0">
+        <p class="title">问卷评分</p>
+        <a-row :gutter="10">
+          <a-col v-if="scoreData.BHQ && scoreData.BHQ.score" :sm="24" :md="scoreData.HAD.score9 ? 9 : 12" :xl="scoreData.HAD.score9 ? 6 : 8" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix">
+              <div class="name">BHQ评分</div>
+              <div class="score" style="color: mediumpurple">{{scoreData.BHQ.score}}分</div>
+              <mini-progress color="mediumpurple" :target="scoreData.BHQ.score" :percentage="scoreData.BHQ.score" height="8px" />
+            </div>
+          </a-col>
+          <a-col v-if="scoreData.MMRC && scoreData.MMRC.score" :sm="24" :md="scoreData.HAD.score9 ? 9 : 12" :xl="scoreData.HAD.score9 ? 6 : 8" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix">
+              <div class="name">MMRC评分</div>
+              <div class="score" style="color: #fd94dc">{{scoreData.MMRC.score}}分</div>
+              <mini-progress color="#fd94dc" :target="scoreData.MMRC.score / 4 * 100" :percentage="scoreData.MMRC.score / 4 * 100" height="8px" />
+            </div>
+          </a-col>
+          <a-col :sm="24" :md="scoreData.HAD.score9 ? 9 : 12" :xl="scoreData.HAD.score9 ? 6 : 8" :style="{ marginBottom: '10px' }"  v-if="scoreData.HAD && scoreData.HAD.score9">
+            <div class="block clearfix">
+              <div class="name">HADS<span v-if="scoreData.HAD.score9">-A</span>评分</div>
+              <div class="score" style="color: orange">{{scoreData.HAD.score}}分</div>
+              <mini-progress color="orange" :target="scoreData.HAD.score / 42 * 100" :percentage="scoreData.HAD.score / 42 * 100" height="8px" />
+            </div>
+          </a-col>
+          <a-col :sm="24" :md="scoreData.HAD.score9 ? 9 : 12" :xl="scoreData.HAD.score9 ? 6 : 8" :style="{ marginBottom: '10px' }"  v-if="scoreData.HAD && scoreData.HAD.score9">
+            <div class="block clearfix">
+              <div class="name">HADS-D评分</div>
+              <div class="score" style="color: #fd94dc">{{scoreData.HAD.score9}}分</div>
+              <mini-progress color="#fd94dc" :target="scoreData.HAD.score9 / 42 * 100" :percentage="scoreData.HAD.score9 / 42 * 100" height="8px" />
+            </div>
+          </a-col>
+        </a-row>
+        <a-row v-if="scoreData.LCQ">
+          <a-col :sm="24" :md="24" :xl="24" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix">
+              <div class="name">LCQ评分</div>
+              <div class="score" style="color: lightseagreen">总{{scoreData.LCQ.score}}分</div>
+              <a-row :gutter="10">
+                <a-col :sm="24" :md="12" :xl="8" :style="{ marginBottom: '10px' }">
+                  <label>生理</label>
+                  <mini-progress color="lightseagreen" :target="scoreData.LCQ.score1 / 56 * 100" :percentage="scoreData.LCQ.score1 / 56 * 100" height="8px" />
+                  <label>{{scoreData.LCQ.score1}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="8" :style="{ marginBottom: '10px' }">
+                  <label>心理</label>
+                  <mini-progress color="lightseagreen" :target="scoreData.LCQ.score2 / 49 * 100" :percentage="scoreData.LCQ.score2 / 49 * 100" height="8px" />
+                  <label>{{scoreData.LCQ.score2}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="8" :style="{ marginBottom: '10px' }">
+                  <label>社会</label>
+                  <mini-progress color="lightseagreen" :target="scoreData.LCQ.score3 / 28 * 100" :percentage="scoreData.LCQ.score3/ 28 * 100" height="8px" />
+                  <label>{{scoreData.LCQ.score3}}分</label>
+                </a-col>
+              </a-row>
+            </div>
+          </a-col>
+        </a-row>
+        <a-row v-if="scoreData.QOLB">
+          <a-col :sm="24" :md="24" :xl="24" :style="{ marginBottom: '10px' }">
+            <div class="block clearfix">
+              <div class="name">QoL-B评分</div>
+              <a-row :gutter="10">
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>身体功能性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score1" :percentage="scoreData.QOLB.score1" height="8px" />
+                  <label>{{scoreData.QOLB.score1}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>角色功能性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score2" :percentage="scoreData.QOLB.score2" height="8px" />
+                  <label>{{scoreData.QOLB.score2}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>活力性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score3" :percentage="scoreData.QOLB.score3" height="8px" />
+                  <label>{{scoreData.QOLB.score3}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>情绪功能性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score4" :percentage="scoreData.QOLB.score4" height="8px" />
+                  <label>{{scoreData.QOLB.score4}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>社会功能性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score5" :percentage="scoreData.QOLB.score5" height="8px" />
+                  <label>{{scoreData.QOLB.score5}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>医疗负担性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score6" :percentage="scoreData.QOLB.score6" height="8px" />
+                  <label>{{scoreData.QOLB.score6 || 0}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>健康感觉性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score7" :percentage="scoreData.QOLB.score7" height="8px" />
+                  <label>{{scoreData.QOLB.score7}}分</label>
+                </a-col>
+                <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '10px' }">
+                  <label>呼吸症状性维度</label>
+                  <mini-progress color="rgb(24,144,255)" :target="scoreData.QOLB.score8" :percentage="scoreData.QOLB.score8" height="8px" />
+                  <label>{{scoreData.QOLB.score8}}分</label>
+                </a-col>
+              </a-row>
+            </div>
+          </a-col>
+        </a-row>
+      </div>
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+import { getPatientDetail } from '@/api/patient'
+import UserDetail from './UserDetailTop'
+import { MyIcon } from '@/components/_util/util'
+import { ChartCard, MiniProgress, MiniArea } from '@/components';
+import moment from 'moment'
+import _ from 'lodash'
+import 'url-search-params-polyfill'
+
+export default {
+  components: {
+    UserDetail,
+    MyIcon,
+    ChartCard,
+    MiniProgress,
+    MiniArea
+  },
+  data() {
+    return {
+      patientBasisList: [],
+      visitTasks: [],
+      patient: {},
+      visible: false,
+      confirmLoading: false,
+      centered: true,
+      maskClosable: false,
+      destroyOnClose: true,
+      bodyStyle: {
+        height: '500px',
+        overflow: 'auto',
+        background: "#F8FBFC"
+      },
+      zkScore: 0,
+      scoreData: {
+        BHQ: {},
+        MMRC: {},
+        HAD: {},
+        LCQ: {},
+        QOLB: {}
+      }
+    }
+  },
+  filters: {
+    formDate(date) {
+      return moment(date).format('YYYY-MM-DD');
+    },
+    // visitStatus(value) {
+    //   const visitMap = {
+    //     '1': '忽略',
+    //     '2': '未执行',
+    //     '3': '执行中',
+    //     '4': '已完成'
+    //   };
+    //   return visitMap[value];
+    // },
+    patientBasisType(type) {
+      const patientBasisTypeMap=['','支扩基线','半年随访','年访视','急性加重期随访', '', 'ICON常规随访', '急性加重期随访', 'ICON基线']
+      return patientBasisTypeMap[type];
+    }
+  },
+  methods: {
+    show(value) {
+      this.visible = true
+      this.confirmLoading = true
+      const Params = new URLSearchParams()
+      Params.append('patientId', value.patientId)
+      getPatientDetail(Params).then(res => {
+        this.patient = res.data.patient
+        this.patientBasisList = res.data.patientBasisList
+        this.visitTasks = res.data.visitTasks
+        this.confirmLoading = false
+        this.zkScore = res.data.zkScore
+        this.scoreData = res.data
+      });
+    },
+    handleCancel() {
+      this.visible = false
+    },
+    basisDetail(id) {
+      this.visible = false
+      this.$router.push('/list/basis/' + id)
+    },
+    taskDetail(id) {
+      this.visible = false
+      this.$router.push('/list/task/' + id)
+    },
+    jxjzq(id) {
+      this.visible = false
+      this.$router.push('/jxjzq/' + id)
+    },
+    exec(type, id) {
+      this.visible = false
+      if (type === 6) {
+        this.$router.push('/icon/task/' + id)
+      } else {
+        this.$router.push('/list/task/' + id)
+      }
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+/deep/ .ant-modal-body {
+  background-color: #fdfdfd;
+}
+
+.userCard {
+  background: #ffffff;
+  padding: 20px;
+  border: 1px solid #f1f1f1;
+  padding-right: 0px;
+  overflow: auto;
+
+  #userInfo {
+    p.userInfoItem {
+      color: #000000;
+
+      span {
+        color: #888888;
+      }
+    }
+  }
+
+  .followupItem {
+    border-bottom: 1px dashed #f3f3f3;
+    padding-bottom: 10px;
+    margin-bottom: 15px;
+    padding-right: 20px;
+
+    .my-icon-huaban {
+      color: #26adfa;
+      font-size: 30px;
+      margin-right: 10px;
+      vertical-align: middle;
+    }
+
+    p {
+      display: inline-block;
+      margin: 0px;
+      margin-right: 40px;
+      color: #000000;
+
+      span {
+        color: #888888;
+      }
+    }
+  }
+
+  span.followupDate {
+    display: inline-block;
+    border: 1px solid #dddddd;
+    padding: 5px 10px;
+    font-size: 12px;
+    border-radius: 15px;
+    vertical-align: top;
+    position: relative;
+    top: -3px;
+  }
+
+  div.followupInfoItem {
+    display: inline-block;
+    width: 590px;
+    background: #F1F8FE;
+    margin-left: 20px;
+    position: relative;
+    top: -11px;
+    padding: 5px 20px;
+
+    div.followupInfoItemType {
+      display: inline-block;
+      width: 200px;
+      font-size: 12px;
+
+      p:first-child {
+        color: #000;
+        margin-bottom: 5px;
+        font-size: 14px;
+
+        span {
+          color: #F0C070;
+        }
+      }
+
+      p:nth-child(2) {
+        margin: 0;
+      }
+    }
+
+    div.followupInfoItemPro {
+      display: inline-block;
+      width: 200px;
+      vertical-align: top;
+
+      span {
+        font-size: 14px;
+        color: #000;
+      }
+
+      p {
+        //  width: 100px;
+        display: inline-block;
+        margin: 0;
+        margin-left: 10px;
+        //  /deep/ .ant-progress-inner{
+        //    background-color:#C4C4C4;
+        //  }
+      }
+    }
+  }
+
+}
+
+::-webkit-scrollbar-track-piece {
+  //滚动条凹槽的颜色,还可以设置边框属性
+  background-color: #f8f8f8;
+}
+
+::-webkit-scrollbar {
+  //滚动条的宽度
+  width: 5px;
+  height: 9px;
+}
+
+::-webkit-scrollbar-thumb {
+  //滚动条的设置
+  background-color: #dddddd;
+  background-clip: padding-box;
+  min-height: 28px;
+}
+
+::-webkit-scrollbar-thumb:hover {
+  background-color: #bbb;
+}
+.scores{
+  margin-top: 10px;
+  border-top: 2px solid #168ffd;
+  background-color: #fff;
+  padding: 10px;
+  .title{
+    color: #096dd9;
+    margin-bottom: 10px;
+  }
+  .block{
+    border: 1px solid #eee;
+    padding: 10px;
+    
+    &.heighter{
+      height: 100px;
+    }
+    .name{
+      float: left;
+    }
+    .score{
+      float: right;
+      color: #096dd9;
+      font-weight: bold;
+      &.no{
+        color: gray;
+      }
+    }
+    .chart-mini-progress{
+      clear: both;
+    }
+    .ant-row{
+      clear: both;
+      margin-top: 30px;
+      .chart-mini-progress{
+        clear: none;
+        float: left;
+        width: 56%;
+        margin: 0 10px;
+      }
+      label{
+        float: left;
+        font-size: 12px;
+      }
+    }
+    /deep/.antv-chart-mini .chart-wrapper{
+      bottom: -100px!important;
+    }
+  }
+  
+}
+</style>
\ No newline at end of file
diff --git a/src/views/list/modules/UserDetailTop.vue b/src/views/list/modules/UserDetailTop.vue
new file mode 100644
index 0000000000..f8013bee66
--- /dev/null
+++ b/src/views/list/modules/UserDetailTop.vue
@@ -0,0 +1,189 @@
+<template>
+  <div class="userDetail" :option="option">
+    <div class="userDetailTop">
+      <img src="../../../assets/woman.png" alt="" v-if="option.sex == 0" />
+      <img src="../../../assets/man.png" alt="" v-else />
+      <div class="userDetailInfo">
+        <h4>
+          {{ option.name }}
+          <span class="userDetailCard">{{ option.card }}</span>
+        </h4>
+        <p>
+          <span class="userDetailAge" :class="option.sex == 0 ? 'womenBg' : ''">
+            <a-icon :type="option.sex == 1 ? 'man':'woman'" />
+            {{getAge}}岁
+          </span>
+          <span class="tl" v-if="option.isTl">{{option.isTl}}</span>
+          <span class="userDetailNation">{{option.nationName}}</span>
+        </p>
+      </div>
+    </div>
+    <div class="userDetailContent">
+      <p class="userDetailItem">
+        <span class="userDetailItemTitle">患者编号</span>
+        <span class="userDetailItemInfo"> {{option.code}}</span>
+      </p>
+      <p class="userDetailItem">
+        <span class="userDetailItemTitle">联系电话</span>
+        <span class="userDetailItemInfo">{{option.telephone1}}</span>
+      </p>
+      <p class="userDetailItem">
+        <span class="userDetailItemTitle">出生日期</span>
+        <span class="userDetailItemInfo">{{birthDay}}</span>
+      </p>
+      <p class="userDetailItem">
+        <span class="userDetailItemTitle">居住地</span>
+        <span class="userDetailItemInfo">{{option.addressDetail}}</span>
+      </p>
+    </div>
+  </div>
+</template>
+
+<script>
+import _ from 'lodash'
+export default {
+  data() {
+    return {};
+  },
+  props: {
+    option: {
+      type: Object,
+      default: {}
+    }
+  },
+  mounted() {},
+  methods: {},
+  computed: {
+    birthDay() {
+      if (_.isEmpty(this.option)) {
+        return ''
+      }
+      let card = this.option.card;
+      let birthDay = ''
+      if (card.length == 15) {
+        birthDay = card.substr(6, 6).replace(/(.{4})(.{2})/, "$1-$2-")
+      } else if (card.length == 18) {
+        birthDay = card.substr(6, 8).replace(/(.{4})(.{2})/, "$1-$2-")
+      }
+      return birthDay
+    },
+    getAge() {
+      if(_.isEmpty(this.option)){
+        return ''
+      }
+      var identityCard = this.option.card;
+      var len = (identityCard + '').length;
+      if (len == 0) {
+        return 0;
+      } else {
+        if (len != 15 && len != 18) {
+          //身份证号码只能为15位或18位其它不合法
+          return 0;
+        }
+      }
+      var strBirthday = '';
+      if (len == 18) {
+        //处理18位的身份证号码从号码中得到生日和性别代码
+        strBirthday = identityCard.substr(6, 4) + '/' + identityCard.substr(10, 2) + '/' + identityCard.substr(12, 2);
+      }
+      if (len == 15) {
+        strBirthday = '19' + identityCard.substr(6, 2) + '/' + identityCard.substr(8, 2) + '/' + identityCard.substr(10, 2);
+      }
+      //时间字符串里,必须是“/”
+      var birthDate = new Date(strBirthday);
+      var nowDateTime = new Date();
+      var age = nowDateTime.getFullYear() - birthDate.getFullYear();
+      //再考虑月、天的因素;.getMonth()获取的是从0开始的,这里进行比较,不需要加1
+      if (nowDateTime.getMonth() < birthDate.getMonth() || (nowDateTime.getMonth() == birthDate.getMonth() && nowDateTime.getDate() < birthDate.getDate())) {
+        age--;
+      }
+      return age;
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.userDetail {
+  border: 1px solid #f8f8f8;
+  border-top: 4px solid #168ffd;
+  padding: 15px 25px;
+  background-color: #ffffff;
+
+  .userDetailTop {
+    img {
+      display: inline-block;
+      vertical-align: top;
+      width: 60px;
+      height: 60px;
+    }
+
+    .userDetailInfo {
+      display: inline-block;
+      padding-top: 5px;
+      padding-left: 15px;
+
+      h4 {
+        font-size: 18px;
+        margin-bottom: 0px;
+
+        span {
+          font-weight: normal;
+          font-size: 17px;
+          margin-left: 10px;
+          display: inline-block;
+        }
+      }
+
+      p {
+        .womenBg {
+          background-color: #fd94dc !important;
+        }
+
+        .userDetailAge {
+          display: inline-block;
+          background-color: #96dcfd;
+          color: #ffffff;
+          padding: 0px 10px;
+          border-radius: 3px;
+
+          .anticon {
+            margin-right: 5px;
+          }
+        }
+        .tl {
+          background: #ff4856;
+          border-radius: 3px;
+          padding: 0 10px;
+          margin-left: 10px;
+          color: #fff;
+        }
+
+        .userDetailNation {
+          display: inline-block;
+          background-color: #e8e8e8;
+          padding: 0px 10px;
+          border-radius: 3px;
+          margin-left: 10px;
+        }
+      }
+    }
+  }
+
+  .userDetailContent {
+    margin-top: 20px;
+    overflow: hidden;
+
+    .userDetailItem {
+      display: inline-block;
+      width: 20%;
+      color: #000000;
+      vertical-align: top;
+
+      .userDetailItemTitle {
+        display: block;
+        color: #a9a9a9;
+      }
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/list/modules/Visit.vue b/src/views/list/modules/Visit.vue
new file mode 100644
index 0000000000..4f88dddfaa
--- /dev/null
+++ b/src/views/list/modules/Visit.vue
@@ -0,0 +1,150 @@
+<template>
+  <a-popover trigger="click" v-model="visible" v-if="show">
+    <div class="visitInfo" slot="content">
+      <a-timeline>
+        <div v-for="(item, index) in list">
+          <a-timeline-item v-for="(v, i) in item">
+            <div slot="dot" v-if="i==0">
+              <div class="visitContent">
+                <span class="visitYear">
+                  <a-icon type="file-text" /></span>
+                <span class="visitYearText">{{v.gyYear}}年</span>
+              </div>
+            </div>
+            <div class="visiItem" @click="jump(v)">
+              <p class="visiItemTitle">
+                <span class="visiItemName">{{v.typeName}}</span>
+                <span class="visiItemTime">
+                  <a-icon type="clock-circle" />
+                  {{v.createDate | moment('YYYY-MM-DD')}}
+                </span>
+              </p>
+              <div class="visiItemPro">
+                <a-progress :percent="parseInt(v.progress)" :showInfo="false" />
+              </div>
+            </div>
+          </a-timeline-item>
+        </div>
+      </a-timeline>
+    </div>
+    <span class="more">更多</span>
+  </a-popover>
+</template>
+<script>
+import { getSFDataList } from '@/api/patient'
+import moment from 'moment'
+import _ from 'lodash'
+
+export default {
+  data() {
+    return {
+      visible: false,
+      list: []
+    }
+  },
+  computed: {
+    show() {
+      return !_.isEmpty(this.list)
+    }
+  },
+  props: {
+    patientId: {
+      type: Number
+    }
+  },
+  created() {
+    var that = this
+    var param = new URLSearchParams()
+    param.append('patientId', this.patientId)
+    getSFDataList(param)
+      .then(res => {
+        if (!_.isEmpty(res.data)) {
+          that.list = res.data
+        } else {
+          that.visible = false
+        }
+      })
+  },
+  methods: {
+    moment,
+    hide() {
+      this.visible = false
+    },
+    jump(v) {
+      this.visible = false
+      if (v.type === 3) {
+        this.$router.push('/list/task/' + v.patientBasisId)
+      } else if (v.type === 4) {
+        this.$router.push('/jxjzq/' + v.patientBasisId)
+      } else if (v.type === 2) {
+        this.$router.push('/list/task/' + v.patientBasisId + '/11')
+      }
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.visitInfo {
+  padding: 20px;
+  padding-bottom: 0px;
+  padding-top: 40px;
+  height: 200px;
+  overflow: auto;
+}
+
+.visitContent {
+  .visitYear {
+    display: block;
+    background: #cbe5f7;
+    border-radius: 50%;
+    font-size: 14px;
+    color: #54bde7;
+    height: 25px;
+    width: 25px;
+    text-align: center;
+    line-height: 25px;
+    position: relative;
+    left: 5px;
+  }
+
+  .visitYearText {
+    display: block;
+    font-size: 12px;
+  }
+}
+
+.visiItem {
+  height: 50px;
+  width: 194px;
+  padding: 5px;
+  border: 1px solid #dddddd;
+  margin-left: 10px;
+  position: relative;
+  top: -15px;
+  cursor: pointer;
+
+  .visiItemTitle {
+    margin: 0;
+    overflow: hidden;
+
+    .visiItemName {
+      font-size: 12px;
+    }
+
+    .visiItemTime {
+      font-size: 12px;
+      float: right;
+      color: #9dadb3;
+    }
+  }
+}
+
+.more {
+  color: #1890ff;
+  cursor: pointer;
+
+  &:hover {
+    text-decoration: underline;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/list/table/Edit.vue b/src/views/list/table/Edit.vue
index 74b169524d..c8a1b51164 100644
--- a/src/views/list/table/Edit.vue
+++ b/src/views/list/table/Edit.vue
@@ -131,8 +131,8 @@ export default {
       this.$emit('onGoBack')
     },
     handleSubmit () {
-      const { form: { validateFields } } = this
-      validateFields((err, values) => {
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((err, values) => {
         if (!err) {
           // eslint-disable-next-line no-console
           console.log('Received values of form: ', values)
diff --git a/src/views/list/table/List.vue b/src/views/list/table/List.vue
index 8e5da0bce0..cfbe78ec4c 100644
--- a/src/views/list/table/List.vue
+++ b/src/views/list/table/List.vue
@@ -20,7 +20,7 @@
           <template v-if="advanced">
             <a-col :md="8" :sm="24">
               <a-form-item label="调用次数">
-                <a-input-number v-model="queryParam.callNo" style="width: 100%"/>
+                <a-input-number v-model.trim="queryParam.callNo" style="width: 100%"/>
               </a-form-item>
             </a-col>
             <a-col :md="8" :sm="24">
diff --git a/src/views/message/base.vue b/src/views/message/base.vue
new file mode 100644
index 0000000000..de91127745
--- /dev/null
+++ b/src/views/message/base.vue
@@ -0,0 +1,359 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索标题" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch2(1)">待阅读消息</p>
+                    <p @click="tableSearch2(2)">已阅读消息</p>
+                    <p @click="tableSearch1(0)">待发布消息</p>
+                    <p @click="tableSearch1(1)">已发布消息</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="标题">
+                        <a-input v-model.trim="queryParam.title" />
+                      </a-form-item>
+                      <a-form-item label="发布人">
+                        <a-input v-model.trim="queryParam.publisher" />
+                      </a-form-item>
+                      <a-form-item label="发布时间" style="margin-bottom:0;">
+                        <a-range-picker @change="changeTime" style="width: 100%" :value="dateArr" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right; margin-bottom: 0; margin-top: 15px">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+          <a-col :md="11" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="$refs.createModal.add()">新建</a-button>
+          </a-col>
+          <a-col :md="1" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="$refs.table.refresh()">刷新</a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table
+      class="table-fix"
+      ref="table"
+      :scroll="scroll"
+      size="small"
+      rowKey="wxPatientId"
+      :columns="columns"
+      :data="loadData"
+      :alert="options.alert"
+      :rowSelection="options.rowSelection"
+    >
+      <template slot="overFlow" slot-scope="text, record">
+        <div style="overflow: hidden; white-space: nowrap; text-overflow: ellipsis;max-width: 600px">
+          {{ record.content }}
+        </div>
+      </template>
+      <span slot="status" slot-scope="text">{{ text | statusFilter}}</span>
+      <span slot="operation" slot-scope="text, record">
+        <template v-if="record.isCreator == 1">
+          <a style="margin-right: 5px" v-if="record.status == 0? true : (record.status == 2? true : false)" @click="addorEditMessage(record)">编辑</a>
+          <a style="margin-right: 5px" v-if="record.status == 1? false : true" @click="handleReview(record)">发布</a>
+          <a style="margin-right: 5px" v-if="record.isCreator == 1? (record.status == 1? true : false) : false" @click="withdraw(record)">撤回</a>
+          <a style="margin-right: 5px" @click="newsDetailView(record)">详情</a>
+          <a style="margin-right: 5px" v-if="record.status == 0? true : (record.status == 2? true : false)" @click="del(record)">删除</a>
+        </template>
+        <template v-if="record.isCreator == 0">
+          <a style="margin-right: 5px" @click="newsDetailView(record)">详情</a>
+        </template>
+      </span>
+    </s-table>
+    <created-form ref="createModal" @ok="handleOk"></created-form>
+    <news-detail ref="newsDetail" @ok="handleOk"></news-detail>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { STable } from '@/components'
+import { getMessageList, withdrawData, publishData, deleteData } from '@/api/message'
+import CreatedForm from './component/createdForm.vue'
+import NewsDetail from './component/newsDetail.vue'
+import $ from 'jquery'
+export default {
+  name: 'base',
+  components: {
+    STable,
+    CreatedForm,
+    NewsDetail
+  },
+  data () {
+    return {
+      dateArr: [],
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {
+        type: 1
+      },
+      scroll: false,
+      dataEchoInfo: {},
+      loadData: (parameter) => {
+        return getMessageList(Object.assign(parameter, this.queryParam)).then((res) => {
+          return res
+        })
+      },
+      form: this.$form.createForm(this),
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      columns: [
+        {
+          title: '发布标题',
+          dataIndex: 'title',
+          width: '120px'
+        },
+        {
+          title: '发布时间',
+          dataIndex: 'updatedDate',
+          width: '80px',
+          customRender: (updatedDate) => (updatedDate) ? moment(updatedDate).format('YYYY-MM-DD') : ''
+        },
+        {
+          title: '发布人',
+          dataIndex: 'publisher',
+          width: '100px'
+        },
+        {
+          title: '消息来源',
+          dataIndex: 'typeName',
+          width: '100px'
+        },
+        {
+          title: '阅读状态',
+          dataIndex: 'readStatusName',
+          width: '100px'
+        },
+        {
+          title: '消息内容',
+          dataIndex: 'content',
+          width: '600px',
+          // render: text => <div dataIndex={text}>{text}</div>
+          //   ellipsis: true
+          scopedSlots: { customRender: 'overFlow' }
+        },
+        {
+          title: '操作',
+          dataIndex: 'operation',
+          scopedSlots: { customRender: 'operation' },
+          width: '160px'
+        }
+      ]
+    }
+  },
+  created () {
+    this.scroll = {
+      y: window.screen.height - 368 + 'px'
+    }
+  },
+  mounted () {
+    var that = this
+    $(document).on('click', function (e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if (
+        $(e.target).closest('.tableSearch').length === 0 &&
+        $(e.target).closest('.ant-calendar').length === 0 &&
+        $(e.target).closest('.ant-calendar-year-panel-table').length === 0 &&
+        $(e.target).closest('.ant-calendar-month-panel-table').length === 0
+      ) {
+        that.advanced = false
+      }
+    })
+  },
+  filters: {
+    statusFilter (status) {
+      if (status === 0) {
+        return '未阅'
+      } else {
+        return '已阅'
+      }
+    }
+  },
+  methods: {
+    onSelectChange (selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    },
+    handleOk () {
+      this.$refs.table.refresh()
+    },
+    clearForm () {
+      this.queryParam = {
+        type: 1
+      }
+      this.dateArr = []
+    },
+    tableSearch (type) {
+      this.queryParam.queryType = type
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    tableSearch1 (status) {
+      this.queryParam.status = status
+      delete this.queryParam.readStatus
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    tableSearch2 (readStatus) {
+      this.queryParam.readStatus = readStatus
+      delete this.queryParam.status
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    refreshTable () {
+      this.advanced = false
+      this.$refs.table.refresh()
+    },
+    changeTime (time) {
+      this.dateArr = time
+      this.queryParam.publishTimeStart = moment(time[0]).format('YYYY-MM-DD 00:00:00')
+      this.queryParam.publishTimeEnd = moment(time[1]).format('YYYY-MM-DD 23:59:59')
+    },
+    // 编辑
+    addorEditMessage (record) {
+      this.$refs.createModal.edit(record)
+    },
+    newsDetailView (record) {
+      this.$refs.newsDetail.show(record)
+    },
+    // 发布
+    async handleReview (recode) {
+      const that = this
+      this.$confirm({
+        title: '是否要发布这条消息?',
+        onOk () {
+          publishData(recode.announcementId).then(res => {
+            if (res.code === 0) {
+              that.$message.success('发布成功')
+              that.$refs.table.refresh()
+            } else {
+              that.$message.error(res.msg)
+            }
+          })
+        },
+        onCancel () {}
+      })
+    },
+    // 撤回
+    withdraw (record) {
+      const that = this
+      this.$confirm({
+        title: '是否要撤回这条消息?',
+        onOk () {
+          withdrawData(record.announcementId).then(res => {
+            if (res && res.code === 0) {
+              that.$message.success('撤回成功')
+              that.$refs.table.refresh()
+            } else {
+              that.$message.error(res && res.msg)
+            }
+          })
+        },
+        onCancel () {}
+      })
+    },
+    // 删除
+    del (record) {
+      const that = this
+      this.$confirm({
+        title: '是否要删除这条消息?',
+        onOk () {
+          deleteData(record.announcementId).then(res => {
+            if (res.code === 0) {
+              that.$message.success('删除成功')
+              that.$refs.table.refresh()
+            } else {
+              that.$message.error(res && res.msg)
+            }
+          })
+        },
+        onCancel () {}
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+.table-fix {
+  table-layout:fixed;
+}
+.ant-table-tbody > tr > td {
+    max-height: 40px;
+    overflow:hidden;
+    white-space:nowrap;
+    text-overflow:ellipsis;
+    cursor: pointer;
+}
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item > .ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+</style>
diff --git a/src/views/message/branch.vue b/src/views/message/branch.vue
new file mode 100644
index 0000000000..c65fef2d03
--- /dev/null
+++ b/src/views/message/branch.vue
@@ -0,0 +1,359 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索标题" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch2(1)">待阅读消息</p>
+                    <p @click="tableSearch2(2)">已阅读消息</p>
+                    <p @click="tableSearch1(0)">待发布消息</p>
+                    <p @click="tableSearch1(1)">已发布消息</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="标题">
+                        <a-input v-model.trim="queryParam.title" />
+                      </a-form-item>
+                      <a-form-item label="发布人">
+                        <a-input v-model.trim="queryParam.publisher" />
+                      </a-form-item>
+                      <a-form-item label="发布时间" style="margin-bottom:0;">
+                        <a-range-picker @change="changeTime" style="width: 100%" :value="dateArr" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right; margin-bottom: 0; margin-top: 15px">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+          <a-col :md="11" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="$refs.createModal.add()">新建</a-button>
+          </a-col>
+          <a-col :md="1" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="$refs.table.refresh()">刷新</a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table
+      class="table-fix"
+      ref="table"
+      :scroll="scroll"
+      size="small"
+      rowKey="wxPatientId"
+      :columns="columns"
+      :data="loadData"
+      :alert="options.alert"
+      :rowSelection="options.rowSelection"
+    >
+      <template slot="overFlow" slot-scope="text, record">
+        <div style="overflow: hidden; white-space: nowrap; text-overflow: ellipsis;max-width: 600px">
+          {{ record.content }}
+        </div>
+      </template>
+      <span slot="status" slot-scope="text">{{ text | statusFilter}}</span>
+      <span slot="operation" slot-scope="text, record">
+        <template v-if="record.isCreator == 1">
+          <a style="margin-right: 5px" v-if="record.status == 0? true : (record.status == 2? true : false)" @click="addorEditMessage(record)">编辑</a>
+          <a style="margin-right: 5px" v-if="record.status == 1? false : true" @click="handleReview(record)">发布</a>
+          <a style="margin-right: 5px" v-if="record.isCreator == 1? (record.status == 1? true : false) : false" @click="withdraw(record)">撤回</a>
+          <a style="margin-right: 5px" @click="newsDetailView(record)">详情</a>
+          <a style="margin-right: 5px" v-if="record.status == 0? true : (record.status == 2? true : false)" @click="del(record)">删除</a>
+        </template>
+        <template v-if="record.isCreator == 0">
+          <a style="margin-right: 5px" @click="newsDetailView(record)">详情</a>
+        </template>
+      </span>
+    </s-table>
+    <created-form ref="createModal" @ok="handleOk"></created-form>
+    <news-detail ref="newsDetail" @ok="handleOk"></news-detail>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { STable } from '@/components'
+import { getMessageList, withdrawData, publishData, deleteData } from '@/api/message'
+import CreatedForm from './component/createdForm.vue'
+import NewsDetail from './component/newsDetail.vue'
+import $ from 'jquery'
+export default {
+  name: 'branch',
+  components: {
+    STable,
+    CreatedForm,
+    NewsDetail
+  },
+  data () {
+    return {
+      dateArr: [],
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {
+        type: 2
+      },
+      scroll: false,
+      dataEchoInfo: {},
+      loadData: (parameter) => {
+        return getMessageList(Object.assign(parameter, this.queryParam)).then((res) => {
+          return res
+        })
+      },
+      form: this.$form.createForm(this),
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      columns: [
+        {
+          title: '发布标题',
+          dataIndex: 'title',
+          width: '120px'
+        },
+        {
+          title: '发布时间',
+          dataIndex: 'updatedDate',
+          width: '80px',
+          customRender: (updatedDate) => (updatedDate) ? moment(updatedDate).format('YYYY-MM-DD') : ''
+        },
+        {
+          title: '发布人',
+          dataIndex: 'publisher',
+          width: '100px'
+        },
+        {
+          title: '消息来源',
+          dataIndex: 'typeName',
+          width: '100px'
+        },
+        {
+          title: '阅读状态',
+          dataIndex: 'readStatusName',
+          width: '100px'
+        },
+        {
+          title: '消息内容',
+          dataIndex: 'content',
+          width: '600px',
+          // render: text => <div dataIndex={text}>{text}</div>
+          //   ellipsis: true
+          scopedSlots: { customRender: 'overFlow' }
+        },
+        {
+          title: '操作',
+          dataIndex: 'operation',
+          scopedSlots: { customRender: 'operation' },
+          width: '160px'
+        }
+      ]
+    }
+  },
+  created () {
+    this.scroll = {
+      y: window.screen.height - 368 + 'px'
+    }
+  },
+  mounted () {
+    var that = this
+    $(document).on('click', function (e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if (
+        $(e.target).closest('.tableSearch').length === 0 &&
+        $(e.target).closest('.ant-calendar').length === 0 &&
+        $(e.target).closest('.ant-calendar-year-panel-table').length === 0 &&
+        $(e.target).closest('.ant-calendar-month-panel-table').length === 0
+      ) {
+        that.advanced = false
+      }
+    })
+  },
+  filters: {
+    statusFilter (status) {
+      if (status === 0) {
+        return '未阅'
+      } else {
+        return '已阅'
+      }
+    }
+  },
+  methods: {
+    onSelectChange (selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    },
+    handleOk () {
+      this.$refs.table.refresh()
+    },
+    clearForm () {
+      this.queryParam = {
+        type: 2
+      }
+      this.dateArr = []
+    },
+    tableSearch (type) {
+      this.queryParam.queryType = type
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    tableSearch1 (status) {
+      this.queryParam.status = status
+      delete this.queryParam.readStatus
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    tableSearch2 (readStatus) {
+      this.queryParam.readStatus = readStatus
+      delete this.queryParam.status
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    refreshTable () {
+      this.advanced = false
+      this.$refs.table.refresh()
+    },
+    changeTime (time) {
+      this.dateArr = time
+      this.queryParam.publishTimeStart = moment(time[0]).format('YYYY-MM-DD 00:00:00')
+      this.queryParam.publishTimeEnd = moment(time[1]).format('YYYY-MM-DD 23:59:59')
+    },
+    // 编辑
+    addorEditMessage (record) {
+      this.$refs.createModal.edit(record)
+    },
+    newsDetailView (record) {
+      this.$refs.newsDetail.show(record)
+    },
+    // 发布
+    async handleReview (recode) {
+      const that = this
+      this.$confirm({
+        title: '是否要发布这条消息?',
+        onOk () {
+          publishData(recode.announcementId).then(res => {
+            if (res.code === 0) {
+              that.$message.success('发布成功')
+              that.$refs.table.refresh()
+            } else {
+              that.$message.error(res.msg)
+            }
+          })
+        },
+        onCancel () {}
+      })
+    },
+    // 撤回
+    withdraw (record) {
+      const that = this
+      this.$confirm({
+        title: '是否要撤回这条消息?',
+        onOk () {
+          withdrawData(record.announcementId).then(res => {
+            if (res && res.code === 0) {
+              that.$message.success('撤回成功')
+              that.$refs.table.refresh()
+            } else {
+              that.$message.error(res && res.msg)
+            }
+          })
+        },
+        onCancel () {}
+      })
+    },
+    // 删除
+    del (record) {
+      const that = this
+      this.$confirm({
+        title: '是否要删除这条消息?',
+        onOk () {
+          deleteData(record.announcementId).then(res => {
+            if (res.code === 0) {
+              that.$message.success('删除成功')
+              that.$refs.table.refresh()
+            } else {
+              that.$message.error(res && res.msg)
+            }
+          })
+        },
+        onCancel () {}
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+.table-fix {
+  table-layout:fixed;
+}
+.ant-table-tbody > tr > td {
+    max-height: 40px;
+    overflow:hidden;
+    white-space:nowrap;
+    text-overflow:ellipsis;
+    cursor: pointer;
+}
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item > .ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+</style>
diff --git a/src/views/message/component/createdForm.vue b/src/views/message/component/createdForm.vue
new file mode 100644
index 0000000000..bb4bc7d307
--- /dev/null
+++ b/src/views/message/component/createdForm.vue
@@ -0,0 +1,127 @@
+<template>
+  <a-modal
+    :title="options.title"
+    :width="800"
+    :bodyStyle="bodyStyle"
+    :maskClosable="maskClosable"
+    :destroyOnClose="destroyOnClose"
+    :centered="centered"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleSubmit"
+    @cancel="handleCancel"
+  >
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item label="标题" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input placeholder="请输入标题" v-decorator="['title', isIdCardNo]" />
+        </a-form-item>
+        <a-form-item label="发送内容" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input type="textarea" rows="6" v-decorator="['content', requiredRule]" />
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+import { saveOrUpdateData } from '@/api/message'
+export default {
+  data () {
+    return {
+      options: {},
+      residences: [],
+      nationList: [],
+      professionList: [],
+      censusList: [],
+      baseUrl: process.env.VUE_APP_API_BASE_URL,
+      maskClosable: false,
+      payTypeList: [],
+      isShowPat: false,
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 3 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 20 }
+      },
+      visible: false,
+      confirmLoading: false,
+      centered: true,
+      destroyOnClose: true,
+      bodyStyle: {
+        height: '300px',
+        overflow: 'auto'
+      },
+      form: this.$form.createForm(this),
+      requiredRule: { rules: [{ required: true, message: '该选项必填!' }] },
+      isIdCardNo: { rules: [{ required: true, message: '该选项必填!' }] },
+      announcementId: ''
+    }
+  },
+  created () {},
+  methods: {
+    add () {
+      this.options.title = '新建消息'
+      this.announcementId = ''
+      this.visible = true
+    },
+    edit (value) {
+      this.options.title = '编辑消息'
+      this.announcementId = value.announcementId
+      setTimeout(() => {
+        this.form.setFieldsValue({
+          title: value.title,
+          content: value.content
+        })
+      }, 0)
+      this.visible = true
+    },
+    handleSubmit () {
+      if (!this.confirmLoading) {
+        this.confirmLoading = true
+        this.form.validateFieldsAndScroll((errors, fieldsValue) => {
+          const that = this
+          if (errors) {
+            this.confirmLoading = false
+            return
+          }
+          const values = {
+            ...fieldsValue,
+            announcementId: this.announcementId
+          }
+          saveOrUpdateData(values).then((res) => {
+            that.visible = false
+            that.confirmLoading = false
+            that.$message.success(res.msg)
+            that.$emit('ok', values)
+          })
+        })
+      }
+    },
+    handleCancel () {
+      this.visible = false
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/ .ant-form-item:last-child {
+  margin-bottom: 0;
+}
+
+/deep/ .aaa .ant-form-item-label {
+  position: relative;
+  left: -18px;
+}
+
+.aaa .ant-form-item-children > i {
+  position: absolute !important;
+  left: -22px !important;
+  top: 4px;
+}
+input,
+textarea {
+    outline: none;
+}
+</style>
diff --git a/src/views/message/component/newsDetail.vue b/src/views/message/component/newsDetail.vue
new file mode 100644
index 0000000000..209ba4359c
--- /dev/null
+++ b/src/views/message/component/newsDetail.vue
@@ -0,0 +1,152 @@
+<template>
+  <a-modal
+    title="消息详情"
+    :width="600"
+    :bodyStyle="bodyStyle"
+    :maskClosable="maskClosable"
+    :destroyOnClose="destroyOnClose"
+    :centered="centered"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    :footer="null"
+    @cancel="handleCancel"
+  >
+    <a-spin :spinning="confirmLoading">
+      <!-- <a-form :form="form">
+        <a-form-item label="标题" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input placeholder="请输入标题" v-decorator="['title', isIdCardNo]" />
+        </a-form-item>
+        <a-form-item label="发送内容" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input type="textarea" rows="6" v-decorator="['content', requiredRule]" />
+        </a-form-item>
+      </a-form> -->
+      <!-- publish.isCreator == 1? (publish.stauts == 1? false : (publish.unReadCount == 0? '已阅读' : '待阅读') ) : publish.unReadCount -->
+      <div class="sdd">
+        <span v-if="publish.updatedDate">发布时间: <span>{{ publish.updatedDate | formDate }}</span></span>
+        <span v-if="publish.publisher">发布人: <span>{{ publish.publisher }}</span></span>
+        <span v-if="publish.isCreator == 1" class="publishStatus">
+          <span v-if="publish.status == 1 && publish.unReadCount > 0" style="margin-right: 5px">待阅读: {{publish.unReadCount}}人</span>
+          <span v-if="publish.status == 1 && publish.unReadCount == 0">全部阅读</span>
+          <span v-if="publish.status != 1">未发布</span>
+        </span>
+      </div>
+      <div class="cdd">
+        <p>{{ publish.content }}</p>
+      </div>
+      <div class="ndd">
+        <a-button v-if="publish.isCreator != 1" :disabled="status == 2? true : false" type="primary" @click="readStatusBtn()">{{ status == 2? '已阅读' : '确认' }}</a-button>
+      </div>
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+import { detailData, isReadDetail } from '@/api/message'
+import { getUnReadAnnouncement } from '@/api/basis'
+import moment from 'moment'
+export default {
+  data () {
+    return {
+      publish: [],
+      status: undefined,
+      announcementId: undefined,
+      maskClosable: false,
+      payTypeList: [],
+      isShowPat: false,
+      visible: false,
+      confirmLoading: false,
+      centered: true,
+      destroyOnClose: true,
+      bodyStyle: {
+        height: '300px',
+        overflow: 'auto'
+      },
+      form: this.$form.createForm(this)
+    }
+  },
+  created () {},
+  filters: {
+    formDate (date) {
+      return moment(date).format('YYYY-MM-DD')
+    }
+  },
+  methods: {
+    show (value) {
+      this.visible = true
+      this.confirmLoading = true
+      detailData(value.announcementId).then(res => {
+        this.publish = res.data
+        this.status = res.data.readStatus
+        this.announcementId = res.data.announcementId
+        this.confirmLoading = false
+      })
+    },
+    async readStatusBtn () {
+      var that = this
+      if (this.status == 1) {
+        this.status = 2
+        const res = await isReadDetail(this.announcementId)
+        that.$message.success(res.msg)
+        const { data } = await getUnReadAnnouncement()
+        this.$store.commit('TOGGLE_MESSAGE_NUM', data.length || '')
+      }
+    },
+    handleCancel () {
+      this.visible = false
+      this.$emit('ok')
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/ .ant-form-item:last-child {
+  margin-bottom: 0;
+}
+.sdd {
+    position: relative;
+    font-size: 16px;
+    color: #000;
+    height: 50px;
+    border-bottom: 1px solid #cfcfcf;
+}
+.sdd span {
+    margin-right: 30px;
+}
+.cdd {
+    margin-top: 20px;
+}
+.ndd {
+    text-align: right;
+    margin-top: 40px;
+}
+.publishStatus {
+    position: absolute;
+    top: 0;
+    right: 0;
+    font-size: 14px;
+    color: #999;
+}
+.btn {
+    background: #409eff;
+    border: unset;
+    color: #fff;
+    padding: 5px;
+    border-radius: 5px;
+}
+.btn-disabled {
+    background: #909399;
+    border: unset;
+    color: #fff;
+    padding: 5px;
+    border-radius: 5px;
+}
+/deep/ .aaa .ant-form-item-label {
+  position: relative;
+  left: -18px;
+}
+
+.aaa .ant-form-item-children > i {
+  position: absolute !important;
+  left: -22px !important;
+  top: 4px;
+}
+</style>
diff --git a/src/views/other/modules/OrgModal.vue b/src/views/other/modules/OrgModal.vue
index d83955c76c..bb291e7375 100644
--- a/src/views/other/modules/OrgModal.vue
+++ b/src/views/other/modules/OrgModal.vue
@@ -69,7 +69,7 @@ export default {
     handleOk () {
       const _this = this
       // 触发表单验证
-      this.form.validateFields((err, values) => {
+      this.form.validateFieldsAndScroll((err, values) => {
         // 验证表单没错误
         if (!err) {
           console.log('form values', values)
diff --git a/src/views/other/modules/RoleModal.vue b/src/views/other/modules/RoleModal.vue
index 37bcd2a71f..0c6973bd74 100644
--- a/src/views/other/modules/RoleModal.vue
+++ b/src/views/other/modules/RoleModal.vue
@@ -82,7 +82,7 @@ export default {
     handleOk () {
       const _this = this
       // 触发表单验证
-      this.form.validateFields((err, values) => {
+      this.form.validateFieldsAndScroll((err, values) => {
         // 验证表单没错误
         if (!err) {
           console.log('form values', values)
diff --git a/src/views/patient/list.vue b/src/views/patient/list.vue
new file mode 100644
index 0000000000..b3d56dc3c3
--- /dev/null
+++ b/src/views/patient/list.vue
@@ -0,0 +1,380 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form :form="form" layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索患者姓名、身份证号" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="toggleAdvanced" style="margin-left: 8px" class="toggleAdvanced">
+                {{ advanced ? '更多筛选' : '更多筛选' }}
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="自定义检索" key="1" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="是否ICON">
+                        <a-radio-group v-model="queryParam.isIcon">
+                          <a-radio value="-1">否</a-radio>
+                          <a-radio value="1">是</a-radio>
+                        </a-radio-group>
+                      </a-form-item>
+                      <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+          <a-col :md="13" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="$refs.createModal.add()">新建</a-button>
+            <!-- <a-button type="primary" style="margin-left: 10px;">导出</a-button> -->
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" size="small" :scroll="{ x: 1000 }" rowKey="patientBasisId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <template slot="name" slot-scope="text, record">
+        <a @click="showUser(record)">{{modifyName(text)}}</a>
+      </template>
+      <span slot="visit" slot-scope="text">
+        <a-badge :status="text | visitTypeFilter" :text="text | visitFilter" /></span>
+      <span slot="action" slot-scope="text, record" style="text-align: center;">
+        <template>
+          <div v-if="record.targetCenterId === centerId">
+            <a @click="exec(record)">编辑</a>
+          </div>
+        </template>
+      </span>
+    </s-table>
+    <user-detail ref="detailModal" />
+    <create-form ref="createModal" @ok="handleOk" />
+  </a-card>
+</template>
+<script>
+import moment from 'moment';
+import { STable, Ellipsis } from '@/components'
+import UserDetail from '@/views/list/modules/UserDetail'
+import { getPatientDataList, deletePatient } from '@/api/patient'
+import CreateForm from '@/views/list/modules/CreateForm'
+import $ from 'jquery'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+
+const visitMap = {
+  0: {
+    status: 'default',
+    text: '死亡'
+  },
+  1: {
+    status: 'processing',
+    text: '跟踪'
+  },
+  2: {
+    status: 'success',
+    text: '完成'
+  },
+  3: {
+    status: 'error',
+    text: '失访'
+  },
+  4: {
+    status: "warning",
+    text: "警告"
+  }
+};
+
+export default {
+  name: 'patientList',
+  components: {
+    STable,
+    Ellipsis,
+    UserDetail,
+    CreateForm
+  },
+  data() {
+    return {
+      dateArr: [],
+      centerId: this.$ls.get(ACCESS_TOKEN).centerId,
+      mdl: {},
+      bodyStyle: {
+        padding: "10px",
+        paddingBottom: "0px"
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      // 查询参数
+      queryParam: {},
+      // 表头
+      columns: [{
+          title: '入组编号',
+          width: 100,
+          dataIndex: 'fileCode'
+        },
+        {
+          title: '访视状态',
+          dataIndex: 'visit',
+          width: 120,
+          scopedSlots: {
+            customRender: 'visit'
+          }
+        },
+        {
+          title: '姓名',
+          dataIndex: 'name',
+          width: 100,
+          scopedSlots: { customRender: 'name' }
+        },{
+          title: '是否ICON',
+          dataIndex: 'research',
+          width: 80,
+        },{
+          title: '分支中心',
+          dataIndex: 'centerName',
+          width: 200
+        },{
+          title: 'ICON入组时间',
+          dataIndex: 'iconJoinDate',
+          width: 200,
+        },{
+          title: '创建日期',
+          dataIndex: 'createDate',
+          width: 120,
+          customRender: createDate => moment(createDate).format('YYYY-MM-DD')
+        },
+        {
+          title: '创建人',
+          dataIndex: 'creatorName',
+          width: 100
+        },
+        {
+          title: '操作',
+          dataIndex: 'action',
+          width: 100,
+          className: 'operation',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        return getPatientDataList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res;
+        });
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+
+      // custom table alert & rowSelection
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = [];
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      scroll: false,
+      optionAlertShow: false,
+      form: this.$form.createForm(this),
+    };
+  },
+  created() {
+    this.scroll = {
+      y: (window.screen.height - 368) + "px"
+    }
+  },
+  mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  },
+  filters: {
+    visitFilter(type) {
+      return visitMap[type].text;
+    },
+    visitTypeFilter(type) {
+      return visitMap[type].status;
+    }
+  },
+  methods: {
+    modifyName(name) {
+      return name.replace(/(.)(.*)/, (_, $1, $2) => $1 + '*'.repeat($2.length))
+    },
+    clearForm() {
+      this.queryParam = {}
+      this.dateArr = []
+    },
+    tableSearch(type) {
+      this.queryParam.queryType = type
+      this.$refs.table.refresh();
+      this.advanced = false;
+    },
+    refreshTable() {
+      this.advanced = false;
+      this.$refs.table.refresh();
+    },
+    showUser(record) {
+      this.$refs.detailModal.show(record);
+    },
+    exec(record) {
+      this.$refs.createModal.edit(record)
+    },
+    del(record) {
+      let that = this
+      this.$confirm({
+        title: '是否删除?',
+        onOk() {
+          let params = {
+            patientId: record.patientId
+          }
+          deletePatient(params).then(res => {
+            if (res.code == 0) {
+              that.$message.success('删除成功')
+              that.$refs.table.refresh()
+            }
+          })
+        },
+        onCancel() {}
+      })
+    },
+    handleOk() {
+      this.$refs.table.refresh();
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    toggleAdvanced() {
+      this.advanced = !this.advanced;
+    },
+    changeTime(time) {
+      this.dateArr = time;
+      this.queryParam.createDateStart = moment(time[0]).format('YYYY-MM-DD')
+      this.queryParam.createDateEnd = moment(time[1]).format('YYYY-MM-DD')
+    },
+  }
+};
+</script>
+<style lang="less" scoped>
+.ant-table td {
+  white-space: nowrap;
+}
+
+/deep/th.operation {
+  text-align: center !important;
+}
+
+/deep/.ant-table-tbody>tr>td.operation {
+  text-align: center !important;
+}
+
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px
+}
+
+/deep/.ant-table-row:hover .progressTag .ant-progress-inner {
+  background-color: #ffffff !important;
+}
+
+.progressTag {
+  display: inline-block;
+  width: 250px;
+
+  /deep/ .progressTagContent {
+    display: inline-block;
+    width: 80px;
+    margin-right: 5px;
+  }
+
+  /deep/ .progressTagTitle {
+    font-size: 12px;
+    text-align: center;
+    color: #000;
+    margin-bottom: 0;
+    margin-right: 15px;
+    display: inline-block;
+  }
+
+  /deep/ .progressTag .anticon {
+    color: #4bc5ac;
+    font-size: 18px;
+    vertical-align: bottom;
+  }
+
+  /deep/ .ant-progress-inner {
+    background-color: #e5f6ff;
+  }
+
+  /deep/ .progressTag .ant-progress-span {
+    color: rgb(0, 160, 233);
+  }
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+
+.userName {
+  color: #1fb2fa;
+  margin: 0;
+
+  &:active,
+  &:hover {
+    text-decoration: underline;
+    text-underline-position: under;
+    text-decoration-color: #1fb2fa;
+    cursor: pointer;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/report/index.vue b/src/views/report/index.vue
new file mode 100644
index 0000000000..edd1fea18e
--- /dev/null
+++ b/src/views/report/index.vue
@@ -0,0 +1,266 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索分支中心" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="2">
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="分支中心">
+                        <a-input v-model.trim="queryParam.keyWord" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="提交时间">
+                        <a-range-picker :value="submitArr" @change="changeSubmit" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="创建日期" style="margin-bottom:0;">
+                        <a-range-picker @change="changeCreate" style="width: 100%" :value="createArr" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+          <a-col :md="13" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="_export">导出</a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="centerName" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+    </s-table>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getCenterNum } from '@/api/basis'
+import { STable } from '@/components'
+export default {
+  components: {
+    STable
+  },
+  data() {
+    return {
+      baseUrl: process.env.VUE_APP_API_BASE_URL,
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      scroll: false,
+      loadData: parameter => {
+        return getCenterNum(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      columns: [{
+          title: '中心编号',
+          dataIndex: 'centerCode',
+          width: '100px'
+        },{
+          title: '分支中心',
+          dataIndex: 'centerName',
+          width: '120px'
+        },
+        {
+          title: '基线数量',
+          dataIndex: 'type1Num',
+          width: '120px'
+        },
+        {
+          title: '半年访视数量',
+          dataIndex: 'type2Num',
+          width: '120px'
+        },
+        {
+          title: '年访视数量',
+          dataIndex: 'type3Num',
+          width: '120px'
+        },
+        {
+          title: '急性加重期数量',
+          dataIndex: 'type4Num',
+          width: '120px'
+        },
+        {
+          title: '基线提交数量',
+          dataIndex: 'type5Num',
+          width: '120px'
+        },
+        {
+          title: '年访视提交数量',
+          dataIndex: 'type6Num',
+          width: '120px'
+        },
+        {
+          title: '病人联系方式',
+          dataIndex: 'type7Num',
+          width: '120px'
+        },
+        {
+          title: '合并症',
+          dataIndex: 'type8Num',
+          width: '120px'
+        },
+        {
+          title: '病因',
+          dataIndex: 'type9Num',
+          width: '120px'
+        },
+        {
+          title: '影像学评分',
+          dataIndex: 'type10Num',
+          width: '120px'
+        },
+        {
+          title: '痰检',
+          dataIndex: 'type11Num',
+          width: '120px'
+        },
+        {
+          title: '病史',
+          dataIndex: 'type12Num',
+          width: '120px'
+        },
+        {
+          title: '影像学资料',
+          dataIndex: 'type13Num',
+          width: '120px'
+        },
+        {
+          title: '病原微生物',
+          dataIndex: 'type14Num',
+          width: '120px'
+        },
+        {
+          title: '肺功能',
+          dataIndex: 'type15Num',
+          width: '120px'
+        }
+      ],
+      createArr: [],
+      submitArr: []
+    }
+  },
+  created() {
+    this.scroll = {
+      x: true,
+      y: window.screen.height - 368 + 'px'
+    }
+  },
+  mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  },
+  methods: {
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    clearForm() {
+      this.queryParam = {}
+      this.createArr = []
+      this.submitArr = []
+    },
+    tableSearch(type) {
+      this.queryParam.isUser = type
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    refreshTable() {
+      this.advanced = false
+      this.$refs.table.refresh()
+    },
+    changeCreate(time) {
+      this.createArr = time;
+      this.queryParam.createDateStart = moment(time[0]).format('YYYY-MM-DD')
+      this.queryParam.createDateEnd = moment(time[1]).format('YYYY-MM-DD')
+    },
+    changeSubmit(time) {
+      this.submitArr = time;
+      this.queryParam.submitDateStart = moment(time[0]).format('YYYY-MM-DD')
+      this.queryParam.submitDateEnd = moment(time[1]).format('YYYY-MM-DD')
+    },
+    _export() {
+      window.open(this.baseUrl + 'basis/exportCenterNum')
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+
+.ant-table td {
+  white-space: nowrap;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/reportApply/ethics.vue b/src/views/reportApply/ethics.vue
new file mode 100644
index 0000000000..b616fce470
--- /dev/null
+++ b/src/views/reportApply/ethics.vue
@@ -0,0 +1,75 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="centerName" :columns="columns" :data="loadData" >
+       <template slot="operation" slot-scope="text, record">
+        <a @click="_export(record)">下载</a>
+      </template>
+    </s-table>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getEthicsList,ethicsDownload } from '@/api/report'
+import { STable } from '@/components'
+export default {
+  name: 'reportEthics',
+  components: {
+    STable
+  },
+  data() {
+    return {
+      baseUrl: process.env.VUE_APP_API_BASE_URL,
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      queryParam: {},
+      loadData: parameter => {
+        return getEthicsList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      columns: [{
+          title: '中心名称',
+          dataIndex: 'centerName',
+          width: '100px'
+        },{
+          title: '上传状态',
+          dataIndex: 'statusStr',
+          width: '120px'
+        },{
+          title: '操作',
+          dataIndex: 'operation',
+          scopedSlots: { customRender: 'operation' },
+          width: '150px'
+        }],
+        
+    }
+  },
+  created() {
+    this.scroll = {
+      x: true,
+      y: window.screen.height - 368 + 'px'
+    }
+   
+  },
+  mounted() {
+    
+   
+  },
+  methods: {
+      _export(record) {
+        window.open(this.baseUrl + './ethics/download?ethicsId=' + record.ethicsId)
+      }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.ant-table td {
+  white-space: nowrap;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/reportApply/iconCg.vue b/src/views/reportApply/iconCg.vue
new file mode 100644
index 0000000000..f463c0614d
--- /dev/null
+++ b/src/views/reportApply/iconCg.vue
@@ -0,0 +1,166 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+        <a-form layout="inline">
+            <a-row :gutter="16">
+                 <a-col :md="13" style="text-align: right;width: 100%;padding: 0 8px;margin-bottom: 10px;" :sm="24">
+                    <a-button type="primary" @click="_export">导出</a-button>
+                </a-col>
+            </a-row>
+        </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll"  size="small" rowKey="centerName" :columns="columns" :data="loadData"  showPagination="auto">
+    </s-table>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getIconCgsfDataList } from '@/api/report'
+import { STable } from '@/components'
+export default {
+  components: {
+    STable
+  },
+  data() {
+    return {
+      baseUrl: process.env.VUE_APP_API_BASE_URL,
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      scroll: false,
+      loadData: parameter => {
+        return getIconCgsfDataList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      columns: [{
+          title: '患者编号',
+          dataIndex: 'fileCode',
+          width: '120px'
+        },{
+          title: '患者姓名',
+          dataIndex: 'patientName',
+          width: '90px'
+        },{
+          title: '患者性别',
+          dataIndex: 'sexName',
+          width: '90px'
+        },{
+          title: '患者年龄',
+          dataIndex: 'age',
+          width: '90px'
+        },{
+          title: '随访期间有无长期氧疗',
+          dataIndex: 'a1',
+          width: '180px'
+        },{
+          title: '随访期间有否无创辅助通气',
+          dataIndex: 'a2',
+          width: '220px'
+        },{
+          title: '随访期间有无进行各类物理治疗',
+          dataIndex: 'a3',
+          width: '260px'
+        },{
+          title: '物理治疗方式',
+          dataIndex: 'a4',
+          width: '120px'
+        },{
+          title: '随访期间有无进行各类呼吸疾病药物治疗',
+          dataIndex: 'a5',
+          width: '300px'
+        },{
+          title: '规律抗生素治疗',
+          dataIndex: 'a6',
+          width: '120px'
+        },{
+          title: '祛痰药物治疗',
+          dataIndex: 'a7',
+          width: '100px'
+        },{
+          title: '支气管扩张剂',
+          dataIndex: 'a8',
+          width: '160px'
+        },{
+          title: '支气管扩张剂其他内容输入',
+          dataIndex: 'a9',
+          width: '180px'
+        },{
+          title: '吸入激素',
+          dataIndex: 'a10',
+          width: '130px'
+        },{
+          title: '其他治疗',
+          dataIndex: 'a11',
+          width: '120px'
+        },{
+          title: '各类免疫调节剂治疗',
+          dataIndex: 'a12',
+          width: '160px'
+        },{
+          title: '免疫调节剂治疗方式',
+          dataIndex: 'a13',
+          width: '160px'
+        },{
+          title: '免疫调节剂治疗方式其他输入',
+          dataIndex: 'a14',
+          width: '220px'
+        }]
+        
+    }
+  },
+  created() {
+    this.scroll = {
+      x: '3000px',
+      y: window.screen.height - 420 + 'px'
+    }
+   
+  },
+  mounted() {
+    
+   
+  },
+  methods: {
+    // 导出
+      _export() {
+      window.open(this.baseUrl + 'patientReport/exportIconCgsf')
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+
+.ant-table td {
+  white-space: nowrap;
+}
+.ant-table-fixed-header .ant-table-scroll .ant-table-header {
+    min-width: 0px !important;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/reportApply/iconData.vue b/src/views/reportApply/iconData.vue
new file mode 100644
index 0000000000..fc4d956073
--- /dev/null
+++ b/src/views/reportApply/iconData.vue
@@ -0,0 +1,110 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+        <a-form layout="inline">
+            <a-row :gutter="16">
+                 <a-col :md="13" style="text-align: right;width: 100%;padding: 0 8px;margin-bottom: 10px;" :sm="24">
+                    <a-button type="primary" @click="_export">导出</a-button>
+                </a-col>
+            </a-row>
+        </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll"  size="small" rowKey="centerName" :columns="columns" :data="loadData"  showPagination="auto">
+    </s-table>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getIconJxNumList } from '@/api/report'
+import { STable } from '@/components'
+export default {
+  components: {
+    STable
+  },
+  data() {
+    return {
+      baseUrl: process.env.VUE_APP_API_BASE_URL,
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      scroll: false,
+      loadData: parameter => {
+        return getIconJxNumList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      columns: [{
+          title: '中心名称',
+          dataIndex: 'name',
+          width: '120px'
+        },{
+          title: '提交数量',
+          dataIndex: 'submitNum',
+          width: '90px'
+        },{
+          title: '未提交数量',
+          dataIndex: 'unSubmitNum',
+          width: '90px'
+        },{
+          title: '总数',
+          dataIndex: 'totleNum',
+          width: '90px'
+        }]
+        
+    }
+  },
+  created() {
+    // this.scroll = {
+    //   x: '18000px',
+    //   y: window.screen.height - 420 + 'px'
+    // }
+   
+  },
+  mounted() {
+    
+   
+  },
+  methods: {
+    // 导出
+      _export() {
+      window.open(this.baseUrl + 'patientReport/exportIconJxNum')
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+
+.ant-table td {
+  white-space: nowrap;
+}
+.ant-table-fixed-header .ant-table-scroll .ant-table-header {
+    min-width: 0px !important;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/reportApply/iconJx.vue b/src/views/reportApply/iconJx.vue
new file mode 100644
index 0000000000..0a06d7892e
--- /dev/null
+++ b/src/views/reportApply/iconJx.vue
@@ -0,0 +1,688 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="13" style="text-align: right;width: 100%;padding: 0 8px;margin-bottom: 10px;" :sm="24">
+            <a-button type="primary" @click="_export">导出</a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="centerName" :columns="columns" :data="loadData" showPagination="auto">
+    </s-table>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getIconJxDataList } from '@/api/report'
+import { STable } from '@/components'
+export default {
+  components: {
+    STable
+  },
+  data() {
+    return {
+      baseUrl: process.env.VUE_APP_API_BASE_URL,
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      scroll: false,
+      loadData: parameter => {
+        return getIconJxDataList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      columns: [{
+        title: '患者编号',
+        dataIndex: 'fileCode',
+        width: '120px',
+        ellipsis: true,
+        fixed: 'left'
+      }, {
+        title: '患者姓名',
+        dataIndex: 'patientName',
+        width: '90px',
+        ellipsis: true,
+        fixed: 'left'
+      }, {
+        title: '患者性别',
+        dataIndex: 'sexName',
+        width: '90px',
+        ellipsis: true
+      }, {
+        title: '患者年龄',
+        dataIndex: 'age',
+        width: '90px',
+        ellipsis: true
+      }, {
+        title: 'BSI评分',
+        dataIndex: 'bsi',
+        width: '100px',
+        ellipsis: true
+      }, {
+        title: 'FACED评分',
+        dataIndex: 'faced',
+        width: '100px',
+        ellipsis: true
+      }, {
+        title: 'BACI评分',
+        dataIndex: 'baci',
+        width: '100px',
+        ellipsis: true
+      }, {
+        title: 'REFFI评分',
+        dataIndex: 'reffi',
+        width: '160px',
+        ellipsis: true
+      }, {
+        title: 'BHQ问卷得分',
+        dataIndex: 'bhq',
+        width: '160px',
+        ellipsis: true
+      }, {
+        title: 'MMRC评分',
+        dataIndex: 'mmrc',
+        width: '130px',
+        ellipsis: true
+      }, {
+        title: 'HADS评分',
+        dataIndex: 'had',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'lcq总评分',
+        dataIndex: 'lcq',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'lcq生理评分',
+        dataIndex: 'lcqSl',
+        width: '110px',
+        ellipsis: true
+      }, {
+        title: 'lcq心理评分',
+        dataIndex: 'lcqXl',
+        width: '110px',
+        ellipsis: true
+      }, {
+        title: 'lcq社会评分',
+        dataIndex: 'lcqSh',
+        width: '110px',
+        ellipsis: true
+      }, {
+        title: 'qolb身体评分',
+        dataIndex: 'qolb1',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'qolb角色评分',
+        dataIndex: 'qolb2',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'qolb活力评分',
+        dataIndex: 'qolb3',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'qolb情绪评分',
+        dataIndex: 'qolb4',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'qolb社会评分',
+        dataIndex: 'qolb5',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'qolb医疗评分',
+        dataIndex: 'qolb6',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'qolb健康评分',
+        dataIndex: 'qolb7',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'qolb呼吸评分',
+        dataIndex: 'qolb8',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '提交时间',
+        dataIndex: 'submitDate',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '支气管扩张症诊断日期',
+        dataIndex: 'a1',
+        width: '160px',
+        ellipsis: true
+      }, {
+        title: '过去两年的支扩急性加重住院次数',
+        dataIndex: 'a2',
+        width: '220px',
+        ellipsis: true
+      }, {
+        title: '过去一年的支扩急性加重住院次数',
+        dataIndex: 'a3',
+        width: '230px',
+        ellipsis: true
+      }, {
+        title: '过去一年支扩的急性加重次数',
+        dataIndex: 'a4',
+        width: '230px',
+        ellipsis: true
+      }, {
+        title: '最后一次急性加重住院的时间',
+        dataIndex: 'a5',
+        width: '200px',
+        ellipsis: true
+      }, {
+        title: '最后一次急性加重出院的时间',
+        dataIndex: 'a6',
+        width: '200px',
+        ellipsis: true
+      }, {
+        title: '目前合并呼吸系统相关疾病',
+        dataIndex: 'a7',
+        width: '200px'
+      }, {
+        title: '经皮血氧饱和度SpO2',
+        dataIndex: 'b1',
+        width: '160px',
+        ellipsis: true
+      }, {
+        title: '身高',
+        dataIndex: 'b2',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '体重',
+        dataIndex: 'b3',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'BMI',
+        dataIndex: 'b4',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '有无桶状胸',
+        dataIndex: 'b5',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '有无杵状指',
+        dataIndex: 'b6',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '是无啰音',
+        dataIndex: 'b7',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '胸部CT检查日期',
+        dataIndex: 'c1',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '支扩位于CT图像',
+        dataIndex: 'c2',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '分离到微生物',
+        dataIndex: 'd1',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '分离到细菌检查日期',
+        dataIndex: 'd2',
+        width: '120px',
+        customRender: d2 => moment(d2).format('YYYY-MM-DD'),
+        ellipsis: true
+      }, {
+        title: '细菌种类',
+        dataIndex: 'd3',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '分离到真菌检查日期',
+        dataIndex: 'd4',
+        width: '120px',
+        customRender: d4 => moment(d4).format('YYYY-MM-DD'),
+        ellipsis: true
+      }, {
+        title: '真菌种类',
+        dataIndex: 'd5',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '分离到分枝杆菌检查日期',
+        dataIndex: 'd6',
+        width: '120px',
+        customRender: d6 => moment(d6).format('YYYY-MM-DD'),
+        ellipsis: true
+      }, {
+        title: '分枝杆菌种类',
+        dataIndex: 'd7',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '其他病原',
+        dataIndex: 'd8',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '其他病原种类',
+        dataIndex: 'd9',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '胃食管反流病量表评分',
+        dataIndex: 'e1',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '胃食管反流病评分日期',
+        dataIndex: 'e2',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '变应性支气管肺曲霉病各类相关检查',
+        dataIndex: 'e3',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '变应性支气管肺曲霉病各类相关检查日期',
+        dataIndex: 'e4',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '外周血嗜酸细胞',
+        dataIndex: 'e5',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '血总IgE',
+        dataIndex: 'e6',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '曲霉特异IgE',
+        dataIndex: 'e7',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '曲霉皮肤点刺试验',
+        dataIndex: 'e8',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '胸部CT有无中心性支扩',
+        dataIndex: 'e9',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '胸部CT提示高密度黏液栓嵌顿',
+        dataIndex: 'e10',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '各类自身免疫抗体检查',
+        dataIndex: 'e11',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '自身免疫抗体检查时间',
+        dataIndex: 'e12',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'ANA',
+        dataIndex: 'e13',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'ENA',
+        dataIndex: 'e14',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'ANCA',
+        dataIndex: 'e15',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '自身免疫抗体检查其他检查',
+        dataIndex: 'e16',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '各类血清免疫球蛋白检查',
+        dataIndex: 'e17',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '各类血清免疫球蛋白检查日期',
+        dataIndex: 'e18',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '血清IgM',
+        dataIndex: 'e19',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '血清IgG',
+        dataIndex: 'e20',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '血清IgA',
+        dataIndex: 'e21',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '各类血清补体检查',
+        dataIndex: 'e22',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '各类血清补体检查日期',
+        dataIndex: 'e23',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '血清C3',
+        dataIndex: 'e24',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '血清C4',
+        dataIndex: 'e25',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '抗蛋白酶基因检查',
+        dataIndex: 'e26',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'α-1抗蛋白酶基因检查日期',
+        dataIndex: 'e27',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'α-1抗蛋白酶基因检查',
+        dataIndex: 'e28',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '各类纤毛功能相关检测',
+        dataIndex: 'e29',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '各类纤毛功能相关检测日期',
+        dataIndex: 'e30',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '呼出一氧化氮测定',
+        dataIndex: 'e31',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '电镜检测的活检',
+        dataIndex: 'e32',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '分析纤毛摆动频率的活检',
+        dataIndex: 'e33',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '各类纤毛功能相关检测基因检测',
+        dataIndex: 'e34',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '肺功能测试检查日期',
+        dataIndex: 'f1',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'FVC',
+        dataIndex: 'f2',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'FVC pred',
+        dataIndex: 'f3',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'FEV1',
+        dataIndex: 'f4',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'FEV1 pred',
+        dataIndex: 'f5',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: 'FEV1/ FVC',
+        dataIndex: 'f6',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '各类血气分析检查日期',
+        dataIndex: 'f7',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '酸碱度',
+        dataIndex: 'f8',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '氧分压',
+        dataIndex: 'f9',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '二氧化碳分压',
+        dataIndex: 'f10',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '肺动脉氧分压差',
+        dataIndex: 'f11',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '动脉血氧饱和度SaO2',
+        dataIndex: 'f12',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '血常规检查日期',
+        dataIndex: 'g1',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '血生化检查日期',
+        dataIndex: 'g2',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '血红蛋白',
+        dataIndex: 'g3',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '白细胞',
+        dataIndex: 'g4',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '红细胞',
+        dataIndex: 'g5',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '血小板',
+        dataIndex: 'g6',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '中性粒细胞绝对值',
+        dataIndex: 'g7',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '嗜酸细胞绝对值',
+        dataIndex: 'g8',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '血糖',
+        dataIndex: 'g9',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '白蛋白',
+        dataIndex: 'g10',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '前白蛋白',
+        dataIndex: 'g11',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '既往有否长期氧疗',
+        dataIndex: 'h1',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '既往有否无创辅助通气',
+        dataIndex: 'h2',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '既往有否进行各类物理治疗',
+        dataIndex: 'h3',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '物理治疗方式',
+        dataIndex: 'h4',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '既往有否进行各类呼吸疾病药物治疗',
+        dataIndex: 'h5',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '规律抗生素治疗',
+        dataIndex: 'h6',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '祛痰药物治疗',
+        dataIndex: 'h7',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '支气管扩张剂',
+        dataIndex: 'h8',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '吸入激素',
+        dataIndex: 'h9',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '其他治疗',
+        dataIndex: 'h10',
+        width: '220px',
+        ellipsis: true
+      }, {
+        title: '既往有否进行各类免疫调节剂治疗',
+        dataIndex: 'h11',
+        width: '120px',
+        ellipsis: true
+      }, {
+        title: '免疫调节剂治疗方式',
+        dataIndex: 'h12',
+        ellipsis: true
+      }]
+
+    }
+  },
+  created() {
+    this.scroll = {
+      x: '15000px',
+      y: window.screen.height - 420 + 'px'
+    }
+
+  },
+  mounted() {
+
+
+  },
+  methods: {
+    // 导出
+    _export() {
+      window.open(this.baseUrl + 'patientReport/exportIconJx')
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+
+.ant-table td {
+  white-space: nowrap;
+}
+
+.ant-table-fixed-header .ant-table-scroll .ant-table-header {
+  min-width: 0px !important;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/reportApply/iconJxjzq.vue b/src/views/reportApply/iconJxjzq.vue
new file mode 100644
index 0000000000..9186217e0b
--- /dev/null
+++ b/src/views/reportApply/iconJxjzq.vue
@@ -0,0 +1,378 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+        <a-form layout="inline">
+            <a-row :gutter="16">
+                 <a-col :md="13" style="text-align: right;width: 100%;padding: 0 8px;margin-bottom: 10px;" :sm="24">
+                    <a-button type="primary" @click="_export">导出</a-button>
+                </a-col>
+            </a-row>
+        </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll"  size="small" rowKey="centerName" :columns="columns" :data="loadData"  showPagination="auto">
+    </s-table>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getIconJxjzDataList } from '@/api/report'
+import { STable } from '@/components'
+export default {
+  components: {
+    STable
+  },
+  data() {
+    return {
+      baseUrl: process.env.VUE_APP_API_BASE_URL,
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      scroll: false,
+      loadData: parameter => {
+        return getIconJxjzDataList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      columns: [{
+          title: '患者编号',
+          dataIndex: 'fileCode',
+          width: '120px'
+        },{
+          title: '患者姓名',
+          dataIndex: 'patientName',
+          width: '90px'
+        },{
+          title: '患者性别',
+          dataIndex: 'sexName',
+          width: '90px'
+        },{
+          title: '患者年龄',
+          dataIndex: 'age',
+          width: '90px'
+        },{
+          title: '本次急性加重日期',
+          dataIndex: 't',
+          width: '180px'
+        },{
+          title: '急性加重的症状',
+          dataIndex: 't1',
+          width: '220px'
+        },{
+          title: '本次支气管扩张急性加重时的气道分泌物微生物培养',
+          dataIndex: 't2str',
+          width: '260px'
+        },{
+          title: '有否分离到微生物',
+          dataIndex: 'a',
+          width: '220px'
+        },{
+          title: '分离到细菌检查日期',
+          dataIndex: 'a1',
+          width: '300px'
+        },{
+          title: '细菌种类',
+          dataIndex: 'a11',
+          width: '120px'
+        },{
+          title: '其他细菌输入内容',
+          dataIndex: 'a12',
+          width: '100px'
+        },{
+          title: '分离到真菌检查日期',
+          dataIndex: 'a2',
+          width: '160px'
+        },{
+          title: '真菌种类',
+          dataIndex: 'a21',
+          width: '180px'
+        },{
+          title: '分离到分枝杆菌检查日期',
+          dataIndex: 'a3',
+          width: '130px'
+        },{
+          title: '分枝杆菌种类',
+          dataIndex: 'a31',
+          width: '120px'
+        },{
+          title: '分离到其他病原检查日期',
+          dataIndex: 'a4',
+          width: '160px'
+        },{
+          title: '其他病原输入框',
+          dataIndex: 'a41',
+          width: '160px'
+        },{
+          title: '其他方法检查日期',
+          dataIndex: 'a5',
+          width: '220px'
+        },{
+          title: '其他方法种类',
+          dataIndex: 'a51',
+          width: '220px'
+        },{
+          title: '本次支气管扩张急性加重时的血常规检测',
+          dataIndex: 'b',
+          width: '220px'
+        },{
+          title: '急性加重检查日期',
+          dataIndex: 'b11',
+          width: '220px'
+        },{
+          title: '白细胞',
+          dataIndex: 'b12',
+          width: '220px'
+        },{
+          title: '中性粒细胞绝对值',
+          dataIndex: 'b13',
+          width: '220px'
+        },{
+          title: '淋巴细胞绝对值',
+          dataIndex: 'b14',
+          width: '220px'
+        },{
+          title: 'C反应蛋白',
+          dataIndex: 'b15',
+          width: '220px'
+        },{
+          title: '本次支气管扩张急性加重的住院日期',
+          dataIndex: 'b21',
+          width: '220px'
+        },{
+          title: '本次支气管扩张急性加重的出院日期',
+          dataIndex: 'b22',
+          width: '220px'
+        },{
+          title: '本次支气管扩张急性加重时的抗生素治疗',
+          dataIndex: 'b3',
+          width: '220px'
+        },{
+          title: '哌拉西林起始日期',
+          dataIndex: 'b31',
+          width: '220px'
+        },{
+          title: '哌拉西林结束日期',
+          dataIndex: 'b32',
+          width: '220px'
+        },{
+          title: '哌拉西林/他唑巴坦起始日期',
+          dataIndex: 'b41',
+          width: '220px'
+        },{
+          title: '哌拉西林/他唑巴坦结束日期',
+          dataIndex: 'b42',
+          width: '220px'
+        },{
+          title: '头孢他啶起始日期',
+          dataIndex: 'b51',
+          width: '220px'
+        },{
+          title: '头孢他啶结束日期',
+          dataIndex: 'b52',
+          width: '220px'
+        },{
+          title: '头孢哌酮起始日期',
+          dataIndex: 'b61',
+          width: '220px'
+        },{
+          title: '头孢哌酮结束日期',
+          dataIndex: 'b62',
+          width: '220px'
+        },{
+          title: '头孢哌酮/舒巴坦起始日期',
+          dataIndex: 'b71',
+          width: '220px'
+        },{
+          title: '头孢哌酮/舒巴坦结束日期',
+          dataIndex: 'b72',
+          width: '220px'
+        },{
+          title: '头孢吡肟起始日期',
+          dataIndex: 'b81',
+          width: '220px'
+        },{
+          title: '头孢吡肟结束日期',
+          dataIndex: 'b82',
+          width: '220px'
+        },{
+          title: '亚胺培南起始日期',
+          dataIndex: 'b91',
+          width: '220px'
+        },{
+          title: '亚胺培南结束日期',
+          dataIndex: 'b92',
+          width: '220px'
+        },{
+          title: '美罗培南起始日期',
+          dataIndex: 'b101',
+          width: '220px'
+        },{
+          title: '美罗培南结束日期',
+          dataIndex: 'b102',
+          width: '220px'
+        },{
+          title: '氨曲南起始日期',
+          dataIndex: 'b111',
+          width: '220px'
+        },{
+          title: '氨曲南结束日期',
+          dataIndex: 'b112',
+          width: '220px'
+        },{
+          title: '环丙沙星起始日期',
+          dataIndex: 'b121',
+          width: '220px'
+        },{
+          title: '环丙沙星结束日期',
+          dataIndex: 'b122',
+          width: '220px'
+        },{
+          title: '左氧氟沙星起始日期',
+          dataIndex: 'b131',
+          width: '220px'
+        },{
+          title: '左氧氟沙星结束日期',
+          dataIndex: 'b132',
+          width: '220px'
+        },{
+          title: '阿米卡星起始日期',
+          dataIndex: 'b141',
+          width: '220px'
+        },{
+          title: '阿米卡星结束日期',
+          dataIndex: 'b142',
+          width: '220px'
+        },{
+          title: '妥布霉素起始日期',
+          dataIndex: 'b151',
+          width: '220px'
+        },{
+          title: '妥布霉素结束日期',
+          dataIndex: 'b152',
+          width: '220px'
+        },{
+          title: '庆大霉素起始日期',
+          dataIndex: 'b161',
+          width: '220px'
+        },{
+          title: '庆大霉素结束日期',
+          dataIndex: 'b162',
+          width: '220px'
+        },{
+          title: '多黏菌素E起始日期',
+          dataIndex: 'b171',
+          width: '220px'
+        },{
+          title: '多黏菌素E结束日期',
+          dataIndex: 'b172',
+          width: '220px'
+        },{
+          title: '多黏菌素B起始日期',
+          dataIndex: 'b181',
+          width: '220px'
+        },{
+          title: '多黏菌素B结束日期',
+          dataIndex: 'b182',
+          width: '220px'
+        },{
+          title: '磷霉素起始日期',
+          dataIndex: 'b191',
+          width: '220px'
+        },{
+          title: '磷霉素结束日期',
+          dataIndex: 'b192',
+          width: '220px'
+        },{
+          title: '其他抗生素1名称',
+          dataIndex: 'b201',
+          width: '220px'
+        },{
+          title: '其他抗生素1开始日期',
+          dataIndex: 'b202',
+          width: '220px'
+        },{
+          title: '其他抗生素1结束日期',
+          dataIndex: 'b203',
+          width: '220px'
+        },{
+          title: '其他抗生素2名称',
+          dataIndex: 'b211',
+          width: '220px'
+        },{
+          title: '其他抗生素2开始日期',
+          dataIndex: 'b212',
+          width: '220px'
+        },{
+          title: '其他抗生素2结束日期',
+          dataIndex: 'b213',
+          width: '220px'
+        },{
+          title: '其他抗生素3名称',
+          dataIndex: 'b221',
+          width: '220px'
+        },{
+          title: '其他抗生素3开始日期',
+          dataIndex: 'b222',
+          width: '220px'
+        },{
+          title: '其他抗生素3结束日期',
+          dataIndex: 'b223',
+          width: '220px'
+        }]
+        
+    }
+  },
+  created() {
+    this.scroll = {
+      x: '18000px',
+      y: window.screen.height - 420 + 'px'
+    }
+   
+  },
+  mounted() {
+    
+   
+  },
+  methods: {
+    // 导出
+      _export() {
+      window.open(this.baseUrl + 'patientReport/exportIconJxjz')
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+
+.ant-table td {
+  white-space: nowrap;
+}
+.ant-table-fixed-header .ant-table-scroll .ant-table-header {
+    min-width: 0px !important;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/reportApply/index.vue b/src/views/reportApply/index.vue
new file mode 100644
index 0000000000..8a85e0f018
--- /dev/null
+++ b/src/views/reportApply/index.vue
@@ -0,0 +1,227 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索申请人" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <!-- <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a> -->
+            </a-form-item>
+          </a-col>
+           <a-col :md="13" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="reportApplyshow()">新建</a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="ticketId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <template slot="executeStatus" slot-scope="text">
+        <a-badge :status="text == 0 ? 'success' : 'error'" :text="text == 0 ? '未注销' : '已注销'" />
+      </template>
+      <template slot="operation" slot-scope="text, record">
+        <span v-if="record.executeStatus == 1">注销</span>
+        <a v-else @click="handleLogout(record)">注销</a>
+      </template>
+    </s-table>
+    <a-modal :visible="visible" title="申请开通报表" @ok="outSubmit"  @cancel="reportApplyhide">
+      <a-form :form="form">
+        <a-form-item label="申请理由" >
+          <a-input  type="textarea" v-decorator="[
+          'reason',
+          { rules: [{ required: true, message: '请填写申请理由' }] },
+        ]" />
+        </a-form-item>
+      </a-form>
+    </a-modal>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getReporApplyList,saveReporApply } from '@/api/report'
+import { STable } from '@/components'
+import $ from 'jquery'
+import { submitCheck } from '../../api/basis'
+
+export default {
+  name: 'reportApply',
+  components: {
+    STable
+  },
+  data() {
+    return {
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      scroll: false,
+      loadData: parameter => {
+        return getReporApplyList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      columns: [{
+          title: '申请中心',
+          dataIndex: 'applyName',
+          width: '120px'
+        },
+        {
+          title: '申请时间',
+          dataIndex: 'applyTime',
+          customRender: applyTime => moment(applyTime).format('YYYY-MM-DD'),
+          width: '120px'
+        },
+        {
+          title: '申请理由',
+          dataIndex: 'reason',
+          width: '200px'
+        },
+        {
+          title: '申请状态',
+          dataIndex: 'statusStr',
+          width: '150px'
+        },
+         {
+          title: '审核备注',
+          dataIndex: 'checkReason',
+          width: '200px'
+        },
+        {
+          title: '审核时间',
+          dataIndex: 'checkTime',
+          customRender: checkTime => moment(checkTime).format('YYYY-MM-DD'),
+          width: '150px'
+        },
+      ],
+      form:this.$form.createForm(this),
+      visible:false
+    }
+  },
+  created() {
+    this.scroll = {
+      y: window.screen.height - 368 + 'px'
+    }
+  },
+  methods: {
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    clearForm() {
+      this.queryParam = {}
+    },
+    tableSearch(type) {
+      this.queryParam.executeStatus = type
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    handleLogout(record) {
+      let that = this
+      this.$confirm({
+        title: '确定要注销该活动券吗?',
+        onOk() {
+          const params = new FormData();
+          params.append('ticketId', record.ticketId)
+          logoutTicket(params).then(res => {
+            that.$refs.table.refresh()
+          })
+        },
+        onCancel() {},
+      });
+    },
+    refreshTable() {
+      this.advanced = false
+      this.$refs.table.refresh()
+    },
+    reportApplyshow(){
+      this.visible=true
+    },
+    reportApplyhide(){
+      this.visible=false
+    },
+    outSubmit(){
+      var that = this
+      this.form.validateFieldsAndScroll((errors, fieldsValue) => {
+        if (!errors) {
+          const params = new URLSearchParams()
+          params.append('reason', fieldsValue.reason)
+          saveReporApply(params).then(res => {
+              if (res.code === -1) {
+                that.$message.error(res.msg)
+              } else {
+                that.$message.success(res.msg)
+                that.$refs.table.refresh()
+                  that.visible = false
+              }
+          });
+        }
+      });
+    }
+  },
+  mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/reportApply/review.vue b/src/views/reportApply/review.vue
new file mode 100644
index 0000000000..32b7d0adbc
--- /dev/null
+++ b/src/views/reportApply/review.vue
@@ -0,0 +1,269 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索申请人" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <!-- <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a> -->
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="ticketId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <template slot="executeStatus" slot-scope="text">
+        <a-badge :status="text == 0 ? 'success' : 'error'" :text="text == 0 ? '未注销' : '已注销'" />
+      </template>
+      <template slot="operation" slot-scope="text, record">
+        <span v-if="record.status == 1||record.status==2">已审核</span>
+        <a v-else @click="reportApplyshow(record)">审核</a>
+      </template>
+    </s-table>
+    <a-modal :visible="visible" title="审核开通申请" @ok="outSubmit" @cancel="handleClose">
+       <template slot="footer">
+        <a-button key="back" @click="reportApplyhide">
+          不通过
+        </a-button>
+        <a-button key="submit" type="primary"  @click="outSubmit">
+          通过
+        </a-button>
+      </template>
+      <a-form :form="form">
+         <input type="hidden" v-model="reportApplyId">
+        <a-form-item label="备注" >
+          <a-input  type="textarea" v-decorator="[
+          'checkReason',
+          { rules: [{ required: checkStatus, message: '请填写不通过理由' }] },
+        ]" />
+        </a-form-item>
+      </a-form>
+    </a-modal>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getReporApplyList,checReporApply } from '@/api/report'
+import { STable } from '@/components'
+import $ from 'jquery'
+import { submitCheck } from '../../api/basis'
+
+export default {
+  name: 'reportReview',
+  components: {
+    STable
+  },
+  data() {
+    return {
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      scroll: false,
+      loadData: parameter => {
+        return getReporApplyList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      columns: [{
+          title: '申请人',
+          dataIndex: 'applyName',
+          width: '120px'
+        },
+        {
+          title: '申请时间',
+          dataIndex: 'applyTime',
+          customRender: applyTime => moment(applyTime).format('YYYY-MM-DD'),
+          width: '120px'
+        },
+        {
+          title: '申请理由',
+          dataIndex: 'reason',
+          width: '200px'
+        },
+        {
+          title: '申请状态',
+          dataIndex: 'statusStr',
+          width: '150px'
+        },
+        {
+          title: '审核时间',
+          dataIndex: 'checkTime',
+          customRender: checkTime => moment(checkTime).format('YYYY-MM-DD'),
+          width: '150px'
+        },
+          {
+          title: '审核备注',
+          dataIndex: 'checkReason',
+          width: '200px'
+        },
+          {
+          title: '操作',
+          dataIndex: 'operation',
+          scopedSlots: { customRender: 'operation' },
+          width: '150px'
+        }
+      ],
+      form:this.$form.createForm(this),
+      visible:false,
+      checkStatus:false,
+      reportApplyId:null,
+    }
+  },
+  created() {
+    this.scroll = {
+      y: window.screen.height - 368 + 'px'
+    }
+  },
+  methods: {
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    clearForm() {
+      this.queryParam = {}
+    },
+    tableSearch(type) {
+      this.queryParam.executeStatus = type
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    handleLogout(record) {
+      let that = this
+      this.$confirm({
+        title: '确定要注销该活动券吗?',
+        onOk() {
+          const params = new FormData();
+          params.append('ticketId', record.ticketId)
+          logoutTicket(params).then(res => {
+            that.$refs.table.refresh()
+          })
+        },
+        onCancel() {},
+      });
+    },
+    refreshTable() {
+      this.advanced = false
+      this.$refs.table.refresh()
+    },
+    reportApplyshow(record){
+      this.visible=true
+      this.reportApplyId = record.reportApplyId
+    },
+    reportApplyhide(){
+      var that = this
+      this.checkStatus=false;
+      this.$nextTick(() => {
+        this.form.validateFields({ force: true }, (errors, fieldsValue) => {
+          if (!errors) {
+            const params = new URLSearchParams()
+            params.append('reportApplyId', that.reportApplyId)
+            params.append('status', 2)
+            checReporApply(params).then(res => {
+                if (res.code === -1) {
+                  that.$message.error(res.msg)
+                } else {
+                  that.$message.success(res.msg)
+                  that.$refs.table.refresh()
+                  that.visible = false
+                }
+            });
+          }
+        });
+      });
+    },
+    handleClose() {
+      this.visible = false
+    },
+    outSubmit(){
+      var that = this
+      this.checkStatus=true;
+      this.$nextTick(() => {
+        this.form.validateFields({ force: true }, (errors, values) => {
+        if (!errors) {
+          const params = new URLSearchParams()
+          params.append('reportApplyId', that.reportApplyId)
+          params.append('checkReason', values.checkReason)
+          params.append('status', 1)
+          checReporApply(params).then(res => {
+              if (res.code === -1) {
+                that.$message.error(res.msg)
+              } else {
+                that.$message.success(res.msg)
+                that.$refs.table.refresh()
+                that.visible = false
+              }
+          });
+        }
+      });
+    })
+    }
+  },
+  mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/reportApply/statistics.vue b/src/views/reportApply/statistics.vue
new file mode 100644
index 0000000000..0d54f433ae
--- /dev/null
+++ b/src/views/reportApply/statistics.vue
@@ -0,0 +1,198 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+        <a-form layout="inline">
+            <a-row :gutter="16">
+                 <a-col :md="13" style="text-align: right;width: 100%;padding: 0 8px;margin-bottom: 10px;" :sm="24">
+                    <a-button type="primary" @click="_export">导出</a-button>
+                </a-col>
+            </a-row>
+        </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll"  size="small" rowKey="centerName" :columns="columns" :data="loadData"  showPagination="auto">
+    </s-table>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getPatientEntry } from '@/api/report'
+import { STable } from '@/components'
+export default {
+  components: {
+    STable
+  },
+  data() {
+    return {
+      baseUrl: process.env.VUE_APP_API_BASE_URL,
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      scroll: false,
+      loadData: parameter => {
+        return getPatientEntry(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      columns: [{
+          title: '患者姓名',
+          dataIndex: 'patientName',
+          width: '90px'
+        },{
+          title: '患者性别',
+          dataIndex: 'sexName',
+          width: '90px'
+        },{
+          title: '入组编号',
+          dataIndex: 'fileCode',
+          width: '120px'
+        },{
+          title: '患者年龄',
+          dataIndex: 'age',
+          width: '90px'
+        },{
+          title: '联系电话1',
+          dataIndex: 'telephone1',
+          width: '100px'
+        },{
+          title: '联系电话2',
+          dataIndex: 'telephone2',
+          width: '100px'
+        },{
+          title: '联系电话3',
+          dataIndex: 'telephone3',
+          width: '100px'
+        },{
+          title: '患者同意注册日期',
+          dataIndex: 'registerDate',
+          width: '160px'
+        },{
+          title: '推荐医生',
+          dataIndex: 'doctorName',
+          width: '90px'
+        },{
+          title: '提交人姓名',
+          dataIndex: 'submitName',
+          width: '110px'
+        },{
+          title: '提交人手机号',
+          dataIndex: 'submitTelephone',
+          width: '120px'
+        },{
+          title: '去世时间',
+          dataIndex: 'deathDate',
+          width: '120px'
+        },{
+          title: '支扩病史资料',
+          dataIndex: 'pbm1Status',
+          width: '120px'
+        },{
+          title: '体格检查',
+          dataIndex: 'pbm2Status',
+          width: '90px'
+        },{
+          title: '胸部影像学',
+          dataIndex: 'pbm4Status',
+          width: '110px'
+        },{
+          title: '病原',
+          dataIndex: 'pbm5Status',
+          width: '70px'
+        },{
+          title: '病因学',
+          dataIndex: 'pbm6Status',
+          width: '70px'
+        },{
+          title: '肺功能',
+          dataIndex: 'pbm7Status',
+          width: '70px'
+        },{
+          title: '心超',
+          dataIndex: 'pbm8Status',
+          width: '80px'
+        },{
+          title: '其他',
+          dataIndex: 'pbm9Status',
+          width: '80px'
+        },{
+          title: '呼吸系统相关治疗',
+          dataIndex: 'pbm10Status',
+          width: '150px'
+        },{
+          title: 'BHO',
+          dataIndex: 'qt1Status',
+          width: '70px'
+        },{
+          title: 'QOL-B',
+          dataIndex: 'qt2Status',
+          width: '70px'
+        },{
+          title: 'MMRC',
+          dataIndex: 'qt4Status',
+          width: '70px'
+        },{
+          title: 'LCQ',
+          dataIndex: 'qt5Status',
+          width: '70px'
+        },{
+          title: 'HADS',
+          dataIndex: 'qt6Status',
+          width: '70px'
+        }],
+        
+    }
+  },
+  created() {
+    this.scroll = {
+      x: '2600px',
+      y: window.screen.height - 420 + 'px'
+    }
+   
+  },
+  mounted() {
+    
+   
+  },
+  methods: {
+    // 导出
+      _export() {
+      window.open(this.baseUrl + 'patient/exportPatientEntry')
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+
+.ant-table td {
+  white-space: nowrap;
+}
+.ant-table-fixed-header .ant-table-scroll .ant-table-header {
+    min-width: 0px !important;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/result/Success.vue b/src/views/result/Success.vue
index 79e965946e..dfa52ba2ca 100644
--- a/src/views/result/Success.vue
+++ b/src/views/result/Success.vue
@@ -1,92 +1,73 @@
 <template>
-  <a-card :bordered="false" style="margin: -24px -24px 0px;">
-    <result type="success" :description="description" :title="title">
-      <template slot="action">
-        <a-button type="primary">返回列表</a-button>
-        <a-button style="margin-left: 8px">查看项目</a-button>
-        <a-button style="margin-left: 8px">打印</a-button>
-      </template>
-      <div>
-        <div style="font-size: 16px; color: rgba(0, 0, 0, 0.85); font-weight: 500; margin-bottom: 20px;">项目名称</div>
-        <a-row style="margin-bottom: 16px">
-          <a-col :xs="24" :sm="12" :md="12" :lg="12" :xl="6">
-            <span style="color: rgba(0, 0, 0, 0.85)">项目 ID:</span>
-            20180724089
-          </a-col>
-          <a-col :xs="24" :sm="12" :md="12" :lg="12" :xl="6">
-            <span style="color: rgba(0, 0, 0, 0.85)">负责人:</span>
-            曲丽丽是谁?
-          </a-col>
-          <a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12">
-            <span style="color: rgba(0, 0, 0, 0.85)">生效时间:</span>
-            2016-12-12 ~ 2017-12-12
-          </a-col>
-        </a-row>
-        <a-steps :current="1" :direction="isMobile() && directionType.vertical || directionType.horizontal" progressDot>
-          <a-step >
-            <span style="font-size: 14px" slot="title">创建项目</span>
-            <template slot="description">
-              <div style="fontSize: 12px; color: rgba(0, 0, 0, 0.45); position: relative; left: 42px;text-align: left;" slot="description" >
-                <div style="margin: 8px 0 4px">
-                  曲丽丽
-                  <a-icon style="margin-left: 8px" type="dingding-o" />
-                </div>
-                <div>2016-12-12 12:32</div>
-              </div>
-            </template>
-          </a-step>
-          <a-step title="部门初审">
-            <span style="font-size: 14px" slot="title">部门初审</span>
-            <template slot="description">
-              <div style="fontSize: 12px; color: rgba(0, 0, 0, 0.45); position: relative; left: 42px;text-align: left;" slot="description" >
-                <div style="margin: 8px 0 4px">
-                  周毛毛
-                  <a-icon style="margin-left: 8px; color: #00A0E9" type="dingding-o" />
-                </div>
-                <div><a href="">催一下</a></div>
-              </div>
-            </template>
-          </a-step>
-          <a-step title="财务复核">
-            <span style="font-size: 14px" slot="title">财务复核</span>
-          </a-step>
-          <a-step title="完成" >
-            <span style="font-size: 14px" slot="title">完成</span>
-          </a-step>
-        </a-steps>
-      </div>
-    </result>
-  </a-card>
+  <div>
+     <a-card :bordered="false" style="margin: -24px -24px 0px;background-color: #0399EC;color:#FFFFFF">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4"><a-icon type="left" style="fontSize:20px" /></a-col>
+        <a-col :md="3" :sm="20" style="fontSize:20px">
+          <a-icon type="credit-card" theme="filled" />
+          受访者:杨溢
+        </a-col>
+        <a-col :md="5" :sm="24" style="fontSize:20px">
+          <a-icon type="credit-card" theme="filled" style="fontSize:20px" />
+          320123199408175777
+        </a-col>
+        <a-col :md="15" :sm="24" style="fontSize:20px;textAlign: right;">创建时间:2018-01-02</a-col>
+      </a-row>
+    </a-card>
+   <a-card :bordered="false" style="margin:24px 24px 0px">
+    <a-row :gutter="8">
+      <a-col :span="5"><s-tree :dataSource="orgTree" :openKeys.sync="openKeys" :search="true" @click="handleClick" @add="handleAdd" @titleClick="handleTitleClick"></s-tree></a-col>
+      <a-col :span="19"><h1>11111111111111</h1></a-col>
+    </a-row>
+    </a-card>
+  </div>
 </template>
 
 <script>
-import { Result } from '@/components'
-import { mixinDevice } from '@/utils/mixin.js'
+import STree from '@/components/Tree/Tree';
+import { getOrgTree, getServiceList } from '@/api/manage';
 
-const directionType = {
-  horizontal: 'horizontal',
-  vertical: 'vertical'
-}
+// import { Result } from '@/components'
+// import { mixinDevice } from '@/utils/mixin.js'
 
 export default {
-  name: 'Success',
+  name: 'success',
   components: {
-    Result
+    STree
   },
-  mixins: [mixinDevice],
-  data () {
+  data() {
     return {
-      title: '提交成功',
-      description: '提交结果页用于反馈一系列操作任务的处理结果,\n' +
-          ' 如果仅是简单操作,使用 Message 全局提示反馈即可。\n' +
-          ' 本文字区域可以展示简单的补充说明,如果有类似展示\n' +
-          ' “单据”的需求,下面这个灰色区域可以呈现比较复杂的内容。',
-      directionType
+      openKeys: ['key-01'],
+      orgTree: []
+    };
+  },
+  created() {
+    getOrgTree().then(res => {
+      this.orgTree = res.result;
+    });
+  },
+  methods: {
+    handleClick(e) {
+      console.log('handleClick', e);
+      this.queryParam = {
+        key: e.key
+      };
+      this.$refs.table.refresh(true);
+    },
+    handleAdd(item) {
+      console.log('add button, item', item);
+      this.$message.info(`提示:你点了 ${item.key} - ${item.title} `);
+      this.$refs.modal.add(item.key);
+    },
+    handleTitleClick(item) {
+      console.log('handleTitleClick', item);
     }
   }
-}
+};
 </script>
 
-<style scoped>
-
+<style>
+.ant-card-wider-padding .ant-card-body {
+  padding: 18px 32px;
+}
 </style>
diff --git a/src/views/role/RoleDetail.vue b/src/views/role/RoleDetail.vue
new file mode 100644
index 0000000000..a82b55ba92
--- /dev/null
+++ b/src/views/role/RoleDetail.vue
@@ -0,0 +1,113 @@
+<template>
+  <a-modal :title="options.title" :width="750" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :destroyOnClose="destroyOnClose" :centered="centered" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item label="角色编码" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['code', requiredRule]" autocomplete="off" />
+        </a-form-item>
+        <a-form-item label="角色名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['name', requiredRule]" autocomplete="off" />
+        </a-form-item>
+        <a-form-item label="类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-radio-group v-decorator="['type', requiredRule]">
+            <a-radio value="1">角色</a-radio>
+            <a-radio value="2">数据角色</a-radio>
+          </a-radio-group>
+        </a-form-item>
+        <a-form-item label="是否使用" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-radio-group v-decorator="['status', requiredRule]">
+            <a-radio value="1">使用</a-radio>
+            <a-radio value="-1">停用</a-radio>
+          </a-radio-group>
+        </a-form-item>
+        <a-form-item label="描述" :labelCol="labelCol" :wrapperCol="wrapperCol" style="margin-bottom: 0;">
+          <a-textarea v-decorator="['description', requiredRule]" autocomplete="off"></a-textarea>
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+import { saveRole } from '@/api/center'
+import moment from 'moment'
+import _ from 'lodash'
+export default {
+  data() {
+    return {
+      options: {},
+      maskClosable: false,
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 7 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 15 }
+      },
+      visible: false,
+      confirmLoading: false,
+      centered: true,
+      destroyOnClose: true,
+      bodyStyle: {
+        height: '500px',
+        overflow: 'auto'
+      },
+      form: this.$form.createForm(this),
+      requiredRule: { rules: [{ required: true, message: '该选项必填!' }] },
+      roleId: undefined
+    }
+  },
+  created() {},
+  methods: {
+    add() {
+      this.options.title = '新建角色'
+      this.visible = true
+      this.roleId = undefined
+    },
+    edit(value) {
+      this.options.title = '编辑角色'
+      this.roleId = value.id
+      setTimeout(() => {
+        this.form.setFieldsValue({
+          code: value.code,
+          name: value.name,
+          type: String(value.type),
+          status: String(value.status),
+          description: value.description
+        })
+      }, 0)
+      this.visible = true
+    },
+    handleSubmit() {
+      this.confirmLoading = true;
+      this.form.validateFieldsAndScroll((errors, fieldsValue) => {
+        const that = this;
+        if (errors) {
+          this.confirmLoading = false
+          return
+        }
+        const values = {
+          ...fieldsValue,
+          id: this.roleId
+        };
+        const params = new URLSearchParams()
+        params.append('roleStr', JSON.stringify(values))
+        saveRole(params).then(res => {
+          that.visible = false
+          that.confirmLoading = false
+          that.$message.success(res.msg)
+          that.$emit('ok', values)
+        });
+      });
+    },
+    handleCancel() {
+      this.visible = false
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+/deep/ .ant-form-item:last-child {
+  margin-bottom: 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/role/list.vue b/src/views/role/list.vue
new file mode 100644
index 0000000000..d4d1f3e32f
--- /dev/null
+++ b/src/views/role/list.vue
@@ -0,0 +1,218 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索角色名称" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col :md="13" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="$refs.roleDetail.add()">新增</a-button>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch()">全部角色</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="角色名称">
+                        <a-input v-model.trim="queryParam.roleName" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="id" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <template slot="type" slot-scope="text">
+        <span v-if="text == 1">角色</span>
+        <span v-if="text == 2">数据角色</span>
+      </template>
+      <template slot="status" slot-scope="text">
+        <span v-if="text == 1">使用</span>
+        <span v-if="text == -1">停用</span>
+      </template>
+      <span slot="operation" slot-scope="text, record">
+        <template>
+          <a @click="handleReview(record)">编辑</a>
+        </template>
+      </span>
+    </s-table>
+    <role-detail ref="roleDetail" @ok="handleOk"></role-detail>
+  </a-card>
+</template>
+
+<script>
+  import moment from 'moment'
+  import { getRoleDataList } from '@/api/center'
+  import { STable } from '@/components'
+  import RoleDetail from './RoleDetail'
+  export default {
+    components: {
+      STable,
+      RoleDetail
+    },
+    data() {
+      return {
+        bodyStyle: {
+          padding: '10px',
+          paddingBottom: '0px'
+        },
+        // 高级搜索 展开/关闭
+        advanced: false,
+        // 查询参数
+        queryParam: {},
+        scroll: false,
+        loadData: parameter => {
+          return getRoleDataList(Object.assign(parameter, this.queryParam)).then(res => {
+            return res
+          })
+        },
+        selectedRowKeys: [],
+        selectedRows: [],
+        options: {
+          alert: {
+            show: false,
+            clear: () => {
+              this.selectedRowKeys = []
+            }
+          },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            onChange: this.onSelectChange
+          }
+        },
+        columns: [
+          {
+            title: '角色编码',
+            dataIndex: 'code',
+            width: '150px'
+          },
+          {
+            title: '角色名称',
+            dataIndex: 'name',
+            width: '150px'
+          },
+          {
+            title: '类型',
+            dataIndex: 'type',
+            width: '120px',
+            scopedSlots: { customRender: 'type' }
+          },
+          {
+            title: '是否使用',
+            dataIndex: 'status',
+            width: '120px',
+            scopedSlots: { customRender: 'status' }
+          },
+          {
+            title: '描述',
+            dataIndex: 'description'
+          },
+          {
+            title: '创建时间',
+            dataIndex: 'createDate',
+            customRender: createDate => moment(createDate).format('YYYY-MM-DD'),
+            width: '120px'
+          },
+          {
+            title: '操作',
+            dataIndex: 'operation',
+            scopedSlots: { customRender: 'operation' },
+            width: '100px'
+          }
+        ],
+      }
+    },
+    created() {
+      this.scroll = {
+        y: window.screen.height - 368 + 'px'
+      }
+    },
+    mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  },
+    methods: {
+      onSelectChange(selectedRowKeys, selectedRows) {
+        this.selectedRowKeys = selectedRowKeys;
+        this.selectedRows = selectedRows;
+      },
+      clearForm() {
+        this.queryParam = {}
+      },
+      tableSearch(type) {
+        this.queryParam.isUser = type
+        this.$refs.table.refresh()
+        this.advanced = false
+      },
+      refreshTable() {
+        this.advanced = false
+        this.$refs.table.refresh()
+      },
+      handleReview(record) {
+        this.$refs.roleDetail.edit(record)
+      },
+      handleOk() {
+        this.$refs.table.refresh()
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+  /deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+    margin-bottom: 10px;
+  }
+  .tableSearch {
+    background: #ffffff;
+    position: absolute;
+    top: 52px;
+    box-shadow: 4px 4px 10px #ddd;
+    z-index: 100;
+    /deep/ .ant-card-body .ant-form-horizontal .ant-form-item > .ant-form-item-label {
+      width: 70px !important;
+    }
+    .commonRetrieval {
+      padding: 10px;
+      p {
+        &:hover {
+          cursor: pointer;
+          text-decoration: underline;
+        }
+      }
+    }
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/score/list.vue b/src/views/score/list.vue
new file mode 100644
index 0000000000..3a1303eb76
--- /dev/null
+++ b/src/views/score/list.vue
@@ -0,0 +1,327 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索患者姓名、入组编号" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+            </a-form-item>
+          </a-col>
+          <a-col :md="13" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="_export">导出</a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" size="small" rowKey="centerName" :scroll="scroll" :columns="columns" :data="loadData" :alert="options.alert" showPagination="auto">
+    </s-table>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { patientReport } from '@/api/basis'
+import { STable } from '@/components'
+
+const visitMap = {
+  1: {
+    text: '有铜绿'
+  },
+  2: {
+    text: '无铜绿'
+  }
+};
+
+export default {
+  name: 'scoreList',
+  components: {
+    STable
+  },
+  data() {
+    return {
+      baseUrl: process.env.VUE_APP_API_BASE_URL,
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      loadData: parameter => {
+        return patientReport(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      scroll: {x: 3160},
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      columns: [{
+        title: '患者姓名',
+        dataIndex: 'patientName',
+        width: 80
+      },{
+        title: '患者性别',
+        dataIndex: 'sexName',
+        width: 80
+      },{
+        title: '患者年龄',
+        dataIndex: 'age',
+        width: 80
+      },{
+        title: '文化程度',
+        dataIndex: 'census',
+        width: 120
+      },{
+        title: '过去两年急性加重住院次数',
+        dataIndex: 'a71',
+        width: 190
+      },{
+        title: '过去一年急性加重住院次数',
+        dataIndex: 'a81',
+        width: 190
+      },{
+        title: '过去1年急性加重次数',
+        dataIndex: 'a91',
+        width: 150
+      },{
+        title: '胸部影像学支扩类型',
+        dataIndex: 'a101',
+        width: 150
+      },{
+        title: '心超小结',
+        dataIndex: 'a111',
+        width: 80
+      },{
+        title: '肺功能结论',
+        dataIndex: 'a121',
+        width: 100
+      },{
+        title: '通气功能减退类型',
+        dataIndex: 'a131',
+        width: 150
+      }, {
+        title: '入组编号',
+        dataIndex: 'fileCode',
+        width: 100
+      }, {
+        title: '是否有铜绿',
+        dataIndex: 'itTlStr',
+        width: 100
+      }, {
+        title: 'FACED评分',
+        dataIndex: 'faced',
+        width: 100
+      }, {
+        title: 'BACI评分',
+        dataIndex: 'baci',
+        width: 100
+      }, {
+        title: 'REFFI评分',
+        dataIndex: 'reffi',
+        width: 100
+      }, {
+        title: '病因诊断',
+        dataIndex: 'byzd',
+        width: 240
+      }, {
+        title: 'FVC',
+        dataIndex: 'a21',
+        width: 150
+      },{
+        title: 'FVC%',
+        dataIndex: 'a61',
+        width: 80
+      }, {
+        title: 'FEV1',
+        dataIndex: 'a31',
+        width: 150
+      }, {
+        title: 'FEV1% ',
+        dataIndex: 'a51',
+        width: 80
+      },{
+        title: 'FEV1%FVC',
+        dataIndex: 'a41',
+        width: 150
+      }, {
+        title: 'BSI评分',
+        dataIndex: 'bsi',
+        width: 100
+      }, {
+        title: 'BHQ问卷得分',
+        dataIndex: 'bhq',
+        width: 100
+      }, {
+        title: 'MMRC评分',
+        dataIndex: 'mmrc',
+        width: 100
+      }, {
+        title: 'HADS-A评分',
+        dataIndex: 'had',
+        width: 100
+      },{
+        title: 'HADS-D评分',
+        dataIndex: 'hadd',
+        width: 100
+      }, {
+        title: 'lcq总评分',
+        dataIndex: 'lcq',
+        width: 100
+      }, {
+        title: 'lcq生理评分',
+        dataIndex: 'lcqSl',
+        width: 100
+      }, {
+        title: 'lcq心理评分',
+        dataIndex: 'lcqXl',
+        width: 100
+      }, {
+        title: 'lcq社会评分',
+        dataIndex: 'lcqSh',
+        width: 100
+      }, {
+        title: 'qolb身体评分',
+        dataIndex: 'qolb1',
+        width: 100
+      }, {
+        title: 'qolb角色评分',
+        dataIndex: 'qolb2',
+        width: 100
+      }, {
+        title: 'qolb活力评分',
+        dataIndex: 'qolb3',
+        width: 100
+      }, {
+        title: 'qolb情绪评分',
+        dataIndex: 'qolb4',
+        width: 100
+      }, {
+        title: 'qolb社会评分',
+        dataIndex: 'qolb5',
+        width: 100
+      }, {
+        title: 'qolb医疗评分',
+        dataIndex: 'qolb6',
+        width: 100
+      }, {
+        title: 'qolb健康评分',
+        dataIndex: 'qolb7',
+        width: 100
+      }, {
+        title: 'qolb呼吸评分',
+        dataIndex: 'qolb8',
+        width: 100
+      }],
+      createArr: [],
+      submitArr: []
+    }
+  },
+  created() {
+    // this.scroll = {
+    //   X: '9999999px',
+    //   y: window.screen.height - 400 + 'px'
+    // }
+    // this.scroll.x = 9999999 + 'px'
+    this.scroll.y = window.screen.height - 400 + 'px'
+  },
+  filters: {
+    visitFilter(type) {
+      return visitMap[type].text;
+    }
+  },
+  mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  },
+  methods: {
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    clearForm() {
+      this.queryParam = {}
+      this.createArr = []
+      this.submitArr = []
+    },
+    tableSearch(type) {
+      this.queryParam.isUser = type
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    refreshTable() {
+      this.advanced = false
+      this.$refs.table.refresh()
+    },
+    changeCreate(time) {
+      this.createArr = time;
+      this.queryParam.createDateStart = moment(time[0]).format('YYYY-MM-DD')
+      this.queryParam.createDateEnd = moment(time[1]).format('YYYY-MM-DD')
+    },
+    changeSubmit(time) {
+      this.submitArr = time;
+      this.queryParam.submitDateStart = moment(time[0]).format('YYYY-MM-DD')
+      this.queryParam.submitDateEnd = moment(time[1]).format('YYYY-MM-DD')
+    },
+    _export() {
+      window.open(this.baseUrl + 'patientReport/export')
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+
+/deep/ .ant-table td {
+  white-space: nowrap;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/task/SelectReport.vue b/src/views/task/SelectReport.vue
new file mode 100644
index 0000000000..9898b4baa7
--- /dev/null
+++ b/src/views/task/SelectReport.vue
@@ -0,0 +1,106 @@
+<template>
+  <a-modal title="选择报告" :width="800" :destroyOnClose="destroyOnClose" :bodyStyle="bodyStyle" :centered="centered" :visible="visible" :confirmLoading="confirmLoading" @ok="checkuUser" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-table :columns="columns" rowKey="reportCollectDetailId" :rowSelection="rowSelection" :dataSource="data" :pagination="pagination" :loading="loading" @change="handleTableChange">
+      </a-table>
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+import { getImportDataList } from '@/api/report'
+import moment from 'moment'
+import _ from 'lodash'
+const columns = [{
+    title: '入组编号',
+    dataIndex: 'fileBasisCode'
+  },
+  {
+    title: '患者姓名',
+    dataIndex: 'patientName'
+  },
+  {
+    title: '报告名称',
+    dataIndex: 'reportTypeName'
+  },
+  {
+    title: '采集日期',
+    dataIndex: 'collectDate',
+    customRender: collectDate => moment(collectDate).format('YYYY-MM-DD')
+  }
+];
+export default {
+  name: 'SelectReport',
+  data() {
+    return {
+      data: [],
+      pagination: {
+        defaultPageSize: 5,
+        pageSize: 5,
+        hideOnSinglePage: true,
+        total: 0
+      },
+      loading: false,
+      columns,
+      visible: false,
+      confirmLoading: false,
+      destroyOnClose: true,
+      centered: true,
+      bodyStyle: {
+        height: '480px',
+        overflow: 'auto'
+      },
+      patientId: undefined,
+      typeId: undefined,
+      selectedData: {}
+    }
+  },
+  methods: {
+    add(patientId, typeId) {
+      this.visible = true
+      this.confirmLoading = true
+      this.selectedData = {}
+      this.patientId = patientId
+      this.typeId = typeId
+      this.data = []
+      this.getImportDataList(1, this.pagination.pageSize);
+    },
+    checkuUser() {
+      if (JSON.stringify(this.selectedData) == '{}') {
+        this.$message.error('您还未选择要导入的报告!')
+        return
+      }
+      this.$emit('listen', this.selectedData);
+      this.visible = false
+    },
+    handleCancel() {
+      this.visible = false
+    },
+    handleTableChange(pagination, filters, sorter) {
+      this.getImportDataList(pagination.current, pagination.pageSize)
+    },
+    getImportDataList(pageNumber, pageSize) {
+      const params = new URLSearchParams()
+      params.append('pageNumber', pageNumber)
+      params.append('pageSize', pageSize)
+      params.append('patientId', this.patientId)
+      params.append('reportTypeId', this.typeId)
+      getImportDataList(params).then(res => {
+        this.data = res.data
+        this.pagination.total = res.total
+        this.confirmLoading = false
+      });
+    }
+  },
+  computed: {
+    rowSelection() {
+      const { selectedRowKeys } = this;
+      return {
+        type: 'radio',
+        onChange: (selectedRowKeys, selectedRows) => {
+          this.selectedData = selectedRows[0];
+        }
+      };
+    }
+  }
+};
+</script>
\ No newline at end of file
diff --git a/src/views/task/components/mask-11.vue b/src/views/task/components/mask-11.vue
new file mode 100644
index 0000000000..1fcc731bec
--- /dev/null
+++ b/src/views/task/components/mask-11.vue
@@ -0,0 +1,1072 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!</p>
+              <div class="title">1.呼吸系统相关治疗</div>
+              <a-form-item label="(1) 长期氧疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b1', {...require1, initialValue: initValue('b1')}]">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(2) 无创辅助通气:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b2', {...require1, initialValue: initValue('b2')}]">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(3) 患者是否行有规律的物理治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b3', {...require1, initialValue: initValue('b3')}]" @change="changeRadio($event, 'controlb3')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb3">
+                <a-form-item label="治疗方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b31', {...selectRequired, initialValue: initValue('b31', 'array')}]">
+                    <a-checkbox value="1">手动拍击背部排痰</a-checkbox>
+                    <a-checkbox value="2">体位引流</a-checkbox>
+                    <a-checkbox value="3">规律锻炼身体</a-checkbox>
+                    <a-checkbox value="4">借助排痰仪器</a-checkbox>
+                    <a-checkbox value="5">无</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="患者是否参加肺康复治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b32', {...selectRequired, initialValue: initValue('b32')}]">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="2">未听说过有这种治疗</a-radio>
+                    <a-radio value="3">因共病不适合</a-radio>
+                    <a-radio value="4">患者拒绝参加</a-radio>
+                    <a-radio value="5">想参加但未能参加</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+              </div>
+              <a-form-item label="(4) 有规律的呼吸疾病药物治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b4', {...require1, initialValue: initValue('b4')}]" @change="changeRadio($event, 'controlb4')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb4">
+                <a-form-item label="长期性抗生素治疗(多选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b41', {...selectRequired, initialValue: initValue('b41', 'array')}]">
+                    <a-checkbox value="1">阿奇霉素</a-checkbox>
+                    <a-checkbox value="2">克拉霉素</a-checkbox>
+                    <a-checkbox value="3">红霉素</a-checkbox>
+                    <a-checkbox value="4" @change="changeSelect($event, 'controlb41')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他抗生素:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb41">
+                  <a-input style="width: 240px;" v-decorator="['b414', {...inputRequired, initialValue: initValue('b414')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="吸入/雾化抗生素药物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b42', {...inputRequired, initialValue: initValue('b42')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="祛痰类药物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b43', {...selectRequired, initialValue: initValue('b43', 'array')}]">
+                    <a-checkbox value="1">N乙酰半胱氨酸</a-checkbox>
+                    <a-checkbox value="2">氨溴索</a-checkbox>
+                    <a-checkbox value="3">桉柠蒎</a-checkbox>
+                    <a-checkbox value="4">羧甲司坦</a-checkbox>
+                    <a-checkbox value="5">厄多司坦</a-checkbox>
+                    <a-checkbox value="6">福多司坦</a-checkbox>
+                    <a-checkbox value="7" @change="changeSelect($event, 'controlb43')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他祛痰类药物::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb43">
+                  <a-input style="width: 240px;" v-decorator="['b431', {...inputRequired, initialValue: initValue('b431')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="吸入治疗(多选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b', {...selectRequired, initialValue: initValue('b', 'array')}]" class="control-m-line">
+                    <a-checkbox value="0">无</a-checkbox>
+                    <a-checkbox value="1" @change="changeSelect($event, 'controlb01')">吸入激素</a-checkbox>
+                    <a-checkbox value="2" @change="changeSelect($event, 'controlb02')">吸入激素/长效β受体激动剂</a-checkbox>
+                    <a-checkbox value="3" @change="changeSelect($event, 'controlb03')">长效抗胆碱能药物</a-checkbox>
+                    <a-checkbox value="4" @change="changeSelect($event, 'controlb04')">长效β受体激动剂</a-checkbox>
+                    <a-checkbox value="5" @change="changeSelect($event, 'controlb05')">白三烯受体拮抗剂</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="吸入激素:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb01">
+                  <a-checkbox-group v-decorator="['b44', {...selectRequired, initialValue: initValue('b44', 'array')}]">
+                    <a-checkbox value="0">无</a-checkbox>
+                    <a-checkbox value="1">布地奈德</a-checkbox>
+                    <a-checkbox value="2">氟替卡松</a-checkbox>
+                    <a-checkbox value="3" @change="changeSelect($event, 'controlb44')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他激素::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb44">
+                  <a-input style="width: 240px;" v-decorator="['b441', {...inputRequired, initialValue: initValue('b441')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="吸入激素/长效β受体激动剂:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb02">
+                  <a-checkbox-group v-decorator="['b45', {...selectRequired, initialValue: initValue('b45', 'array')}]">
+                    <a-checkbox value="0">无</a-checkbox>
+                    <a-checkbox value="1">布地奈德/福莫特罗</a-checkbox>
+                    <a-checkbox value="2">沙美特罗/氟替卡松</a-checkbox>
+                    <a-checkbox value="3" @change="changeSelect($event, 'controlb45')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他激素::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb45">
+                  <a-input style="width: 240px;" v-decorator="['b451', {...inputRequired, initialValue: initValue('b451')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="长效抗胆碱能药物:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb03">
+                  <a-checkbox-group v-decorator="['b46', {...selectRequired, initialValue: initValue('b46', 'array')}]">
+                    <a-checkbox value="1">噻托嗅按</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="长效β受体激动剂/长效抗胆碱能药物名称:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b47', {...inputRequired, initialValue: initValue('b47')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="长效β受体激动剂:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb04">
+                  <a-checkbox-group v-decorator="['b48', {...selectRequired, initialValue: initValue('b48', 'array')}]">
+                    <a-checkbox value="0">无</a-checkbox>
+                    <a-checkbox value="1">福莫特罗</a-checkbox>
+                    <a-checkbox value="2">茚达特罗</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="白三烯受体拮抗剂:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb05">
+                  <a-checkbox-group v-decorator="['b49', {...selectRequired, initialValue: initValue('b49', 'array')}]">
+                    <a-checkbox value="0">无</a-checkbox>
+                    <a-checkbox value="1">孟鲁司特</a-checkbox>
+                    <a-checkbox value="2">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="止血药物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b410', {...selectRequired, initialValue: initValue('b410', 'array')}]">
+                    <a-checkbox value="0">无</a-checkbox>
+                    <a-checkbox value="1">安络血</a-checkbox>
+                    <a-checkbox value="2">云南白药</a-checkbox>
+                    <a-checkbox value="3">垂体</a-checkbox>
+                    <a-checkbox value="4">止血敏</a-checkbox>
+                    <a-checkbox value="5">止血芳酸</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="雾化治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b411', {...require1, initialValue: initValue('b411')}]" @change="changeRadio($event, 'controlb411')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controlb411">
+                  <a-form-item label="雾化药物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['b4111', {...selectRequired, initialValue: initValue('b4111', 'array')}]">
+                      <a-checkbox value="1">乙酰半胱氨酸</a-checkbox>
+                      <a-checkbox value="2" @change="changeSelect($event, 'controlb4111')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <a-form-item label="其他雾化药物:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb4111">
+                    <a-input style="width: 240px;" v-decorator="['b4112', {...inputRequired, initialValue: initValue('b4112')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                </div>
+                <a-form-item label="ICS:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b412', {...selectRequired, initialValue: initValue('b412', 'array')}]">
+                    <a-checkbox value="0">无</a-checkbox>
+                    <a-checkbox value="1">布地奈德</a-checkbox>
+                    <a-checkbox value="2" @change="changeSelect($event, 'controlb412')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他ICS:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb412">
+                  <a-input style="width: 240px;" v-decorator="['b4121', {...inputRequired, initialValue: initValue('b4121')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="支气管扩张剂:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b413', {...selectRequired, initialValue: initValue('b413', 'array')}]">
+                    <a-checkbox value="0">无</a-checkbox>
+                    <a-checkbox value="1">异丙托溴胺</a-checkbox>
+                    <a-checkbox value="2">沙丁胺醇</a-checkbox>
+                    <a-checkbox value="3">特布他林</a-checkbox>
+                    <a-checkbox value="4">复方异丙托溴铵(异丙托溴胺+沙丁胺醇)</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+              </div>
+              <a-form-item label="(5) ABPA相关治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b5', {...require1, initialValue: initValue('b5')}]" @change="changeRadio($event, 'controlb5')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="抗真菌药物:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb5">
+                <a-checkbox-group v-decorator="['b52', {...selectRequired, initialValue: initValue('b52', 'array')}]">
+                  <a-checkbox value="1">伊曲康唑</a-checkbox>
+                  <a-checkbox value="2">伏立康唑</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="(6) 免疫球蛋白缺乏相关治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b6', {...require1, initialValue: initValue('b6')}]" @change="changeRadio($event, 'controlb6')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb6">
+                <a-form-item label="静脉注射免疫球蛋白药物名称:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b61', {...inputRequired, initialValue: initValue('b61')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(7) 患者是否曾接收疫苗治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b71', {...require1, initialValue: initValue('b71')}]" @change="changeRadio($event, 'controlb7')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb7">
+                <a-form-item label="疫苗治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b7', {...selectRequired, initialValue: initValue('b7', 'array')}]" class="control-m-line">
+                    <a-checkbox value="1">肺炎链球菌多糖疫苗(如:PSV23)</a-checkbox>
+                    <a-checkbox value="2">肺炎链球菌辅助疫苗(如:PCV13)</a-checkbox>
+                    <a-checkbox value="3">过去1年内患者接受过流感疫苗</a-checkbox>
+                    <a-checkbox value="4" @change="changeSelect($event, 'controlb72')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他疫苗:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb72">
+                  <a-input style="width: 240px;" v-decorator="['b72', {...inputRequired, initialValue: initValue('b72')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <div class="title">2.非呼吸系统相关治疗</div>
+              <a-form-item label="(1) 调脂" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['b171', {...require1, initialValue: initValue('b171')}]">
+                  <a-radio value="1">他汀类</a-radio>
+                  <a-radio value="2">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="抗凝(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-checkbox-group v-decorator="['b172', {...selectRequired, initialValue: initValue('b172', 'array')}]">
+                  <a-checkbox value="1">阿司匹林</a-checkbox>
+                  <a-checkbox value="2">非阿司匹林抑制剂(如:氯吡格雷)</a-checkbox>
+                  <a-checkbox value="3">华法林/口服抗凝药</a-checkbox>
+                  <a-checkbox value="4">无</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import _ from 'lodash'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, recoverSubmit } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'task11',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      markName: 'bnsf',
+      title: '半年随访',
+      openKeys: [],
+      defaultSelectedKeys: [11],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      baselineFormStyle: {
+        // height: '444px',
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 7 },
+        md: { span: 7 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 17 },
+        md: { span: 17 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 4, offset: 7 }
+      },
+      wrapperOffset: {
+        md: { span: 13 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      executeStatus: false,
+      spinning: false,
+      controlb3: false,
+      controlb4: false,
+      controlb41: false,
+      controlb44: false,
+      controlb411: false,
+      controlb412: false,
+      controlb4111: false,
+      controlb5: false,
+      controlb6: false,
+      controlb7: false,
+      controlb72: false,
+      controlb01: false,
+      controlb02: false,
+      controlb03: false,
+      controlb04: false,
+      controlb05: false,
+      controlb45: false,
+      controlb43: false,
+      bnsf: undefined,
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+      .catch(error => {
+        console.log(error)
+      })
+    this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    getFormData() {
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          if (res.data && res.data.bnsf)
+            that.bnsf = that.dealAnswers(res.data.bnsf)
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.bnsf) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.bnsf[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.bnsf[key])
+      } else if (type === 'array') {
+        return this.bnsf[key].split(',')
+      } else {
+        return this.bnsf[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+        console.log(answer)
+      if (answer && !_.isEmpty(answer)) {
+        var splitArr = []
+        if (answer.b3 === 1) {
+          this.controlb3 = true
+        }
+        if (answer.b4 === 1) {
+          this.controlb4 = true
+        }
+        if (answer.b5 === 1) {
+          this.controlb5 = true
+        }
+        if (answer.b6 === 1) {
+          this.controlb6 = true
+        }
+        if (answer.b71 === 1) {
+        console.log(answer.b71)
+          this.controlb7 = true
+        }
+        if (answer.b7) {
+          splitArr = answer.b7.split(',')
+          if (splitArr.indexOf('4') > -1) {
+            this.controlb72 = true
+          }
+        }
+        if (answer.b41) {
+          splitArr = answer.b41.split(',')
+          if (splitArr.indexOf('4') > -1) {
+            this.controlb41 = true
+          }
+        }
+        if (answer.b43) {
+          splitArr = answer.b43.split(',')
+          if (splitArr.indexOf('7') > -1) {
+            this.controlb43 = true
+          }
+        }
+        if (answer.b) {
+          splitArr = answer.b.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controlb01 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controlb02 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.controlb03 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.controlb04 = true
+          }
+          if (splitArr.indexOf('5') > -1) {
+            this.controlb05 = true
+          }
+        }
+        if (answer.b44) {
+          splitArr = answer.b44.split(',')
+          if (splitArr.indexOf('3') > -1) {
+            this.controlb44 = true
+          }
+        }
+        if (answer.b45) {
+          splitArr = answer.b45.split(',')
+          if (splitArr.indexOf('3') > -1) {
+            this.controlb45 = true
+          }
+        }
+        if (answer.b411 === 1) {
+          this.controlb411 = true
+        }
+        if (answer.b4111) {
+          splitArr = answer.b4111.split(',')
+          if (splitArr.indexOf('2') > -1) {
+            this.controlb4111 = true
+          }
+        }
+        if (answer.b412) {
+          splitArr = answer.b412.split(',')
+          if (splitArr.indexOf('2') > -1) {
+            this.controlb412 = true
+          }
+        }
+      }
+      return answer
+    },
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    changeRadios(e, t) {
+      e.forEach(element => {
+        if (element === '4') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      });
+    },
+    handleClick(e) {
+      this.maskId = e.key
+      if ((e.key >= 37 && e.key <= 42) || (e.key >= 45 && e.key <= 50)) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + this.maskId)
+      } else {
+        this.$router.replace('/list/task/' + this.patientBasisId + '/' + this.maskId)
+      }
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          var that = this
+          re = {
+            ...re,
+            'b31': typeof re['b31'] !== 'undefined' ? re['b31'].join(',') : '',
+            'b41': typeof re['b41'] !== 'undefined' ? re['b41'].join(',') : '',
+            'b43': typeof re['b43'] !== 'undefined' ? re['b43'].join(',') : '',
+            'b': typeof re['b'] !== 'undefined' ? re['b'].join(',') : '',
+            'b44': typeof re['b44'] !== 'undefined' ? re['b44'].join(',') : '',
+            'b45': typeof re['b45'] !== 'undefined' ? re['b45'].join(',') : '',
+            'b46': typeof re['b46'] !== 'undefined' ? re['b46'].join(',') : '',
+            'b48': typeof re['b48'] !== 'undefined' ? re['b48'].join(',') : '',
+            'b49': typeof re['b49'] !== 'undefined' ? re['b49'].join(',') : '',
+            'b410': typeof re['b410'] !== 'undefined' ? re['b410'].join(',') : '',
+            'b4111': typeof re['b4111'] !== 'undefined' ? re['b4111'].join(',') : '',
+            'b412': typeof re['b412'] !== 'undefined' ? re['b412'].join(',') : '',
+            'b413': typeof re['b413'] !== 'undefined' ? re['b413'].join(',') : '',
+            'b52': typeof re['b52'] !== 'undefined' ? re['b52'].join(',') : '',
+            'b7': typeof re['b7'] !== 'undefined' ? re['b7'].join(',') : '',
+            'b172': typeof re['b172'] !== 'undefined' ? re['b172'].join(',') : ''
+          }
+          console.log(re)
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.bnsf && this.bnsf.bnsfId) {
+            re.bnsfId = this.bnsf.bnsfId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      var that = this
+      re = {
+        ...re,
+        'b31': typeof re['b31'] !== 'undefined' ? re['b31'].join(',') : '',
+        'b41': typeof re['b41'] !== 'undefined' ? re['b41'].join(',') : '',
+        'b43': typeof re['b43'] !== 'undefined' ? re['b43'].join(',') : '',
+        'b': typeof re['b'] !== 'undefined' ? re['b'].join(',') : '',
+        'b44': typeof re['b44'] !== 'undefined' ? re['b44'].join(',') : '',
+        'b45': typeof re['b45'] !== 'undefined' ? re['b45'].join(',') : '',
+        'b46': typeof re['b46'] !== 'undefined' ? re['b46'].join(',') : '',
+        'b48': typeof re['b48'] !== 'undefined' ? re['b48'].join(',') : '',
+        'b49': typeof re['b49'] !== 'undefined' ? re['b49'].join(',') : '',
+        'b410': typeof re['b410'] !== 'undefined' ? re['b410'].join(',') : '',
+        'b4111': typeof re['b4111'] !== 'undefined' ? re['b4111'].join(',') : '',
+        'b412': typeof re['b412'] !== 'undefined' ? re['b412'].join(',') : '',
+        'b413': typeof re['b413'] !== 'undefined' ? re['b413'].join(',') : '',
+        'b52': typeof re['b52'] !== 'undefined' ? re['b52'].join(',') : '',
+        'b7': typeof re['b7'] !== 'undefined' ? re['b7'].join(',') : '',
+        'b172': typeof re['b172'] !== 'undefined' ? re['b172'].join(',') : ''
+      }
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.bnsf && this.bnsf.bnsfId) {
+        re.bnsfId = this.bnsf.bnsfId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', that.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+            .catch(error => {
+              console.log(error)
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    withdraw(){
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.bnsf.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+    padding-top: 52px;
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .label-overflow .ant-form-item-label {
+      line-height: 20px;
+      position: relative;
+      top: 12px;
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+@media screen and (max-width: 1366px) {
+  .control-m-line.ant-checkbox-group {
+    top: 10px;
+    position: relative;
+  }
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/task/components/mask-14.vue b/src/views/task/components/mask-14.vue
new file mode 100644
index 0000000000..6174e11f48
--- /dev/null
+++ b/src/views/task/components/mask-14.vue
@@ -0,0 +1,1573 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form" :layout="formLayout">
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="clearfix" style="position: relative; top: 20px;">
+              <a-button class="btn fr" type="primary" @click="_importData">导入数据</a-button>
+            </div>
+
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!</p>
+              <div class="title">1.基本病史</div>
+              <a-form-item label="(1) 采集标本类型" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-checkbox-group v-decorator="['a1', {...selectRequired, initialValue: initValue('a1', 'array')}]">
+                  <a-checkbox value="1">全血</a-checkbox>
+                  <a-checkbox value="2">血清</a-checkbox>
+                  <a-checkbox value="3">未采</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="(2) 患者支扩确诊时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-month-picker placeholder="请选择" @change="changeDate" v-decorator="['a3', {...dateRequire, initialValue: initValue('a3', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-month-picker>
+              </a-form-item>
+              <a-form-item label="(3) 访视类型" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b23', {...selectRequired, initialValue: initValue('b23')}]">
+                  <a-radio value="1">急性加重期</a-radio>
+                  <a-radio value="2">稳定期</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(4) 主要临床症状(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-checkbox-group v-decorator="['a4', {...selectRequired, initialValue: initValue('a4', 'array')}]" class="control-m-line">
+                  <a-checkbox value="1" :checked="controla44" @change="changeSelect($event, 'controla44')">咳嗽</a-checkbox>
+                  <a-checkbox value="2" :checked="controla41" @change="changeSelect($event, 'controla41')">咳痰</a-checkbox>
+                  <a-checkbox value="7">活动后气促</a-checkbox>
+                  <a-checkbox value="3" :checked="controla43" @change="changeSelect($event, 'controla43')">痰血</a-checkbox>
+                  <a-checkbox value="4" :checked="controla42" @change="changeSelect($event, 'controla42')">咯血</a-checkbox>
+                  <a-checkbox value="10" :checked="controla45" @change="changeSelect($event, 'controla45')">疲劳</a-checkbox>
+                  <a-checkbox value="5">胸闷</a-checkbox>
+                  <a-checkbox value="6">喘息</a-checkbox>
+                  <a-checkbox value="8">胸痛</a-checkbox>
+                  <a-checkbox value="9">发热</a-checkbox>
+                  <a-checkbox value="11">纳差</a-checkbox>
+                  <a-checkbox value="12">消瘦</a-checkbox>
+                  <a-checkbox value="14">中耳炎</a-checkbox>
+                  <a-checkbox value="15">听力丧失</a-checkbox>
+                  <a-checkbox value="13" :checked="controla413" @change="changeSelect($event, 'controla413')">其他</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="咳嗽程度" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla44">
+                <a-radio-group v-decorator="['a46', {...selectRequired, initialValue: initValue('a46')}]">
+                  <a-radio value="1">轻度咳嗽</a-radio>
+                  <a-radio value="2">中度咳嗽</a-radio>
+                  <a-radio value="3">重度咳嗽</a-radio>
+                  <a-radio value="4">极重度咳嗽</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="痰量" v-if="controla41" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input addonAfter="ml/日" style="width: 240px;" v-decorator="['a41', {...inputRequired, initialValue: initValue('a41')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="痰颜色评分(单选)" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla41">
+                <a-popover>
+                  <template slot="content">
+                    <img src="../../../assets/murry.png" style="height: 260px;" />
+                  </template>
+                  <a-icon type="exclamation-circle" style="position: relative;left: -20px;color: #0399ec;cursor: pointer;" />
+                </a-popover>
+                <a-radio-group v-decorator="['a43', {...selectRequired, initialValue: initValue('a43')}]">
+                  <a-radio value="1">白色或清亮</a-radio>
+                  <a-radio value="2">黄白色</a-radio>
+                  <a-radio value="3">黄绿色</a-radio>
+                  <a-radio value="4">浅至深褐色</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="痰血量" v-if="controla43" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input addonAfter="ml/日" style="width: 240px;" v-decorator="['todo', {...inputRequired, initialValue: initValue('todo')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="咯血量(最多)" v-if="controla42" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input addonAfter="ml/日" style="width: 240px;" v-decorator="['a42', {...inputRequired, initialValue: initValue('a42')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="疲劳程度" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla45">
+                <a-radio-group v-decorator="['a47', {...selectRequired, initialValue: initValue('a47')}]">
+                  <a-radio value="1">我感到有点疲劳</a-radio>
+                  <a-radio value="2">我感到疲劳但仍然可以做我想做的事情</a-radio>
+                  <a-radio value="3">我感到疲劳而不能做一些我想做的事情</a-radio>
+                  <a-radio value="4">我感到非常疲劳而无法进行日常活动</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="其他症状" v-if="controla413" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['a45', {...inputRequired, initialValue: initValue('a45')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <div class="title">2.既往病史</div>
+              <a-form-item label="(1) 过去两年的住院急性加重次数" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input addonAfter="次" style="width: 240px;" v-decorator="['b2', {...inputRequired, initialValue: initValue('b2')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(2) 过去一年的住院急性加重次数" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input addonAfter="次" style="width: 240px;" v-decorator="['b3', {...inputRequired, initialValue: initValue('b3')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(3) 过去一年的急性加重次数" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input addonAfter="次" style="width: 240px;" v-decorator="['b1', {...inputRequired, initialValue: initValue('b1')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(4) 最后一次因急性加重住院的时间" class="tipTxt" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-date-picker placeholder="请选择" style="width: 240px;" :disabledDate="disabledDate" v-decorator="['b4', { initialValue: initValue('b4', 'time')}]"></a-date-picker>
+              </a-form-item>
+              <a-form-item label="(5) 有无病因相关的病史及事件(可多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-checkbox-group v-decorator="['b5', {...selectRequired, initialValue: initValue('b5', 'array')}]">
+                  <a-checkbox value="1" :disabled="detect('b5', '7') || initB5">麻疹</a-checkbox>
+                  <a-checkbox value="2" :disabled="detect('b5', '7') || initB5">百日咳</a-checkbox>
+                  <a-checkbox value="3" :disabled="detect('b5', '7') || initB5">肺结核</a-checkbox>
+                  <a-checkbox value="4" :disabled="detect('b5', '7') || initB5">NTM</a-checkbox>
+                  <a-checkbox value="5" :disabled="detect('b5', '7') || initB5">溺水</a-checkbox>
+                  <a-checkbox value="8" :disabled="detect('b5', '7') || initB5">肺炎</a-checkbox>
+                  <a-checkbox value="6" :disabled="detect('b5', '7') || initB5" :checked="controlb51" @change="changeSelect($event, 'controlb51')">其他</a-checkbox>
+                  <a-checkbox value="7" @change="handleNone($event, 'b5', '7', ['controlb51'])">无</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb51">
+                <a-input style="width: 240px;" v-decorator="['b51', {...inputRequired, initialValue: initValue('b51')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(6) 目前合并呼吸系统相关疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-checkbox-group v-decorator="['b6', {...selectRequired, initialValue: initValue('b6', 'array')}]">
+                  <a-checkbox value="1" :disabled="detect('b6', '6') || initB6" :checked="controlb61" @change="changeSelect($event, 'controlb61')">鼻炎</a-checkbox>
+                  <a-checkbox value="2" :disabled="detect('b6', '6') || initB6" :checked="controlb62" @change="changeSelect($event, 'controlb62')">鼻窦炎</a-checkbox>
+                  <a-checkbox value="3" :disabled="detect('b6', '6') || initB6" :checked="controlb63" @change="changeSelect($event, 'controlb63')">鼻息肉</a-checkbox>
+                  <a-checkbox value="4" :disabled="detect('b6', '6') || initB6" :checked="controlb64" @change="changeSelect($event, 'controlb64')">哮喘</a-checkbox>
+                  <a-checkbox value="5" :disabled="detect('b6', '6') || initB6" :checked="controlb65" @change="changeSelect($event, 'controlb65')">慢阻肺</a-checkbox>
+                  <a-checkbox value="8" :disabled="detect('b6', '6') || initB6" :checked="controlb68" @change="changeSelect($event, 'controlb68')">中耳炎</a-checkbox>
+                  <a-checkbox value="6" @change="handleNone($event, 'b6', '6', ['controlb61', 'controlb62', 'controlb63', 'controlb64', 'controlb65', 'controlb68'])">无</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item class="no-border" label="鼻炎具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb61">
+                <a-month-picker placeholder="请选择" style="width: 240px;" v-decorator="['b61', { initialValue: initValue('b61', 'time')}]" :disabledDate="disabledDate"></a-month-picker>
+              </a-form-item>
+              <a-form-item class="no-border" label="鼻窦炎具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb62">
+                <a-month-picker placeholder="请选择" style="width: 240px;" v-decorator="['b62', { initialValue: initValue('b62', 'time')}]" :disabledDate="disabledDate"></a-month-picker>
+              </a-form-item>
+              <a-form-item class="no-border" label="鼻息肉具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb63">
+                <a-month-picker placeholder="请选择" style="width: 240px;" v-decorator="['b63', { initialValue: initValue('b63', 'time')}]" :disabledDate="disabledDate"></a-month-picker>
+              </a-form-item>
+              <a-form-item class="no-border" label="哮喘具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb64">
+                <a-month-picker placeholder="请选择" style="width: 240px;" v-decorator="['b64', {...dateRequire, initialValue: initValue('b64', 'time')}]" :disabledDate="disabledDate"></a-month-picker>
+              </a-form-item>
+              <a-form-item class="no-border" label="慢阻肺具体诊断日期" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb65">
+                <a-month-picker placeholder="请选择" style="width: 240px;" v-decorator="['b65', {...dateRequire, initialValue: initValue('b65', 'time')}]" :disabledDate="disabledDate"></a-month-picker>
+              </a-form-item>
+              <a-form-item label="(7) 有无其他疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b70', {...require2, initialValue: initValue('b70')}]" @change="changeRadio($event, 'controlb70')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb70">
+                <a-form-item label="1.心脑血管系统" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b7', {...require2, initialValue: initValue('b7')}]" @change="changeRadio($event, 'controlb7')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="心脑血管系统疾病类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb7">
+                  <a-checkbox-group v-decorator="['b71', {...selectRequired, initialValue: initValue('b71', 'array')}]" class="control-m-line">
+                    <a-checkbox value="1">心梗</a-checkbox>
+                    <a-checkbox value="2">心绞痛</a-checkbox>
+                    <a-checkbox value="3">冠心病</a-checkbox>
+                    <a-checkbox value="4">慢性心衰</a-checkbox>
+                    <a-checkbox value="5">心律失常</a-checkbox>
+                    <a-checkbox value="6">心脏瓣膜病</a-checkbox>
+                    <a-checkbox value="7">肺动脉高压</a-checkbox>
+                    <a-checkbox value="8">高血压病</a-checkbox>
+                    <a-checkbox value="9">中风或短暂性缺血发作</a-checkbox>
+                    <a-checkbox value="10">外周血管疾病</a-checkbox>
+                    <a-checkbox value="11" :checked="controlb72" @change="changeSelect($event, 'controlb72')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="其他心脑血管疾病" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb7 && controlb72">
+                  <a-input style="width: 240px;" v-decorator="['b72', {...inputRequired, initialValue: initValue('b72')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="2.消化系统疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b8', {...require2, initialValue: initValue('b8')}]" @change="changeRadio($event, 'controlb8')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="消化系统疾病类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb8">
+                  <a-checkbox-group v-decorator="['b81', {...selectRequired, initialValue: initValue('b81', 'array')}]">
+                    <a-checkbox value="1">炎症性肠病</a-checkbox>
+                    <a-checkbox value="2">胃食管反流</a-checkbox>
+                    <a-checkbox value="3">消化道溃疡</a-checkbox>
+                    <a-checkbox value="4">慢性肝病</a-checkbox>
+                    <a-checkbox value="5" :checked="controlb82" @change="changeSelect($event, 'controlb82')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="其他消化系统疾病" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb8 && controlb82">
+                  <a-input style="width: 240px;" v-decorator="['b82', {...inputRequired, initialValue: initValue('b82')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="3.内分泌系统" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b9', {...require2, initialValue:  initValue('b9')}]" @change="changeRadio($event, 'controlb9')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="内分泌系统疾病类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb9">
+                  <a-checkbox-group v-decorator="['b91', {...selectRequired, initialValue: initValue('b91', 'array')}]">
+                    <a-checkbox value="1">糖尿病</a-checkbox>
+                    <a-checkbox value="2">骨质疏松</a-checkbox>
+                    <a-checkbox value="3">高脂血症</a-checkbox>
+                    <a-checkbox value="4">甲亢</a-checkbox>
+                    <a-checkbox value="5">甲减</a-checkbox>
+                    <a-checkbox value="6">高尿酸血症</a-checkbox>
+                    <a-checkbox value="7" :checked="controlb917" @change="changeSelect($event, 'controlb917')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他内分泌系统疾病" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb9 && controlb917">
+                  <a-input style="width: 240px;" v-decorator="['b92', {...inputRequired, initialValue: initValue('b92')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="4.血液系统疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b10', {...require2, initialValue: initValue('b10')}]" @change="changeRadio($event, 'controlb10')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="血液系统疾病类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb10">
+                  <a-checkbox-group v-decorator="['b101', {...selectRequired, initialValue: initValue('b101', 'array')}]">
+                    <a-checkbox value="1">贫血</a-checkbox>
+                    <a-checkbox value="2">白血病</a-checkbox>
+                    <a-checkbox value="3">淋巴瘤</a-checkbox>
+                    <a-checkbox value="4" :checked="controlb1014" @change="changeSelect($event, 'controlb1014')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他血液系统疾病类型" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb1014">
+                  <a-input style="width: 240px;" v-decorator="['b102', {...inputRequired, initialValue: initValue('b102')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="5.泌尿系统疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b11', {...require2, initialValue: initValue('b11')}]" @change="changeRadio($event, 'controlb11')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="泌尿系统疾病类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb11">
+                  <a-checkbox-group v-decorator="['b111', {...selectRequired, initialValue: initValue('b111', 'array')}]">
+                    <a-checkbox value="1">慢性肾病</a-checkbox>
+                    <a-checkbox value="2">慢性尿路感染</a-checkbox>
+                    <a-checkbox value="3" :checked="controlb1113" @change="changeSelect($event, 'controlb1113')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="其他泌尿系统疾病类型:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb11 && controlb1113">
+                  <a-input style="width: 240px;" v-decorator="['b112', {...inputRequired, initialValue: initValue('b112')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="6.风湿系统疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b12', {...require2, initialValue: initValue('b12')}]" @change="changeRadio($event, 'controlb12')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="风湿系统疾病类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb12">
+                  <a-checkbox-group v-decorator="['b121', {...selectRequired, initialValue: initValue('b121', 'array')}]" class="control-m-line">
+                    <a-checkbox value="1">系统性红斑狼疮</a-checkbox>
+                    <a-checkbox value="2">类风湿性关节炎</a-checkbox>
+                    <a-checkbox value="3">干燥综合征</a-checkbox>
+                    <a-checkbox value="4">系统性硬化</a-checkbox>
+                    <a-checkbox value="5">皮肌炎</a-checkbox>
+                    <a-checkbox value="6" :checked="controlb122" @change="changeSelect($event, 'controlb122')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="其他风湿系统疾病类型:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb12 && controlb122">
+                  <a-input style="width: 240px;" v-decorator="['b122', {...inputRequired, initialValue: initValue('b122')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="7.是否有HIV" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b13', {...require1, initialValue: initValue('b13')}]">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="8.是否有恶性肿瘤" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b14', {...require1, initialValue: initValue('b14')}]" @change="changeRadio($event, 'controlb14')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controlb14">
+                  <a-form-item class="border-dotted" label="当前正患病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['b141', {...require1, initialValue: initValue('b141')}]">
+                      <a-radio value="1">是</a-radio>
+                      <a-radio value="-1">否</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item class="border-dotted" label="血液性" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['b142', {...require1, initialValue: initValue('b142')}]">
+                      <a-radio value="1">是</a-radio>
+                      <a-radio value="-1">否</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item class="border-dotted" label="肿瘤部位(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['b143', {...selectRequired, initialValue: initValue('b143', 'array')}]" class="control-m-line">
+                      <a-checkbox value="1">头颈部</a-checkbox>
+                      <a-checkbox value="2">肺</a-checkbox>
+                      <a-checkbox value="3">乳腺</a-checkbox>
+                      <a-checkbox value="4">胃肠道</a-checkbox>
+                      <!-- <a-checkbox value="5">小肠</a-checkbox>
+                      <a-checkbox value="6">结肠</a-checkbox> -->
+                      <a-checkbox value="5">肝</a-checkbox>
+                      <a-checkbox value="6">胰腺</a-checkbox>
+                      <a-checkbox value="7">肾</a-checkbox>
+                      <a-checkbox value="8">前列腺</a-checkbox>
+                      <a-checkbox value="9">膀胱</a-checkbox>
+                      <a-checkbox value="10">子宫及附件</a-checkbox>
+                      <a-checkbox value="11">骨</a-checkbox>
+                      <a-checkbox value="12">皮肤</a-checkbox>
+                      <a-checkbox value="13">脑</a-checkbox>
+                      <a-checkbox value="14" :checked="controlb144" @change="changeSelect($event, 'controlb144')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                </div>
+                <a-form-item class="no-border" label="其他肿瘤部位:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb14 && controlb144">
+                  <a-input style="width: 240px;" v-decorator="['b144', {...inputRequired, initialValue: initValue('b144')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="9.免疫缺陷" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b15', {...require2, initialValue: '-1'}]" @change="changeRadio($event, 'controlb15')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controlb15">
+                  <a-form-item class="border-dotted" label="B细胞缺陷类疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-input style="width: 240px;" v-decorator="['b151', {...inputRequired, initialValue: initValue('b151')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item class="border-dotted" label="T细胞及联合免疫缺陷病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-input style="width: 240px;" v-decorator="['b152', {...inputRequired, initialValue: initValue('b152')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item class="border-dotted" label="继发性免疫缺陷(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['b153', {...selectRequired, initialValue: initValue('b153', 'array')}]" class="control-m-line">
+                      <a-checkbox value="1">慢性淋巴性白血病</a-checkbox>
+                      <a-checkbox value="2">多发性骨髓瘤</a-checkbox>
+                      <a-checkbox value="3">血液肿瘤相关免疫缺陷</a-checkbox>
+                      <a-checkbox value="4">系统化疗后免疫缺陷</a-checkbox>
+                      <a-checkbox value="5">免疫抑制药物后免疫缺陷</a-checkbox>
+                      <a-checkbox value="6">干细胞移植</a-checkbox>
+                      <a-checkbox value="7">实体器官移植</a-checkbox>
+                      <a-checkbox value="8" :checked="controlb1538" @change="changeSelect($event, 'controlb1538')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <a-form-item class="no-border" label="其他继发性免疫缺陷:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb15 && controlb1538">
+                    <a-input style="width: 240px;" v-decorator="['b1538', {...inputRequired, initialValue: initValue('b1538')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item class="border-dotted" label="巨噬细胞缺陷疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-input style="width: 240px;" v-decorator="['b154', {...inputRequired, initialValue: initValue('b154')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item class="border-dotted" label="补体缺陷疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-input style="width: 240px;" v-decorator="['b155', {...inputRequired, initialValue: initValue('b155')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                </div>
+                <a-form-item label="10.其他疾病" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b161', {...selectRequired, initialValue: initValue('b161', 'array')}]">
+                    <a-checkbox value="1" @change="handleNone($event, 'b161', '1', ['controlb1615'])">无</a-checkbox>
+                    <a-checkbox value="2" :disabled="detect('b161', '1')">抑郁</a-checkbox>
+                    <a-checkbox value="3" :disabled="detect('b161', '1')">焦虑</a-checkbox>
+                    <a-checkbox value="4" :disabled="detect('b161', '1')">认知功能障碍</a-checkbox>
+                    <a-checkbox value="5" :disabled="detect('b161', '1')" :checked="controlb1615" @change="changeSelect($event, 'controlb1615')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="其他疾病类型:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb1615">
+                  <a-input style="width: 240px;" v-decorator="['b1611', {...inputRequired, initialValue: initValue('b1611')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(8) 其他系统相关治疗(非呼吸系统治疗)" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-checkbox-group v-decorator="['b17', {...selectRequired, initialValue: initValue('b17', 'array')}]" class="center">
+                  <a-checkbox value="1" :disabled="detect('b17', '10') || initB17">他汀类药物</a-checkbox>
+                  <a-checkbox value="2" :disabled="detect('b17', '10') || initB17">二甲双胍</a-checkbox>
+                  <a-checkbox value="3" :disabled="detect('b17', '10') || initB17">血管紧张素转换酶抑制剂</a-checkbox>
+                  <a-checkbox value="4" :disabled="detect('b17', '10') || initB17">血管紧张素受体拮抗剂</a-checkbox>
+                  <a-checkbox value="5" :disabled="detect('b17', '10') || initB17">阿司匹林</a-checkbox>
+                  <a-checkbox value="6" :disabled="detect('b17', '10') || initB17">非阿司匹林血小板抑制剂,如氯吡格雷</a-checkbox>
+                  <a-checkbox value="7" :disabled="detect('b17', '10') || initB17">华法林 /口服抗凝剂</a-checkbox>
+                  <a-checkbox value="8" :disabled="detect('b17', '10') || initB17">β-受体阻滞剂</a-checkbox>
+                  <a-checkbox value="9" :disabled="detect('b17', '10') || initB17">质子泵抑制剂</a-checkbox>
+                  <a-checkbox value="10" @change="handleNone($event, 'b17', '10')">无</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="(9) 家族史" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+              </a-form-item>
+              <a-form-item label="是否近亲结婚史" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['b181', {...require1, initialValue: initValue('b181')}]">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="既往直系亲属有无支扩" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['b182', {...require1, initialValue: initValue('b182')}]">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="遗传性疾病病史" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b183', {...require1, initialValue: initValue('b183')}]" @change="changeRadio($event, 'controlb1831')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="具体疾病名称" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlb1831">
+                <a-input style="width: 240px;" v-decorator="['b1831', {...inputRequired, initialValue: initValue('b1831')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(10) 吸烟史(单选)" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b19', {...selectRequired, initialValue: initValue('b19')}]" @change="changeRadio($event, 'controlb191')">
+                  <a-radio value="1">既往吸烟</a-radio>
+                  <a-radio value="2">已戒烟</a-radio>
+                  <a-radio value="3">无吸烟</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="吸烟指数" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlb191">
+                <a-input addonAfter="包*年" style="width: 240px;" v-decorator="['b191', {...inputRequired, initialValue: initValue('b191')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(11) 职业粉尘接触及生物燃料接触史" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b22', {...require2, initialValue: initValue('b22')}]">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(12) 胸部手术病史" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b20', {...require2, initialValue: initValue('b20')}]" @change="changeRadio($event, 'controlb20')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="手术类型(多选)" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlb20">
+                <a-checkbox-group v-decorator="['b201', {...selectRequired, initialValue: initValue('b201', 'array')}]">
+                  <a-checkbox value="1">肺叶切除术</a-checkbox>
+                  <a-checkbox value="2">胸膜剥脱术</a-checkbox>
+                  <a-checkbox value="3">肺减容术</a-checkbox>
+                  <a-checkbox value="4">冠脉搭桥术</a-checkbox>
+                  <a-checkbox value="5" :checked="controlb202" @change="changeSelect($event, 'controlb202')">其他</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="其他手术名称:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset" class="border-dotted" v-if="controlb20 && controlb202">
+                <a-input style="width: 240px;" v-decorator="['b202', {initialValue: initValue('b202')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(13) 支气管动脉栓塞病史" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['b21', {...require2, initialValue: initValue('b21')}]" @change="changeRadio($event, 'controlb21')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlb21">
+                <a-form-item label="若行支气管动脉栓塞术时间" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b211', {...dateRequire, initialValue: initValue('b211', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="支气管动脉栓塞术部位" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-input style="width: 240px;" v-decorator="['b212', {...inputRequired, initialValue: initValue('b212')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(14) 是否CF筛查" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['c1', {...require1, initialValue: initValue('c1')}]" @change="changeRadio($event, 'controlc1')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlc1">
+                <a-form-item label="CF筛查是否正常 " :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-radio-group v-decorator="['c11', {...selectRequired, initialValue: initValue('c11')}]" @change="changeRadio($event, 'controlc11')">
+                    <a-radio value="1">正常</a-radio>
+                    <a-radio value="-1">异常</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="no-border" label="异常数值" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlc1 && controlc11">
+                  <a-input style="width: 240px;" v-decorator="['c111', {...inputRequired, initialValue: initValue('c111')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import _ from 'lodash'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, recoverSubmit, exportFormData } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'task14',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      formLayout: 'horizontal',
+      markName: 'zkbszl',
+      title: '年访视',
+      openKeys: [],
+      defaultSelectedKeys: [14],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      clientHeight: '',
+      contentHeight: '',
+      baselineFormStyle: {
+        // "height": "700px",
+        "padding-top": "52px",
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 6, offset: 6 }
+      },
+      wrapperOffset: {
+        md: { span: 12 }
+      },
+      labelColOffset2: {
+        md: { span: 3, offset: 6 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      zkbszl: undefined,
+      controla44: false,
+      controla45: false,
+      controla41: false,
+      controla42: false,
+      controla43: false,
+      controlb61: false,
+      controlb51: false,
+      controlb62: false,
+      controlb63: false,
+      controlb64: false,
+      controlb65: false,
+      controlb66: false,
+      controlb7: false,
+      controlb68: false,
+      controlb72: false,
+      controlb8: false,
+      controlb9: false,
+      controlb917: false,
+      controlb10: false,
+      controlb1014: false,
+      controlb11: false,
+      controlb1113: false,
+      controlb12: false,
+      controlb14: false,
+      controlb144: false,
+      controlb15: false,
+      controlb1538: false,
+      controlb1615: false,
+      controlb1831: false,
+      controlb191: false,
+      controlb20: false,
+      controlb202: false,
+      controlb21: false,
+      controla413: false,
+      controlb82: false,
+      controlb122: false,
+      spinning: false,
+      executeStatus: false,
+      b2: undefined,
+      b3: undefined,
+      controlb70: false,
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined,
+      a3Init: undefined,
+      controlc1: false,
+      controlc11: false,
+      initB5: false,
+      initB6: false,
+      initB17: false
+    }
+  },
+  created() {
+    this.clientHeight = `${document.documentElement.clientHeight}`
+    window.onresize = function temp() {
+      this.clientHeight = `${document.documentElement.clientHeight}`;
+    };
+    this.contentHeight = (this.clientHeight - 187);
+    console.log(this.contentHeight);
+
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+        that.a3Init = res.data.a3
+      })
+      .catch(error => {
+        console.log(error)
+      })
+    this.getFormData()
+  },
+  mounted() {
+    this.form.setFieldsValue({ b70: '-1' })
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    
+    getFormData() {
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          if (res.data && res.data.zkbszl) {
+            that.zkbszl = that.dealAnswers(res.data.zkbszl)
+          }
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    },
+    initValue(key, type = 'normal') {
+      if(!this.zkbszl && type === 'time' && key === 'a3' && this.a3Init) return moment(this.a3Init)
+      if (!this.zkbszl) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.zkbszl[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.zkbszl[key])
+      } else if (type === 'array') {
+        return this.zkbszl[key].split(',')
+      } else {
+        return this.zkbszl[key] + ''
+      }
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    detect(d, v) {
+      if(Array.isArray(this.form.getFieldValue(d)) && this.form.getFieldValue(d).indexOf(v) > -1) {
+        return true
+      } else {
+        return false
+      }
+    },
+    handleNone(e, d, v, arr) {
+      if(e.target.checked){
+        let data = {}
+        data[d] = [v]
+        this.$nextTick(() => {
+          this.form.setFieldsValue(data)
+          arr.forEach((t) => {
+            this[t] = false
+          })
+        })
+      } else {
+        if(d === 'b5') {
+          this.initB5 = false
+        }
+        if(d === 'b6') {
+          this.initB6 = false
+        }
+        if(d === 'b17') {
+          this.initB17 = false
+        }
+      }
+    },
+    changeDate(date) {
+      let timeDiff = Math.abs(new Date(date._d) - new Date(this.getBirthdayByIdNO(this.patient.card)));
+      // 将毫秒数转换为年数
+      let yearDiff = timeDiff / (1000 * 3600 * 24 * 365.25); // 考虑闰年
+      // 判断年数是否大于 10 年
+      if (yearDiff < 10) {
+        this.$message.warning('是否为儿童确诊支扩');
+      }
+    },
+    dealAnswers(answer) {
+      var that = this
+      if (answer && !_.isEmpty(answer)) {
+        var splitArr = []
+        if (answer.a4) {
+          splitArr = answer.a4.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            that.controla44 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            that.controla41 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            that.controla43 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            that.controla42 = true
+          }
+          if (splitArr.indexOf('13') > -1) {
+            that.controla413 = true
+          }
+          if (splitArr.indexOf('10') > -1) {
+            that.controla45 = true
+          }
+        }
+        if (answer.b5) {
+          splitArr = answer.b5.split(',')
+          if (splitArr.indexOf('6') > -1) {
+            that.controlb51 = true
+          }
+        }
+        if (answer.b6) {
+          splitArr = answer.b6.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            that.controlb61 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            that.controlb62 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            that.controlb63 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            that.controlb64 = true
+          }
+          if (splitArr.indexOf('5') > -1) {
+            that.controlb65 = true
+          }
+          if (splitArr.indexOf('6') > -1) {
+            that.controlb66 = true
+          }
+          if (splitArr.indexOf('8') > -1) {
+            that.controlb68 = true
+          }
+        }
+
+        if (answer.b70 === 1) {
+          that.controlb70 = true
+        }
+
+        if (answer.b7 === 1) {
+          that.controlb7 = true
+        }
+        if (answer.b71) {
+          splitArr = answer.b71.split(',')
+          if (splitArr.indexOf('10') > -1) {
+            that.controlb72 = true
+          }
+        }
+        if (answer.b8 === 1) {
+          that.controlb8 = true
+        }
+        if (answer.b81) {
+          splitArr = answer.b81.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            that.controlb82 = true
+          }
+        }
+        if (answer.b9 === 1) {
+          that.controlb9 = true
+        }
+        if (answer.b91) {
+          splitArr = answer.b91.split(',')
+          if (splitArr.indexOf('7') > -1) {
+            that.controlb917 = true
+          }
+        }
+        if (answer.b10 === 1) {
+          that.controlb10 = true
+        }
+        if (answer.b11 === 1) {
+          that.controlb11 = true
+        }
+        if (answer.b12 && answer.b12 === '1') {
+          that.controlb12 = true
+        }
+        if (answer.b14 && answer.b14 === '1') {
+          that.controlb14 = true
+        }
+        if (answer.b143) {
+          splitArr = answer.b143.split(',')
+          if (splitArr.indexOf('16') > -1) {
+            that.controlb144 = true
+          }
+        }
+        if (answer.b15 && answer.b15 === 1) {
+          that.controlb15 = true
+        }
+        if (answer.b153) {
+          splitArr = answer.b153.split(',')
+          if (splitArr.indexOf('8') > -1) {
+            that.controlb1538 = true
+          }
+        }
+        if (answer.b161) {
+          splitArr = answer.b161.split(',')
+          if (splitArr.indexOf('5') > -1) {
+            that.controlb1615 = true
+          }
+        }
+        if (answer.b20 && answer.b20 === 1) {
+          that.controlb20 = true
+        }
+        if (answer.b21 && answer.b21 === 1) {
+          that.controlb21 = true
+        }
+        if (answer.b101) {
+          splitArr = answer.b101.split(',')
+          if (splitArr.indexOf('4') > -1) {
+            that.controlb1014 = true
+          }
+        }
+        if (answer.b111) {
+          splitArr = answer.b111.split(',')
+          if (splitArr.indexOf('3') > -1) {
+            that.controlb1113 = true
+          }
+        }
+        if (answer.b121) {
+          splitArr = answer.b121.split(',')
+          if (splitArr.indexOf('6') > -1) {
+            that.controlb122 = true
+          }
+        }
+        if (answer.b19 && (answer.b19 === 1 || answer.b19 === 2)) {
+          that.controlb191 = true
+        }
+        if (answer.b183 && answer.b183 === 1) {
+          that.controlb1831 = true
+        }
+        if (answer.b201) {
+          splitArr = answer.b201.split(',')
+          if (splitArr.indexOf('6') > -1) {
+            that.controlb202 = true
+          }
+        }
+        if(answer.c1 === 1) {
+          that.controlc1 = true
+        }
+        if(answer.c11 === -1) {
+          that.controlc11 = true
+        }
+      }
+      return answer
+    },
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      let that = this
+      if (t === 'controlb70' && e.target.value === '1') {
+        this.controlb7 = false
+        this.controlb72 = false
+        this.controlb8 = false
+        this.controlb82 = false
+        this.controlb9 = false
+        this.controlb917 = false
+        this.controlb10 = false
+        this.controlb1014 = false
+        this.controlb11 = false
+        this.controlb1113 = false
+        this.controlb12 = false
+        this.controlb122 = false
+        this.controlb14 = false
+        this.controlb144 = false
+        this.controlb15 = false
+        this.controlb1538 = false
+        this.controlb1615 = false
+        setTimeout(function () {
+          that.form.setFieldsValue({
+            b7: '-1',
+            b8: '-1',
+            b9: '-1',
+            b10: '-1',
+            b11: '-1',
+            b12: '-1',
+            b13: '-1',
+            b14: '-1',
+            b15: '-1',
+            b161: ['1'],
+          })
+        })
+      }
+      if (t === 'controlb191') {
+        if (e.target.value === '1' || e.target.value === '2') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (t === 'controlc11'){
+        if (e.target.value === '-1') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      if ((e.key >= 37 && e.key <= 42) || (e.key >= 45 && e.key <= 50)) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      } else {
+        this.$router.replace('/list/task/' + this.patientBasisId + '/' + e.key)
+      }
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          var that = this
+          re = {
+            ...re,
+            'a1': typeof re['a1'] !== 'undefined' ? re['a1'].join(',') : '',
+            'a3': typeof re['a3'] !== 'undefined' ? re['a3'].format('YYYY-MM-DD') : '',
+            'a4': typeof re['a4'] !== 'undefined' ? re['a4'].join(',') : '',
+            'b4': typeof re['b4'] !== 'undefined' ? re['b4'].format('YYYY-MM-DD') : '',
+            'b5': typeof re['b5'] !== 'undefined' ? re['b5'].join(',') : '',
+            'b6': typeof re['b6'] !== 'undefined' ? re['b6'].join(',') : '',
+            'b17': typeof re['b17'] !== 'undefined' ? re['b17'].join(',') : '',
+            'b61': typeof re['b61'] !== 'undefined' ? re['b61'].format('YYYY-MM-DD') : '',
+            'b62': typeof re['b62'] !== 'undefined' ? re['b62'].format('YYYY-MM-DD') : '',
+            'b63': typeof re['b63'] !== 'undefined' ? re['b63'].format('YYYY-MM-DD') : '',
+            'b64': typeof re['b64'] !== 'undefined' ? re['b64'].format('YYYY-MM-DD') : '',
+            'b65': typeof re['b65'] !== 'undefined' ? re['b65'].format('YYYY-MM-DD') : '',
+            'b66': typeof re['b66'] !== 'undefined' ? re['b66'].format('YYYY-MM-DD') : '',
+            'b71': typeof re['b71'] !== 'undefined' ? re['b71'].join(',') : '',
+            'b81': typeof re['b81'] !== 'undefined' ? re['b81'].join(',') : '',
+            'b91': typeof re['b91'] !== 'undefined' ? re['b91'].join(',') : '',
+            'b101': typeof re['b101'] !== 'undefined' ? re['b101'].join(',') : '',
+            'b111': typeof re['b111'] !== 'undefined' ? re['b111'].join(',') : '',
+            'b121': typeof re['b121'] !== 'undefined' ? re['b121'].join(',') : '',
+            'b143': typeof re['b143'] !== 'undefined' ? re['b143'].join(',') : '',
+            'b153': typeof re['b153'] !== 'undefined' ? re['b153'].join(',') : '',
+            'b161': typeof re['b161'] !== 'undefined' ? re['b161'].join(',') : '',
+            'b201': typeof re['b201'] !== 'undefined' ? re['b201'].join(',') : '',
+            'b211': typeof re['b211'] !== 'undefined' ? re['b211'].format('YYYY-MM-DD') : ''
+          }
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.zkbszl && this.zkbszl.zkbszlId) {
+            re.zkbszlId = this.zkbszl.zkbszlId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+          return false
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      var that = this
+      re = {
+        ...re,
+        'a1': typeof re['a1'] !== 'undefined' ? re['a1'].join(',') : '',
+        'a3': typeof re['a3'] !== 'undefined' ? re['a3'].format('YYYY-MM-DD') : '',
+        'a4': typeof re['a4'] !== 'undefined' ? re['a4'].join(',') : '',
+        'b4': typeof re['b4'] !== 'undefined' ? re['b4'].format('YYYY-MM-DD') : '',
+        'b5': typeof re['b5'] !== 'undefined' ? re['b5'].join(',') : '',
+        'b6': typeof re['b6'] !== 'undefined' ? re['b6'].join(',') : '',
+        'b17': typeof re['b17'] !== 'undefined' ? re['b17'].join(',') : '',
+        'b61': typeof re['b61'] !== 'undefined' ? re['b61'].format('YYYY-MM-DD') : '',
+        'b62': typeof re['b62'] !== 'undefined' ? re['b62'].format('YYYY-MM-DD') : '',
+        'b63': typeof re['b63'] !== 'undefined' ? re['b63'].format('YYYY-MM-DD') : '',
+        'b64': typeof re['b64'] !== 'undefined' ? re['b64'].format('YYYY-MM-DD') : '',
+        'b65': typeof re['b65'] !== 'undefined' ? re['b65'].format('YYYY-MM-DD') : '',
+        'b66': typeof re['b66'] !== 'undefined' ? re['b66'].format('YYYY-MM-DD') : '',
+        'b71': typeof re['b71'] !== 'undefined' ? re['b71'].join(',') : '',
+        'b81': typeof re['b81'] !== 'undefined' ? re['b81'].join(',') : '',
+        'b91': typeof re['b91'] !== 'undefined' ? re['b91'].join(',') : '',
+        'b101': typeof re['b101'] !== 'undefined' ? re['b101'].join(',') : '',
+        'b111': typeof re['b111'] !== 'undefined' ? re['b111'].join(',') : '',
+        'b121': typeof re['b121'] !== 'undefined' ? re['b121'].join(',') : '',
+        'b143': typeof re['b143'] !== 'undefined' ? re['b143'].join(',') : '',
+        'b153': typeof re['b153'] !== 'undefined' ? re['b153'].join(',') : '',
+        'b161': typeof re['b161'] !== 'undefined' ? re['b161'].join(',') : '',
+        'b201': typeof re['b201'] !== 'undefined' ? re['b201'].join(',') : '',
+        'b211': typeof re['b211'] !== 'undefined' ? re['b211'].format('YYYY-MM-DD') : ''
+      }
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.zkbszl && this.zkbszl.zkbszlId) {
+        re.zkbszlId = this.zkbszl.zkbszlId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', that.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+            .catch(error => {
+              console.log(error)
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    withdraw(){
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.zkbszl.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    _importData() {
+      var that = this
+      this.$confirm({
+        title: '是否确定导入数据?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('basisMarkId', that.maskId)
+          params.append('patientBasisId', that.patientBasisId)
+          exportFormData(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              that.zkbszl = _.extend(that.zkbszl || {}, that.dealAnswers(res.data.data.zkbszl))
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px;
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px 60px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+
+      .center.ant-checkbox-group{
+        position: relative;
+        top: 10px;
+      }
+    }
+
+
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .label-overflow .ant-form-item-label {
+      line-height: 20px;
+      position: relative;
+      top: 18px;
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+@media screen and (max-width: 1366px) {
+  .control-m-line.ant-checkbox-group {
+    top: 10px;
+    position: relative;
+  }
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+.tipTxt::before {
+
+}
+</style>
\ No newline at end of file
diff --git a/src/views/task/components/mask-15.vue b/src/views/task/components/mask-15.vue
new file mode 100644
index 0000000000..440a5ca8ca
--- /dev/null
+++ b/src/views/task/components/mask-15.vue
@@ -0,0 +1,813 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <!-- <a-button class="btn fr" v-if="patientBasis.type === 3" @click="import">导入</a-button> -->
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!</p>
+              <div class="title">1.体格检查</div>
+              <a-form-item label="(1) SpO2:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input v-decorator="['a5', {...inputRequired, initialValue: initValue('a5')}]" style="width: 240px;" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(2) 身高:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input v-decorator="['a6', {...inputRequired, initialValue: initValue('a6')}]" style="width: 240px;" addonAfter="cm" @change="changeHeight($event)" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(3) 体重:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input v-decorator="['a7', {...inputRequired, initialValue: initValue('a7')}]" style="width: 240px;" addonAfter="kg" @change="changeWeight($event)" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(4) BMI(自动演算出):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input v-decorator="['a8', {initialValue: initValue('a8')}]" :readOnly="true" style="width: 240px;" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(5) 肺部体征:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+              </a-form-item>
+              <a-form-item label="桶状胸" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['b1', {...require2, initialValue: initValue('b1')}]">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="杵状指" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['b2', {...require2, initialValue: initValue('b2')}]">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="啰音" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['a9', {...require2, initialValue: initValue('a9')}]" @change="changeRadio($event, 'controla9')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controla9">
+                <a-form-item label="啰音类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-checkbox-group v-decorator="['a91', {...selectRequired, initialValue: initValue('a91', 'array')}]">
+                    <a-checkbox value="1">湿罗音</a-checkbox>
+                    <a-checkbox value="2">干啰音</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="啰音部位" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-input style="width: 240px;" v-decorator="['a92', {...inputRequired, initialValue: initValue('a92')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <a-form-item label="(6) 右位心:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a10', {...require1, initialValue: initValue('a10')}]">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, computeScore, recoverSubmit } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'task15',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      markName: 'tgjc',
+      title: '',
+      openKeys: [],
+      defaultSelectedKeys: [15],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: '100%',
+        "padding-right": "0px",
+        "border-right": "1px solid #ddd"
+      },
+      baselineFormStyle: {
+        // height: '444px',
+        "padding-top": "52px",
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      controla9: false,
+      tgjc: undefined,
+      height: undefined,
+      weight: undefined,
+      spinning: false,
+      executeStatus: false,
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined
+    }
+  },
+  created() {
+    var that = this
+    this.defaultSelectedKeys = [15]
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        if (that.patientBasis.type === 1) {
+          that.title = '基线'
+        } else if (that.patientBasis.type === 2) {
+          that.title = '半年随访'
+        } else if (that.patientBasis.type === 3) {
+          that.title = '年访视'
+        }
+        that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      if (t === 'controlb191') {
+        if (e.target.value === '1' || e.target.value === '2') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      this.maskId = e.key
+      if ((e.key >= 37 && e.key <= 42) || (e.key >= 45 && e.key <= 50)) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + this.maskId)
+      } else {
+        this.$router.replace('/list/task/' + this.patientBasisId + '/' + this.maskId)
+      }
+    },
+    getFormData() {
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          if (res.data && res.data.tgjc)
+            that.tgjc = that.dealAnswers(res.data.tgjc)
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          var that = this
+          re = {
+            ...re,
+            'a91': typeof re['a91'] !== 'undefined' ? re['a91'].join(',') : ''
+          }
+          console.log(re)
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.tgjc && this.tgjc.tgjcId) {
+            re.tgjcId = this.tgjc.tgjcId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          that.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+          return false
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.tgjc) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.tgjc[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.tgjc[key])
+      } else if (type === 'array') {
+        return this.tgjc[key].split(',')
+      } else {
+        return this.tgjc[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        if (answer.a9 === '1') {
+          this.controla9 = true
+        }
+        if (answer.a6) {
+          this.height = answer.a6
+        }
+        if (answer.a7) {
+          this.weight = answer.a7
+        }
+      }
+      return answer
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      var that = this
+      re = {
+        ...re,
+        'a91': typeof re['a91'] !== 'undefined' ? re['a91'].join(',') : ''
+      }
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.tgjc && this.tgjc.tgjcId) {
+        re.tgjcId = this.tgjc.tgjcId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      that.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', that.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+            .catch(error => {
+              console.log(error)
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    computeBMI() {
+      var that = this
+      var height = this.height
+      var weight = this.weight
+      if (height && weight) {
+        var params = new URLSearchParams()
+        params.append('scoreType', 'bmi')
+        params.append('tgjcStr', JSON.stringify({ a6: height, a7: weight }))
+        computeScore(params)
+          .then(res => {
+            console.log(res.data.a8)
+            that.form.setFieldsValue({
+              a8: res.data.a8
+            })
+          })
+          .catch(error => {
+            console.log(error)
+          })
+      }
+    },
+    changeHeight(e) {
+      this.height = e.target.value
+      if (!e.target.value) {
+        this.form.setFieldsValue({
+          a8: ''
+        })
+      } else {
+        this.computeBMI()
+      }
+    },
+    changeWeight(e) {
+      this.weight = e.target.value
+      if (!e.target.value) {
+        this.form.setFieldsValue({
+          a8: ''
+        })
+      } else {
+        this.computeBMI()
+      }
+    },
+    withdraw(){
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.tgjc.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/task/components/mask-17.vue b/src/views/task/components/mask-17.vue
new file mode 100644
index 0000000000..9c89dd1aae
--- /dev/null
+++ b/src/views/task/components/mask-17.vue
@@ -0,0 +1,1175 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!</p>
+              <a-form-item label="过去一年是否有急性加重期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a1', {...require1, initialValue: initValue('a1')}]" @change="changeRadio($event, 'controla1')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controla1">
+                <div class="title">1.急性加重期</div>
+                <a-form-item label="(1) 过去一年的急性加重次数:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input v-decorator="['b1', {...inputRequired, initialValue: initValue('b1')}]" style="width: 240px;" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(2) 住院急性加重次数:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input v-decorator="['b2', {...inputRequired, initialValue: initValue('b2')}]" style="width: 240px;" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(3) 门诊急性加重次数:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input v-decorator="['b3', {...inputRequired, initialValue: initValue('b3')}]" style="width: 240px;" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(4) 急性加重的症状(多选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b4', {...selectRequired, initialValue: initValue('b4', 'array')}]">
+                    <a-checkbox value="1">咳嗽加重</a-checkbox>
+                    <a-checkbox value="2">痰量增多</a-checkbox>
+                    <a-checkbox value="3">痰液黏度增加</a-checkbox>
+                    <a-checkbox value="4">痰脓性增加</a-checkbox>
+                    <a-checkbox value="5">喘息呼吸急促加重</a-checkbox>
+                    <a-checkbox value="6">咯血新增或增多</a-checkbox>
+                    <a-checkbox value="7">其他系统症状(如:乏力,发热等)</a-checkbox>
+                    <a-checkbox value="8" :checked="controlb4" @change="changeSelect($event, 'controlb4')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="其他症状:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb4">
+                  <a-input v-decorator="['b41', {...inputRequired, initialValue: initValue('b41')}]" style="width: 240px;" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(5) 咳嗽频繁程度" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-radio-group v-decorator="['b5', {...selectRequired, initialValue: initValue('b5')}]">
+                    <a-radio value="1">轻度</a-radio>
+                    <a-radio value="2">中度</a-radio>
+                    <a-radio value="3">重度</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="(6) 痰量" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input addonAfter="ml/日" style="width: 240px;" v-decorator="['b6', {...inputRequired, initialValue: initValue('b6')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(7) 痰液粘稠Murry评分(单选)" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-popover>
+                    <template slot="content">
+                      <img src="../../../assets/murry.png" style="height: 260px;" />
+                    </template>
+                    <a-icon type="exclamation-circle" style="position: relative;left: -20px;color: #0399ec;cursor: pointer;" />
+                  </a-popover>
+                  <a-radio-group v-decorator="['b7', {...selectRequired, initialValue: initValue('b7')}]">
+                    <a-radio value="1">粘液性</a-radio>
+                    <a-radio value="2">黏脓性</a-radio>
+                    <a-radio value="3">脓性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="(8) 痰血最多量" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input addonAfter="ml/日" style="width: 240px;" v-decorator="['b8', {...inputRequired, initialValue: initValue('b8')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(9) 咯血最多量" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input addonAfter="ml/日" style="width: 240px;" v-decorator="['b9', {...inputRequired, initialValue: initValue('b9')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(10) 有无胸痛:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b10', {...require2, initialValue: initValue('b10')}]" @change="changeRadio($event, 'controla1')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="(11) 急性加重期入院方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b11', {...require2, initialValue: initValue('b11')}]" @change="changeRadio($event, 'controlb11')">
+                    <a-radio value="1">住院</a-radio>
+                    <a-radio value="2">门诊</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controlb11">
+                  <a-form-item label="记录住院天数:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset">
+                    <a-input addonAfter="天" style="width: 240px;" v-decorator="['b111', {...inputRequired, initialValue: initValue('b111')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item label="住院总费用:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset">
+                    <a-input addonAfter="元" style="width: 240px;" v-decorator="['b112', {...inputRequired, initialValue: initValue('b112')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                </div>
+                <a-form-item label="(12) 急性加重发生时间:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b12', {...dateRequire, initialValue: initValue('b12', 'time')}]"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="(13) 持续时间:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input addonAfter="天" style="width: 240px;" v-decorator="['b13', {...inputRequired, initialValue: initValue('b13')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <div class="title">2.急性加重期的微生物检查</div>
+                <a-form-item label="(1) 取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['c1', {...dateRequire, initialValue: initValue('c1', 'time')}]"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="(2) 是否本院:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-radio-group v-decorator="['c2', {...require1, initialValue: initValue('c2')}]" @change="changeRadio($event, 'controlc2')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="医院名称" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlc2">
+                  <a-input style="width: 240px;" v-decorator="['c21', {...inputRequired, initialValue: initValue('c21')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(3) 标本类型(单选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['c3', {...require1, initialValue: initValue('c3')}]">
+                    <a-radio value="1">痰液</a-radio>
+                    <a-radio value="2">诱导痰</a-radio>
+                    <a-radio value="3">支气管肺泡灌洗液</a-radio>
+                    <a-radio value="4">血标本</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="(4) 是否分离到微生物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['c4', {...require1, initialValue: initValue('c4')}]" @change="changeRadio($event, 'controlc4')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="分离到微生物:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlc4">
+                  <a-checkbox-group v-decorator="['c42', {...selectRequired, initialValue: initValue('c42', 'array')}]">
+                    <a-checkbox value="0" @change="showList($event, '铜绿假单胞菌', 'controlc420')">铜绿假单胞菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[0]" v-if="controlc420"></add-table>
+                    <a-checkbox value="1" @change="showList($event, '肺炎链球菌', 'controlc421')">肺炎链球菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[1]" v-if="controlc421"></add-table>
+                    <a-checkbox value="2" @change="showList($event, '肺炎克雷伯菌', 'controlc422')">肺炎克雷伯菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[2]" v-if="controlc422"></add-table>
+                    <a-checkbox value="3" @change="showList($event, '阴沟肠杆菌', 'controlc423')">阴沟肠杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[3]" v-if="controlc423"></add-table>
+                    <a-checkbox value="4" @change="showList($event, '副流感嗜血杆菌', 'controlc424')">副流感嗜血杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[4]" v-if="controlc424"></add-table>
+                    <a-checkbox value="5" @change="showList($event, '鲍曼不动杆菌', 'controlc425')">鲍曼不动杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[5]" v-if="controlc425"></add-table>
+                    <a-checkbox value="6" @change="showList($event, '金黄色葡萄球菌', 'controlc426')">金黄色葡萄球菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[6]" v-if="controlc426"></add-table>
+                    <a-checkbox value="7" @change="showList($event, '其他', 'controlc427')">其他</a-checkbox>
+                    <a-input style="width: 240px;margin-right: 10px;" v-if="controlc427" @change="otherChange($event, 7)" autocomplete="off"></a-input>
+                    <add-table :dataSource="optionDataSource[7]" v-if="controlc427"></add-table>
+                  </a-checkbox-group>
+                </a-form-item>
+                <div class="title">3.用药情况</div>
+                <a-form-item label="(1) 抗生素使用情况(单选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['d1', {...selectRequired, initialValue: initValue('d1')}]">
+                    <a-radio value="1">口服</a-radio>
+                    <a-radio value="2">静脉</a-radio>
+                    <a-radio value="3">口服+静脉</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="(2) β内酰胺类(多选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['d2', {...selectRequired, initialValue: initValue('d2', 'array')}]">
+                    <a-checkbox value="1">头孢他定</a-checkbox>
+                    <a-checkbox value="2">头孢吡肟</a-checkbox>
+                    <a-checkbox value="3">拉氧头孢</a-checkbox>
+                    <a-checkbox value="4" :checked="controld24" @change="changeSelect($event, 'controld24')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="其他" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controld24">
+                  <a-input style="width: 240px;" v-decorator="['d21', {...inputRequired, initialValue: initValue('d21')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(3) β内酰胺/酶抑制剂:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['d3', {...selectRequired, initialValue: initValue('d3', 'array')}]">
+                    <a-checkbox value="1">头孢他定</a-checkbox>
+                    <a-checkbox value="2">头孢吡肟</a-checkbox>
+                    <a-checkbox value="3" :checked="controld33" @change="changeSelect($event, 'controld33')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="其他" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controld33">
+                  <a-input style="width: 240px;" v-decorator="['d31', {...inputRequired, initialValue: initValue('d31')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(4) 碳氢酶烯类:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['d4', {...selectRequired, initialValue: initValue('d4', 'array')}]">
+                    <a-checkbox value="1">美罗培南</a-checkbox>
+                    <a-checkbox value="2">亚胺培南</a-checkbox>
+                    <a-checkbox value="3">比阿培南</a-checkbox>
+                    <a-checkbox value="4" :checked="controld44" @change="changeSelect($event, 'controld44')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="其他" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controld44">
+                  <a-input style="width: 240px;" v-decorator="['d41', {...inputRequired, initialValue: initValue('d41')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(5) 氨基糖甙类:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['d5', {...selectRequired, initialValue: initValue('d5', 'array')}]">
+                    <a-checkbox value="1">阿米卡星</a-checkbox>
+                    <a-checkbox value="2">妥布霉素</a-checkbox>
+                    <a-checkbox value="3">依替米星</a-checkbox>
+                    <a-checkbox value="4" :checked="controld54" @change="changeSelect($event, 'controld54')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="其他" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controld54">
+                  <a-input style="width: 240px;" v-decorator="['d51', {...inputRequired, initialValue: initValue('d51')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(6) 喹诺酮类:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['d6', {...selectRequired, initialValue: initValue('d6', 'array')}]">
+                    <a-checkbox value="1">环丙沙星</a-checkbox>
+                    <a-checkbox value="2">左氧氟沙星</a-checkbox>
+                    <a-checkbox value="3" :checked="controld63" @change="changeSelect($event, 'controld63')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="其他" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controld63">
+                  <a-input style="width: 240px;" v-decorator="['d61', {...inputRequired, initialValue: initValue('d61')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(7) 单酰胺环类:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['d7', {initialValue: initValue('d7', 'array')}]">
+                    <a-checkbox value="1">氨曲南</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="(8) 大环内酯类:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['d8', {...selectRequired, initialValue: initValue('d8', 'array')}]">
+                    <a-checkbox value="1">阿奇霉素</a-checkbox>
+                    <a-checkbox value="2">克拉霉素</a-checkbox>
+                    <a-checkbox value="3">红霉素</a-checkbox>
+                    <a-checkbox value="4" :checked="controld84" @change="changeSelect($event, 'controld84')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="其他" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controld84">
+                  <a-input style="width: 240px;" v-decorator="['d81', {...inputRequired, initialValue: initValue('d81')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(9) 多肽类:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['d9', {...selectRequired, initialValue: initValue('d9', 'array')}]">
+                    <a-checkbox value="1">多粘菌素B</a-checkbox>
+                    <a-checkbox value="2">多粘菌素E</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="(10) 有无止血:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['d10', {...require2, initialValue: initValue('d10')}]" @change="changeRadio($event, 'controld10')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="止血药物" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controld10">
+                  <a-checkbox-group v-decorator="['d101', {...selectRequired, initialValue: initValue('d101', 'array')}]">
+                    <a-checkbox value="1">安络血</a-checkbox>
+                    <a-checkbox value="2">云南白药</a-checkbox>
+                    <a-checkbox value="3">垂体</a-checkbox>
+                    <a-checkbox value="4">止血敏</a-checkbox>
+                    <a-checkbox value="5">止血芳酸</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="(11) 有无雾化治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['d11', {...require2, initialValue: initValue('d11')}]" @change="changeRadio($event, 'controld11')">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controld11">
+                  <a-form-item label="雾化药物:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" class="border-dotted">
+                    <a-checkbox-group v-decorator="['d111', {...selectRequired, initialValue: initValue('d111', 'array')}]">
+                      <a-checkbox value="1">乙酰半胱氨酸</a-checkbox>
+                      <a-checkbox value="2" :checked="controld111" @change="changeSelect($event, 'controld111')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <a-form-item label="其他:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controld111">
+                    <a-input style="width: 240px;" v-decorator="['d1111', {...inputRequired, initialValue: initValue('d1111')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item label="ICS:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" class="border-dotted">
+                    <a-checkbox-group v-decorator="['d112', {...selectRequired, initialValue: initValue('d112', 'array')}]">
+                      <a-checkbox value="1">布地奈德</a-checkbox>
+                      <a-checkbox value="2" :checked="controld112" @change="changeSelect($event, 'controld112')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <a-form-item label="其他:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controld112">
+                    <a-input style="width: 240px;" v-decorator="['d1121', {...inputRequired, initialValue: initValue('d1121')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item label="支气管扩张剂:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset">
+                    <a-checkbox-group v-decorator="['d113', {...selectRequired, initialValue: initValue('d113', 'array')}]">
+                      <a-checkbox value="1">异丙托溴胺</a-checkbox>
+                      <a-checkbox value="2">沙丁胺醇</a-checkbox>
+                      <a-checkbox value="3">特布他林</a-checkbox>
+                      <a-checkbox value="4">复方异丙托溴铵(异丙托溴胺+沙丁胺醇)</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                </div>
+                <a-form-item label="(12) 有无支气管镜检吸痰:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['d12', {...require2, initialValue: initValue('d12')}]">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="(13) 有无氧疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['d13', {...require2, initialValue: initValue('d13')}]">
+                    <a-radio value="1">有</a-radio>
+                    <a-radio value="-1">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="(14) 有无机械通气:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['d14', {...require2, initialValue: initValue('d14')}]">
+                    <a-radio value="1">有创</a-radio>
+                    <a-radio value="-1">无创</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+              </div>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, getMedicineAllergyList, recoverSubmit } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import AddTable from '@/views/account/center/model/table'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'jxjzq',
+  components: {
+    STree,
+    MyIcon,
+    AddTable,
+    ContactForm
+  },
+  data() {
+    return {
+      markName: 'fs_jxjzq',
+      optionDataSource: [],
+      title: '急性加重期',
+      openKeys: [],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      defaultSelectedKeys: [17],
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      baselineFormStyle: {
+        // height: '444px',
+        'padding-top': '52px'
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 5, offset: 3 }
+      },
+      wrapperOffset: {
+        md: { span: 16 }
+      },
+      labelColOffset2: {
+        md: { span: 6, offset: 3 }
+      },
+      wrapperOffset2: {
+        md: { span: 15 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      patientBasisId: this.$route.params.id,
+      jxjzq: undefined,
+      maskId: this.$route.meta.maskId,
+      controla1: false,
+      controlb4: false,
+      controlb11: false,
+      controlc2: false,
+      controlc4: false,
+      controlc420: false,
+      controlc421: false,
+      controlc422: false,
+      controlc423: false,
+      controlc424: false,
+      controlc425: false,
+      controlc426: false,
+      controlc427: false,
+      controld24: false,
+      controld33: false,
+      controld44: false,
+      controld54: false,
+      controld63: false,
+      controld84: false,
+      controld10: false,
+      controld11: false,
+      controld111: false,
+      controld112: false,
+      spinning: false,
+      executeStatus: false,
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined
+    }
+  },
+  created() {
+    var that = this
+
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+        that.getFormData()
+      })
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      if (t === 'controlb41') {
+        if (e.target.value === '4') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (t === 'controlc2') {
+        if (e.target.value === '-1') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    getFormData() {
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', that.maskId)
+      getBasisForm(params)
+        .then(res => {
+          if (res.data && res.data.fs_jxjzq)
+            that.jxjzq = that.dealAnswers(res.data)
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    },
+    handleClick(e) {
+      this.maskId = e.key
+      if ((e.key >= 37 && e.key <= 42) || (e.key >= 45 && e.key <= 50)) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + this.maskId)
+      } else {
+        this.$router.replace('/list/task/' + this.patientBasisId + '/' + this.maskId)
+      }
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          const allergy = []
+          for (var key in this.optionDataSource) {
+            _.each(this.optionDataSource[key], function(item) {
+              allergy.push({
+                markId: 2,
+                microbeName: item.microbeName,
+                antibiotic: item.antibiotic,
+                antibioticResult: item.antibioticResult,
+                allergyValue: item.allergyValue
+              })
+            })
+          }
+          var re = this.form.getFieldsValue()
+          re = {
+            ...re,
+            'b4': typeof re['b4'] !== 'undefined' ? re['b4'].join(',') : '',
+            'b12': typeof re['b12'] !== 'undefined' ? re['b12'].format('YYYY-MM-DD') : '',
+            'c1': typeof re['c1'] !== 'undefined' ? re['c1'].format('YYYY-MM-DD') : '',
+            'c42': typeof re['c42'] !== 'undefined' ? re['c42'].join(',') : '',
+            'd2': typeof re['d2'] !== 'undefined' ? re['d2'].join(',') : '',
+            'd3': typeof re['d3'] !== 'undefined' ? re['d3'].join(',') : '',
+            'd4': typeof re['d4'] !== 'undefined' ? re['d4'].join(',') : '',
+            'd5': typeof re['d5'] !== 'undefined' ? re['d5'].join(',') : '',
+            'd6': typeof re['d6'] !== 'undefined' ? re['d6'].join(',') : '',
+            'd7': typeof re['d7'] !== 'undefined' ? re['d7'].join(',') : '',
+            'd8': typeof re['d8'] !== 'undefined' ? re['d8'].join(',') : '',
+            'd9': typeof re['d9'] !== 'undefined' ? re['d9'].join(',') : '',
+            'd101': typeof re['d101'] !== 'undefined' ? re['d101'].join(',') : '',
+            'd111': typeof re['d111'] !== 'undefined' ? re['d111'].join(',') : '',
+            'd112': typeof re['d112'] !== 'undefined' ? re['d112'].join(',') : '',
+            'd113': typeof re['d113'] !== 'undefined' ? re['d113'].join(',') : ''
+          }
+          var that = this
+          console.log(re)
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.jxjzq && this.jxjzq.jxjzqId) {
+            re.jxjzqId = this.jxjzq.jxjzqId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          params.append('allergy', JSON.stringify(allergy))
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.$message.success(res.msg)
+              that.spinning = false
+              that.getFormData()
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    initValue(key, type = 'normal') {
+      if (!this.jxjzq) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.jxjzq[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.jxjzq[key])
+      } else if (type === 'array') {
+        return this.jxjzq[key].split(',')
+      } else {
+        return this.jxjzq[key] + ''
+      }
+    },
+    dealAnswers(data) {
+      var that = this
+      var alList = ['铜绿假单胞菌', '阴沟肠杆菌', '肺炎克雷伯菌', '肺炎链球菌', '副流感嗜血杆菌', '鲍曼不动杆菌', '金黄色葡萄球菌']
+      var answer = data.fs_jxjzq
+      if (answer && !_.isEmpty(answer)) {
+        var splitArr = []
+        if (answer.a1 === 1) {
+          this.controla1 = true
+        }
+        if (answer.b4) {
+          splitArr = answer.b4.split(',')
+          if (splitArr.indexOf('8') > -1) {
+            this.controlb4 = true
+          }
+        }
+        if (answer.c2 === -1) {
+          this.controlc2 = true
+        }
+        if (answer.c4 === 1) {
+          this.controlc4 = true
+        }
+        if (answer.c42) {
+          splitArr = answer.c42.split(',')
+          if (splitArr.indexOf('0') > -1) {
+            this.controlc420 = true
+          }
+          if (splitArr.indexOf('1') > -1) {
+            this.controlc421 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controlc422 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.controlc423 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.controlc424 = true
+          }
+          if (splitArr.indexOf('5') > -1) {
+            this.controlc425 = true
+          }
+          if (splitArr.indexOf('6') > -1) {
+            this.controlc426 = true
+          }
+          if (splitArr.indexOf('7') > -1) {
+            this.controlc427 = true
+          }
+        }
+        if (data[2]) {
+          _.each(alList, function(v, i) {
+            if (data[2][v]) {
+              that.optionDataSource[i] = data[2][v]
+            }
+          })
+        }
+        if (answer.d2) {
+          splitArr = answer.d2.split(',')
+          if (splitArr.indexOf('4') > -1) {
+            this.controld24 = true
+          }
+        }
+      }
+      return answer
+    },
+    save() {
+      const allergy = []
+      for (var key in this.optionDataSource) {
+        _.each(this.optionDataSource[key], function(item) {
+          allergy.push({
+            markId: 2,
+            microbeName: item.microbeName,
+            antibiotic: item.antibiotic,
+            antibioticResult: item.antibioticResult,
+            allergyValue: item.allergyValue
+          })
+        })
+      }
+      var re = this.form.getFieldsValue()
+      re = {
+        ...re,
+        'b4': typeof re['b4'] !== 'undefined' ? re['b4'].join(',') : '',
+        'b12': typeof re['b12'] !== 'undefined' ? re['b12'].format('YYYY-MM-DD') : '',
+        'c1': typeof re['c1'] !== 'undefined' ? re['c1'].format('YYYY-MM-DD') : '',
+        'c42': typeof re['c42'] !== 'undefined' ? re['c42'].join(',') : '',
+        'd2': typeof re['d2'] !== 'undefined' ? re['d2'].join(',') : '',
+        'd3': typeof re['d3'] !== 'undefined' ? re['d3'].join(',') : '',
+        'd4': typeof re['d4'] !== 'undefined' ? re['d4'].join(',') : '',
+        'd5': typeof re['d5'] !== 'undefined' ? re['d5'].join(',') : '',
+        'd6': typeof re['d6'] !== 'undefined' ? re['d6'].join(',') : '',
+        'd7': typeof re['d7'] !== 'undefined' ? re['d7'].join(',') : '',
+        'd8': typeof re['d8'] !== 'undefined' ? re['d8'].join(',') : '',
+        'd9': typeof re['d9'] !== 'undefined' ? re['d9'].join(',') : '',
+        'd101': typeof re['d101'] !== 'undefined' ? re['d101'].join(',') : '',
+        'd111': typeof re['d111'] !== 'undefined' ? re['d111'].join(',') : '',
+        'd112': typeof re['d112'] !== 'undefined' ? re['d112'].join(',') : '',
+        'd113': typeof re['d113'] !== 'undefined' ? re['d113'].join(',') : ''
+      }
+      var that = this
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.jxjzq && this.jxjzq.jxjzqId) {
+        re.jxjzqId = this.jxjzq.jxjzqId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      params.append('allergy', JSON.stringify(allergy))
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.$message.success(res.msg)
+          that.spinning = false
+          that.getFormData()
+          params = new URLSearchParams()
+          params.append('patientBasisId', that.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+            .catch(error => {
+              console.log(error)
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    showList(e, name, controlNode) {
+      if (e.target.checked) {
+        this[controlNode] = true
+        if (name == "其他") return
+        this.getMedicineAllergyList(name, e.target.value)
+      } else {
+        this[controlNode] = false
+        this.$set(this.optionDataSource, e.target.value, [])
+      }
+    },
+    getMedicineAllergyList(value, index) {
+      const that = this
+      const params = new URLSearchParams()
+      params.append('microbeName', value)
+      getMedicineAllergyList(params).then(res => {
+        const optionDataSource = _.map(res.data, function(v, i) {
+          return {
+            keyW: i,
+            microbeName: v.microbeName,
+            antibiotic: v.antibiotic,
+            antibioticResult: v.antibioticResult,
+            allergyValue: v.allergyValue
+          };
+        })
+        that.$set(that.optionDataSource, index, optionDataSource)
+      })
+    },
+    otherChange(e, index) {
+      this.getMedicineAllergyList(e.target.value, index)
+    },
+    withdraw(){
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.jxjzq.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/task/components/mask-18.vue b/src/views/task/components/mask-18.vue
new file mode 100644
index 0000000000..de83b1d15e
--- /dev/null
+++ b/src/views/task/components/mask-18.vue
@@ -0,0 +1,1103 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="clearfix" style="position: relative; top: 20px;">
+              <a-button class="btn fr" type="primary" @click="_importData">导入数据</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!</p>
+              <a-form-item label="有无新增呼吸系统相关治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a1', {...require2, initialValue: initValue('a1')}]" @change="changeRadio($event, 'controla1')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controla1">
+                <div class="title">1.呼吸系统相关治疗</div>
+                <a-form-item label="(1) 长期氧疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b1', {...require1, initialValue: initValue('b1')}]">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="(2) 无创辅助通气:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b2', {...require1, initialValue: initValue('b2')}]">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="(3) 患者是否进行有规律的物理治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b3', {...require1, initialValue: initValue('b3')}]" @change="changeRadio($event, 'controlb3')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="治疗方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb3">
+                  <a-checkbox-group v-decorator="['b31', {...selectRequired, initialValue: initValue('b31', 'array')}]">
+                    <a-checkbox value="1" :disabled="detect('b31', '5')">手动拍击背部排痰</a-checkbox>
+                    <a-checkbox value="2" :disabled="detect('b31', '5')">体位引流</a-checkbox>
+                    <a-checkbox value="3" :disabled="detect('b31', '5')">规律锻炼身体</a-checkbox>
+                    <a-checkbox value="4" :disabled="detect('b31', '5')">借助排痰仪器</a-checkbox>
+                    <a-checkbox value="6" :disabled="detect('b31', '5')">主动循环呼吸</a-checkbox>
+                    <a-checkbox value="5" @change="handleNone($event, 'b31', '5')">无</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="(4) 有规律的呼吸疾病药物治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b4', {...require1, initialValue: initValue('b4')}]" @change="changeRadio($event, 'controlb4')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controlb4">
+                  <a-form-item label="4-1 规律抗生素治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['b41', {...selectRequired, initialValue: initValue('b41', 'array')}]">
+                      <a-checkbox value="0" @change="handleNone($event, 'b41', '0', ['controlb411', 'controlb412'])">无</a-checkbox>
+                      <a-checkbox value="1" :disabled="detect('b41', '0')" :checked="controlb411" @change="changeSelect($event, 'controlb411')">口服</a-checkbox>
+                      <a-checkbox value="2" :disabled="detect('b41', '0')" :checked="controlb412" @change="changeSelect($event, 'controlb412')">吸入/雾化</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <div v-if="controlb4 && controlb411">
+                    <a-form-item label="长期性口服抗生素治疗(连续使用大于三个月的治疗):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                      <a-checkbox-group v-decorator="['b414', {...selectRequired, initialValue: initValue('b414', 'array')}]">
+                        <a-checkbox value="1">阿奇霉素</a-checkbox>
+                        <a-checkbox value="2">克拉霉素</a-checkbox>
+                        <a-checkbox value="3">红霉素</a-checkbox>
+                        <a-checkbox value="4" @change="changeSelect($event, 'controlb41')">其他</a-checkbox>
+                      </a-checkbox-group>
+                    </a-form-item>
+                    <a-form-item label="其他口服抗生素:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb4 && controlb411 && controlb41">
+                      <a-input style="width: 240px;" v-decorator="['b4141', {...inputRequired, initialValue: initValue('b4141')}]" autocomplete="off"></a-input>
+                    </a-form-item>
+                  </div>
+                  <div v-if="controlb4 && controlb412">
+                    <a-form-item label="规律吸入/雾化抗生素药物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                      <a-checkbox-group v-decorator="['b42', {...selectRequired, initialValue: initValue('b42', 'array')}]">
+                        <a-checkbox value="2">妥布霉素</a-checkbox>
+                        <a-checkbox value="3">庆大霉素</a-checkbox>
+                        <a-checkbox value="4">阿米卡星</a-checkbox>
+                        <a-checkbox value="5" @change="changeSelect($event, 'controlb42')">其他</a-checkbox>
+                      </a-checkbox-group>
+                    </a-form-item>
+                    <a-form-item label="其他吸入/雾化抗生素药物:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb42">
+                      <a-input style="width: 240px;" v-decorator="['b421', {...inputRequired, initialValue: initValue('b421')}]" autocomplete="off"></a-input>
+                    </a-form-item>
+                  </div>
+                  <a-form-item label="4-2 祛痰药物治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['b43', {...selectRequired, initialValue: initValue('b43', 'array')}]">
+                      <a-checkbox value="0" @change="handleNone($event, 'b43', '0', ['controlb431', 'controlb432'])">无</a-checkbox>
+                      <a-checkbox value="1" :disabled="detect('b43', '0')" :checked="controlb431" @change="changeSelect($event, 'controlb431')">口服</a-checkbox>
+                      <a-checkbox value="2" :disabled="detect('b43', '0')" :checked="controlb432" @change="changeSelect($event, 'controlb432')">雾化</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <div v-if="controlb431">
+                    <a-form-item label="口服祛痰类药物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                      <a-checkbox-group v-decorator="['b431', {...selectRequired, initialValue: initValue('b431', 'array')}]">
+                        <a-checkbox value="1">N-乙酰半胱氨酸</a-checkbox>
+                        <a-checkbox value="2">氨溴索</a-checkbox>
+                        <a-checkbox value="3">桉柠蒎</a-checkbox>
+                        <a-checkbox value="4">羧甲司坦</a-checkbox>
+                        <a-checkbox value="5">厄多司坦</a-checkbox>
+                        <a-checkbox value="6">福多司坦</a-checkbox>
+                        <a-checkbox value="7" @change="changeSelect($event, 'controlb43')">其他</a-checkbox>
+                      </a-checkbox-group>
+                    </a-form-item>
+                    <a-form-item label="其他祛痰类药物::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb431 && controlb43">
+                      <a-input style="width: 240px;" v-decorator="['b432', {...inputRequired, initialValue: initValue('b432')}]" autocomplete="off"></a-input>
+                    </a-form-item>
+                  </div>
+                  <div v-if="controlb432">
+                    <a-form-item label="雾化药物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                      <a-checkbox-group v-decorator="['b433', {...selectRequired, initialValue: initValue('b433', 'array')}]">
+                        <a-checkbox value="1">N-乙酰半胱氨酸</a-checkbox>
+                        <a-checkbox value="3">雾化生理盐水</a-checkbox>
+                        <a-checkbox value="4">雾化吸入高渗盐水</a-checkbox>
+                        <a-checkbox value="2" :checked="controlb433" @change="changeSelect($event, 'controlb433')">其他</a-checkbox>
+                      </a-checkbox-group>
+                    </a-form-item>
+                    <a-form-item label="其他雾化药物::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb432 && controlb433">
+                      <a-input style="width: 240px;" v-decorator="['b434', {...inputRequired, initialValue: initValue('b434')}]" autocomplete="off"></a-input>
+                    </a-form-item>
+                  </div>
+                  <a-form-item label="4-3 支气管扩张剂/吸入激素:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['b48', {...selectRequired, initialValue: initValue('b48', 'array')}]" class="center">
+                      <a-checkbox value="0" @change="handleNone($event, 'b48', '0', ['controlb48'])">无</a-checkbox>
+                      <a-checkbox value="1" :disabled="detect('b48', '0')">LAMA</a-checkbox>
+                      <a-checkbox value="2" :disabled="detect('b48', '0')">LABA</a-checkbox>
+                      <a-checkbox value="3" :disabled="detect('b48', '0')">LABA/LAMA</a-checkbox>
+                      <a-checkbox value="4" :disabled="detect('b48', '0')">ICS/LABA/LAMA</a-checkbox>
+                      <a-checkbox value="5" :disabled="detect('b48', '0')">ICS/LABA</a-checkbox>
+                      <a-checkbox value="6" :disabled="detect('b48', '0')">SABA</a-checkbox>
+                      <a-checkbox value="7" :disabled="detect('b48', '0')">SAMA</a-checkbox>
+                      <a-checkbox value="8" :disabled="detect('b48', '0')">白三烯受体拮抗剂</a-checkbox>
+                      <a-checkbox value="9" :disabled="detect('b48', '0')">口服茶碱</a-checkbox>
+                      <a-checkbox value="10" :disabled="detect('b48', '0')">雾化吸入支气管舒张剂</a-checkbox>
+                      <a-checkbox value="11" :disabled="detect('b48', '0')" @change="changeSelect($event, 'controlb48')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <a-form-item label="其他支气管扩张剂/吸入激素:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb48">
+                    <a-input style="width: 240px;" v-decorator="['b481', {...inputRequired, initialValue: initValue('b481')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item label="4-4 长期止血治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['b46', {...require1, initialValue: initValue('b46')}]">
+                      <a-radio value="1">是</a-radio>
+                      <a-radio value="-1">否</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                </div>
+                <a-form-item label="(5) ABPA相关治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b5', {...require1, initialValue: initValue('b5')}]" @change="changeRadio($event, 'controlb5')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controlb5">
+                  <a-form-item label="抗真菌药物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['b52', {...selectRequired, initialValue: initValue('b52', 'array')}]">
+                      <a-checkbox value="0" @change="handleNone($event, 'b52', '0', ['controlb52'])">无</a-checkbox>
+                      <a-checkbox value="1" :disabled="detect('b52', '0')">伊曲康唑</a-checkbox>
+                      <a-checkbox value="2" :disabled="detect('b52', '0')">伏立康唑</a-checkbox>
+                      <a-checkbox value="3" :disabled="detect('b52', '0')" :checked="controlb52" @change="changeSelect($event, 'controlb52')">其他</a-checkbox>
+                    </a-checkbox-group>
+                  </a-form-item>
+                  <a-form-item label="其他抗真菌药物::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb5 && controlb52">
+                    <a-input style="width: 240px;" v-decorator="['b53', {...inputRequired, initialValue: initValue('b53')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item label="激素治疗" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['b51', {...require1, initialValue: initValue('b51')}]">
+                      <a-radio value="1">是</a-radio>
+                      <a-radio value="-1">否</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                </div>
+                <a-form-item label="(6) 免疫球蛋白缺乏相关治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b6', {...require1, initialValue: initValue('b6')}]" @change="changeRadio($event, 'controlb6')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controlb6">
+                  <a-form-item label="静脉注射免疫球蛋白药物名称:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-input style="width: 240px;" v-decorator="['b61', {...inputRequired, initialValue: initValue('b61')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                </div>
+                <a-form-item label="(7) 患者是否曾接受疫苗治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b7', {...require1, initialValue: initValue('b7')}]" @change="changeRadio($event, 'controlb7')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controlb7">
+                  <a-form-item label="肺炎链球菌多糖疫苗(如PSV23):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['b71', {...require1, initialValue: initValue('b71')}]" @change="changeRadio($event, 'controlb71')">
+                      <a-radio value="1">是</a-radio>
+                      <a-radio value="-1">否</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item label="时间::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb7 && controlb71">
+                    <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b711', {...dateRequire, initialValue: initValue('b711', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                  </a-form-item>
+                  <a-form-item label="肺炎链球菌结合疫苗(如PVC13):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['b72', {...require1, initialValue: initValue('b72')}]" @change="changeRadio($event, 'controlb72')">
+                      <a-radio value="1">是</a-radio>
+                      <a-radio value="-1">否</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item label="时间::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb7 && controlb72">
+                    <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b721', {...dateRequire, initialValue: initValue('b721', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                  </a-form-item>
+                </div>
+                <a-form-item label="(8) 过去1年,患者是否曾接受流感疫苗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b10', {...require1, initialValue: initValue('b10')}]">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="(9) 患者是否接受肺康复治疗:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['b11', {...require1, initialValue: initValue('b11')}]">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+              </div>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, recoverSubmit, exportFormData } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'mask4',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      markName: 'hxxt',
+      title: '年访视',
+      openKeys: [],
+      defaultSelectedKeys: [18],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      baselineFormStyle: {
+        // height: '444px',
+        'padding-top': '52px'
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 7 },
+        md: { span: 7 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 17 },
+        md: { span: 17 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 4, offset: 7 }
+      },
+      wrapperOffset: {
+        md: { span: 13 }
+      },
+      labelColOffset2: {
+        md: { span: 6, offset: 3 }
+      },
+      wrapperOffset2: {
+        md: { span: 15 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      hxxt: undefined,
+      controlb3: false,
+      controlb4: false,
+      controlb41: false,
+      controlb44: false,
+      controlb411: false,
+      controlb412: false,
+      //   controlb4111: false,
+      controlb5: false,
+      controlb52: false,
+      controlb6: false,
+      //   controlb7: false,
+      controlb8: false,
+      controlb81: false,
+      controla1: false,
+      spinning: false,
+      executeStatus: false,
+      controlb43: false,
+      controlb431: false,
+      controlb432: false,
+      controlb433: false,
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined,
+      controlb42: false,
+      controlb48: false,
+      controlb7: false,
+      controlb71: false,
+      controlb72: false
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    getFormData() {
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          if (res.data && res.data.hxxt)
+            that.hxxt = that.dealAnswers(res.data.hxxt)
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    },
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      this.maskId = e.key
+      if ((e.key >= 37 && e.key <= 42) || (e.key >= 45 && e.key <= 50)) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + this.maskId)
+      } else {
+        this.$router.replace('/list/task/' + this.patientBasisId + '/' + this.maskId)
+      }
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          var that = this
+          if(re.b4 === '1' && re.b41.indexOf('0') > -1 && re.b43.indexOf('0') > -1 && re.b48.indexOf('0') > -1 ) {
+            that.$message.error('有规律的呼吸疾病药物治疗不可同时勾选三项无')
+            return false
+          }
+          re = {
+            ...re,
+            'b31': typeof re['b31'] !== 'undefined' ? re['b31'].join(',') : '',
+            'b41': typeof re['b41'] !== 'undefined' ? re['b41'].join(',') : '',
+            'b42': typeof re['b42'] !== 'undefined' ? re['b42'].join(',') : '',
+            'b414': typeof re['b414'] !== 'undefined' ? re['b414'].join(',') : '',
+            'b43': typeof re['b43'] !== 'undefined' ? re['b43'].join(',') : '',
+            'b431': typeof re['b431'] !== 'undefined' ? re['b431'].join(',') : '',
+            'b433': typeof re['b433'] !== 'undefined' ? re['b433'].join(',') : '',
+            'b44': typeof re['b44'] !== 'undefined' ? re['b44'].join(',') : '',
+            'b52': typeof re['b52'] !== 'undefined' ? re['b52'].join(',') : '',
+            'b81': typeof re['b81'] !== 'undefined' ? re['b81'].join(',') : '',
+            'b48': typeof re['b48'] !== 'undefined' ? re['b48'].join(',') : '',
+            'b711': typeof re['b711'] !== 'undefined' ? re['b711'].format('YYYY-MM-DD') : '',
+            'b721': typeof re['b721'] !== 'undefined' ? re['b721'].format('YYYY-MM-DD') : ''
+          }
+          var that = this
+          console.log(re)
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.hxxt && this.hxxt.hxxtId) {
+            re.hxxtId = this.hxxt.hxxtId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.$message.success(res.msg)
+              that.spinning = false
+              that.getFormData()
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+          return false
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.hxxt) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.hxxt[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.hxxt[key])
+      } else if (type === 'array') {
+        return this.hxxt[key].split(',')
+      } else {
+        return this.hxxt[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        var splitArr = []
+        if (answer.a1 === 1) {
+          this.controla1 = true
+        }
+        if (answer.b3 === 1) {
+          this.controlb3 = true
+        }
+        if (answer.b4 === 1) {
+          this.controlb4 = true
+        }
+        if (answer.b5 === 1) {
+          this.controlb5 = true
+        }
+        if (answer.b6 === 1) {
+          this.controlb6 = true
+        }
+        if (answer.b8 === 1) {
+          this.controlb8 = true
+        }
+        if (answer.b52) {
+          splitArr = answer.b52.split(',')
+          if (splitArr.indexOf('3') > -1) {
+            this.controlb52 = true
+          }
+        }
+        if (answer.b41) {
+          splitArr = answer.b41.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controlb411 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controlb412 = true
+          }
+        }
+        if (answer.b42) {
+          splitArr = answer.b42.split(',')
+          if (splitArr.indexOf('5') > -1) {
+            this.controlb42 = true
+          }
+        }
+        if (answer.b48) {
+          splitArr = answer.b48.split(',')
+          if (splitArr.indexOf('12') > -1) {
+            this.controlb48 = true
+          }
+        }
+        if (answer.b414) {
+          splitArr = answer.b414.split(',')
+          if (splitArr.indexOf('4') > -1) {
+            this.controlb41 = true
+          }
+        }
+        if (answer.b43) {
+          splitArr = answer.b43.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controlb431 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controlb432 = true
+          }
+        }
+        if (answer.b431) {
+          splitArr = answer.b431.split(',')
+          if (splitArr.indexOf('7') > -1) {
+            this.controlb43 = true
+          }
+        }
+        if (answer.b433) {
+          splitArr = answer.b433.split(',')
+          if (splitArr.indexOf('2') > -1) {
+            this.controlb433 = true
+          }
+        }
+        if (answer.b44) {
+          splitArr = answer.b44.split(',')
+          if (splitArr.indexOf('4') > -1) {
+            this.controlb44 = true
+          }
+        }
+        if (answer.b52) {
+          splitArr = answer.b52.split(',')
+          if (splitArr.indexOf('3') > -1) {
+            this.controlb52 = true
+          }
+        }
+        if (answer.b81) {
+          splitArr = answer.b81.split(',')
+          if (splitArr.indexOf('5') > -1) {
+            this.controlb81 = true
+          }
+        }
+      }
+      return answer
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      re = {
+        ...re,
+        'b31': typeof re['b31'] !== 'undefined' ? re['b31'].join(',') : '',
+        'b41': typeof re['b41'] !== 'undefined' ? re['b41'].join(',') : '',
+        'b42': typeof re['b42'] !== 'undefined' ? re['b42'].join(',') : '',
+        'b414': typeof re['b414'] !== 'undefined' ? re['b414'].join(',') : '',
+        'b43': typeof re['b43'] !== 'undefined' ? re['b43'].join(',') : '',
+        'b431': typeof re['b431'] !== 'undefined' ? re['b431'].join(',') : '',
+        'b433': typeof re['b433'] !== 'undefined' ? re['b433'].join(',') : '',
+        'b44': typeof re['b44'] !== 'undefined' ? re['b44'].join(',') : '',
+        'b52': typeof re['b52'] !== 'undefined' ? re['b52'].join(',') : '',
+        'b81': typeof re['b81'] !== 'undefined' ? re['b81'].join(',') : '',
+        'b48': typeof re['b48'] !== 'undefined' ? re['b48'].join(',') : '',
+        'b711': typeof re['b711'] !== 'undefined' ? re['b711'].format('YYYY-MM-DD') : '',
+        'b721': typeof re['b721'] !== 'undefined' ? re['b721'].format('YYYY-MM-DD') : ''
+      }
+      var that = this
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.hxxt && this.hxxt.hxxtId) {
+        re.hxxtId = this.hxxt.hxxtId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.$message.success(res.msg)
+          that.spinning = false
+          that.getFormData()
+          //   params = new URLSearchParams()
+          //   params.append('patientBasisId', that.patientBasisId)
+          //   getPatientBasis(params)
+          //     .then(res => {
+          //       that.orgTree = res.data.list
+          //       that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+          //     })
+          //     .catch(error => {
+          //       console.log(error)
+          //     })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    withdraw() {
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.hxxt.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    handleNone(e, d, v, arr) {
+      if(e.target.checked){
+        let data = {}
+        data[d] = [v]
+        this.$nextTick(() => {
+          this.form.setFieldsValue(data)
+          arr.forEach((t) => {
+            this[t] = false
+          })
+        })
+      }
+    },
+    detect(d, v) {
+      if(Array.isArray(this.form.getFieldValue(d)) && this.form.getFieldValue(d).indexOf(v) > -1) {
+        return true
+      } else {
+        return false
+      }
+    },
+    _importData() {
+      var that = this
+      this.$confirm({
+        title: '是否确定导入数据?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('basisMarkId', that.maskId)
+          params.append('patientBasisId', that.patientBasisId)
+          exportFormData(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              that.hxxt = _.extend(that.hxxt || {}, that.dealAnswers(res.data.data.hxxt))
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+
+      .treeSubTitle {
+        font-size: 14px;
+      }
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/task/components/mask-19.vue b/src/views/task/components/mask-19.vue
new file mode 100644
index 0000000000..d5d5492658
--- /dev/null
+++ b/src/views/task/components/mask-19.vue
@@ -0,0 +1,1053 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!</p>
+              <div class="title">1.CT基本信息</div>
+              <a-form-item label="(1) CT检查日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['a1', {...dateRequire, initialValue: initValue('a1', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+              </a-form-item>
+              <a-form-item label="(2) 图像类型:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a2', {...selectRequired, initialValue: initValue('a2')}]">
+                  <a-radio value="1">HRCT</a-radio>
+                  <a-radio value="2">CT</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="上传图像:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <div class="clearfix" style="margin-top: 10px;">
+                  <a-upload :action="uploadUrl" listType="picture-card" :fileList="fileList" @preview="handlePreview" @change="handleChange">
+                    <div v-if="fileList.length < 10">
+                      <a-icon type="plus" />
+                      <div class="ant-upload-text">Upload</div>
+                    </div>
+                  </a-upload>
+                  <a-button style="position: absolute;top: 84px;left: 120px;font-size: 12px;padding: 0 5px;height: 30px;" @click="_import" v-if="fileList.length === 1">OCR识别</a-button>
+                  <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
+                    <img alt="example" style="width: 100%" :src="previewImage" />
+                  </a-modal>
+                </div>
+              </a-form-item>
+              <a-form-item label="放射学表现:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-textarea style="top: 2px;" v-decorator="['a21', {initialValue: initValue('a21')}]" autocomplete="off"></a-textarea>
+              </a-form-item>
+              <a-form-item label="放射学诊断:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-textarea style="top: 2px;" v-decorator="['a22', {initialValue: initValue('a22')}]" autocomplete="off"></a-textarea>
+              </a-form-item>
+              <div class="title">2.Reiff影像评分</div>
+              <a-form-item label="支扩CT图像:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-checkbox-group v-decorator="['b', {...selectRequired, initialValue: initValue('b', 'array')}]">
+                  <a-checkbox value="1" @change="changeSelect($event, 'controla3')">右上叶</a-checkbox>
+                  <a-checkbox value="2" @change="changeSelect($event, 'controla4')">左上叶</a-checkbox>
+                  <a-checkbox value="3" @change="changeSelect($event, 'controla5')">右中叶</a-checkbox>
+                  <a-checkbox value="4" @change="changeSelect($event, 'controla6')">左舌叶</a-checkbox>
+                  <a-checkbox value="5" @change="changeSelect($event, 'controla7')">右下叶</a-checkbox>
+                  <a-checkbox value="6" @change="changeSelect($event, 'controla8')">左下叶</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <a-form-item label="右上叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla3">
+                <a-radio-group v-decorator="['a3', {...selectRequired, initialValue: initValue('a3')}]" @change="computeReiff">
+                  <a-radio value="1">柱状</a-radio>
+                  <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                  <a-radio value="3">囊状</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="左上叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla4">
+                <a-radio-group v-decorator="['a4', {...selectRequired, initialValue: initValue('a4')}]" @change="computeReiff">
+                  <a-radio value="1">柱状</a-radio>
+                  <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                  <a-radio value="3">囊状</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="右中叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla5">
+                <a-radio-group v-decorator="['a5', {...selectRequired, initialValue: initValue('a5')}]" @change="computeReiff">
+                  <a-radio value="1">柱状</a-radio>
+                  <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                  <a-radio value="3">囊状</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="左舌叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla6">
+                <a-radio-group v-decorator="['a6', {...selectRequired, initialValue: initValue('a6')}]" @change="computeReiff">
+                  <a-radio value="1">柱状</a-radio>
+                  <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                  <a-radio value="3">囊状</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="右下叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla7">
+                <a-radio-group v-decorator="['a7', {...selectRequired, initialValue: initValue('a7')}]" @change="computeReiff">
+                  <a-radio value="1">柱状</a-radio>
+                  <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                  <a-radio value="3">囊状</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="左下叶:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla8">
+                <a-radio-group v-decorator="['a8', {...selectRequired, initialValue: initValue('a8')}]" @change="computeReiff">
+                  <a-radio value="1">柱状</a-radio>
+                  <a-radio value="2">静脉曲张型(混合型)</a-radio>
+                  <a-radio value="3">囊状</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="影像Reiff评分:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-input style="width: 240px;" v-decorator="['a9', {initialValue: initValue('a9')}]" :readOnly="true" autocomplete="off"></a-input>
+              </a-form-item>
+              <div class="title">3.Bhalla影像学评分 <a-icon type="arrows-alt" v-if="collap" style="cursor: pointer;" @click="collap = !collap" /><a-icon type="shrink" v-else @click="collap = !collap" style="cursor: pointer;" /></div>
+              <a-form-item label="(1) 支气管扩张程度:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a10', {initialValue: initValue('a10')}]" @change="computeBhalla" style="line-height: 30px;">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">轻度(管腔直径为临近血管直径的1-2倍)</a-radio>
+                  <a-radio value="2">中度(管腔直径为临近血管直径的2-3倍)</a-radio>
+                  <a-radio value="3">重度(管腔直径超过临近血管直径的3倍)</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(2) 支气管壁增厚情况" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a11', {initialValue: initValue('a11')}]" @change="computeBhalla" style="line-height: 30px;">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">轻度(支气管壁的厚度相当于临近血管壁厚度)</a-radio>
+                  <a-radio value="2">中度(支气管壁的厚度相当于临近血管壁厚度的1-2倍)</a-radio>
+                  <a-radio value="3">重度(支气管壁的厚度相当于临近血管壁厚度的2倍)</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(3) 支气管扩张的范围(肺段数):" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a12', {initialValue: initValue('a12')}]" @change="computeBhalla">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">1-5</a-radio>
+                  <a-radio value="2">6-9</a-radio>
+                  <a-radio value="3">&gt;9</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(4) 支气管管腔黏液阻塞范围(肺段数):" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a13', {initialValue: initValue('a13')}]" @change="computeBhalla">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">1-5</a-radio>
+                  <a-radio value="2">6-9</a-radio>
+                  <a-radio value="3">&gt;9</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(5) 存在脓肿的范围(肺段数):" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a14', {initialValue: initValue('a14')}]" @change="computeBhalla">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">1-5</a-radio>
+                  <a-radio value="2">6-9</a-radio>
+                  <a-radio value="3">&gt;9</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(6) 扩张支气管的分级数" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a15', {initialValue: initValue('a15')}]" @change="computeBhalla">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">超过4级</a-radio>
+                  <a-radio value="2">超过5级</a-radio>
+                  <a-radio value="3">超过6级</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(7) 肺大疱数" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a16', { initialValue: initValue('a16')}]" @change="computeBhalla">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">单侧(&lt;4)</a-radio>
+                  <a-radio value="2">双侧(&lt;4)</a-radio>
+                  <a-radio value="3">&gt;4</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(8) 肺气肿的范围" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a17', { initialValue: initValue('a17')}]" @change="computeBhalla">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">1-5</a-radio>
+                  <a-radio value="2">&gt;5</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(9) 肺不张/实变的" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-radio-group v-decorator="['a18', { initialValue: initValue('a18')}]" @change="computeBhalla">
+                  <a-radio value="0">无</a-radio>
+                  <a-radio value="1">肺亚段</a-radio>
+                  <a-radio value="2">肺段/肺叶</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(10) Bhalla影像学评分:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-show="!collap">
+                <a-popover>
+                  <template slot="content">
+                    <img src="../../../assets/bhalla.jpg" style="height: 400px;" />
+                  </template>
+                  <a-icon type="exclamation-circle" style="position: relative;left: -20px;color: #0399ec;cursor: pointer;" />
+                </a-popover>
+                <a-input style="width: 240px;" v-decorator="['a19', {initialValue: initValue('a19')}]" :readOnly="true" autocomplete="off"></a-input>
+              </a-form-item>
+              <div class="title">4.支扩类型</div>
+                <a-form-item label="支扩类型" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                  <a-radio-group v-decorator="['a20', {...selectRequired, initialValue: initValue('a20')}]" @change="computeBhalla">
+                    <a-radio value="2">柱状</a-radio>
+                    <a-radio value="3">静脉曲张型(混合型)</a-radio>
+                    <a-radio value="1">囊状</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, computeScore, recoverSubmit } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { getOcrResult } from '@/api/basis'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'task19',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      spinning: false,
+      previewVisible: false,
+      collap: true,
+      previewImage: '',
+      uploadUrl: process.env.VUE_APP_API_UPLOAD_URL,
+      viewPicUrl: process.env.VUE_APP_API_VIEW_PIC_URL,
+      fileList: [],
+      markName: 'xbyxx',
+      title: '年访视',
+      openKeys: [],
+      defaultSelectedKeys: [19],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: '100%',
+        "padding-right": "0px",
+        "border-right": "1px solid #ddd"
+      },
+      baselineFormStyle: {
+        // height: '444px',
+        'padding-top': '52px'
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 6, offset: 6 }
+      },
+      labelColOffset2: {
+        md: { span: 3, offset: 6 }
+      },
+      wrapperOffset: {
+        md: { span: 12 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      xbyxx: undefined,
+      executeStatus: undefined,
+      controla3: false,
+      controla4: false,
+      controla5: false,
+      controla6: false,
+      controla7: false,
+      controla8: false,
+      controla9: false,
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeSelect(e, t) {
+      var arr = ['controla3', 'controla4', 'controla5', 'controla6', 'controla7', 'controla8']
+      if (arr.indexOf(t) > -1 && !e.target.checked) {
+        this.computeReiff()
+      }
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      this.maskId = e.key
+      if ((e.key >= 37 && e.key <= 42) || (e.key >= 45 && e.key <= 50)) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + this.maskId)
+      } else {
+        this.$router.replace('/list/task/' + this.patientBasisId + '/' + this.maskId)
+      }
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          var that = this
+          re = {
+            ...re,
+            'a1': typeof re['a1'] !== 'undefined' ? re['a1'].format('YYYY-MM-DD') : '',
+            'b': typeof re['b'] !== 'undefined' ? re['b'].join(',') : ''
+          }
+          console.log(re)
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.xbyxx && this.xbyxx.xbyxxId) {
+            re.xbyxxId = this.xbyxx.xbyxxId
+          }
+          //附件
+          if (this.fileList && this.fileList.length) {
+            var a = []
+            _.each(this.fileList, function(v) {
+              if (v.response) a.push(v.response.fileName)
+              else a.push(v.name)
+            })
+            params.append('fileName', JSON.stringify(a))
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          that.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', this.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    getFormData() {
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          if (res.data && res.data.xbyxx) {
+            for (let key of Object.keys(res.data.xbyxx)) {
+              if (res.data.xbyxx[key] === 0) {
+                res.data.xbyxx[key] = "0";
+              }
+            }
+            that.xbyxx = that.dealAnswers(res.data.xbyxx)
+          }
+          if (res.data && res.data.annexListXbyxx) {
+            that.fileList = _.map(res.data.annexListXbyxx, function(v) {
+              return {
+                uid: v.annexId,
+                url: that.viewPicUrl + v.annexAddress,
+                name: v.annexAddress,
+                status: 'done'
+              }
+            })
+          }
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      var that = this
+      re = {
+        ...re,
+        'a1': typeof re['a1'] !== 'undefined' ? re['a1'].format('YYYY-MM-DD') : '',
+        'b': typeof re['b'] !== 'undefined' ? re['b'].join(',') : ''
+      }
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.xbyxx && this.xbyxx.xbyxxId) {
+        re.xbyxxId = this.xbyxx.xbyxxId
+      }
+      //附件
+      if (this.fileList && this.fileList.length) {
+        var a = []
+        _.each(this.fileList, function(v) {
+          if (v.response) a.push(v.response.fileName)
+          else a.push(v.name)
+        })
+        // var fileName = _.map(this.fileList, function(v) { return v.response ? v.response.fileName : v.name })
+        params.append('fileName', JSON.stringify(a))
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      that.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', this.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    initValue(key, type = 'normal') {
+      if (!this.xbyxx) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.xbyxx[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.xbyxx[key])
+      } else if (type === 'array') {
+        return this.xbyxx[key].split(',')
+      } else {
+        return this.xbyxx[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        var splitArr = []
+        if (answer.b) {
+          splitArr = answer.b.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controla3 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controla4 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.controla5 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.controla6 = true
+          }
+          if (splitArr.indexOf('5') > -1) {
+            this.controla7 = true
+          }
+          if (splitArr.indexOf('6') > -1) {
+            this.controla8 = true
+          }
+        }
+      }
+      return answer
+    },
+    computeReiff() {
+      var that = this
+      this.$nextTick(() => {
+        var params = new URLSearchParams()
+        params.append('scoreType', 'reiff')
+        params.append('xbyxxStr', JSON.stringify(that.form.getFieldsValue()))
+        computeScore(params)
+          .then(res => {
+            console.log(res.data.a9)
+            that.form.setFieldsValue({
+              a9: res.data.a9
+            })
+            let arr = _.values(that.form.getFieldsValue(['a3', 'a4', 'a5', 'a6', 'a7', 'a8']))
+            
+            if(_.some(arr, function(v){ return v === 3 || v === '3' })) {
+              that.form.setFieldsValue({
+                a20: '1'
+              })
+            } else if(_.some(arr, function(v){ return v === 2 || v === '2' })) {
+              that.form.setFieldsValue({
+                a20: '3'
+              })
+            } else {
+              that.form.setFieldsValue({
+                a20: '2'
+              })
+            }
+          })
+          .catch(error => {
+            console.log(error)
+          })
+      })
+    },
+    computeBhalla() {
+      var that = this
+      this.$nextTick(() => {
+        var params = new URLSearchParams()
+        params.append('scoreType', 'bhalla')
+        params.append('xbyxxStr', JSON.stringify(that.form.getFieldsValue()))
+        computeScore(params)
+          .then(res => {
+            console.log(res.data.a9)
+            that.form.setFieldsValue({
+              a19: res.data.a19
+            })
+          })
+          .catch(error => {
+            console.log(error)
+          })
+      })
+    },
+    handleCancel() {
+      this.previewVisible = false;
+    },
+    handlePreview(file) {
+      this.previewImage = file.url || file.thumbUrl;
+      this.previewVisible = true;
+    },
+    handleChange({ fileList }) {
+      var that = this
+      this.fileList = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList.forEach((f,i) => {
+          if(f.response){
+              that.$set(that.fileList,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    _import() {
+      this.spinning = true
+      var params = new URLSearchParams()
+      params.append('type', 6)
+      params.append('url', this.fileList[0].response.data.src)
+      var that = this
+      getOcrResult(params)
+        .then(res => {
+          console.log(res.data)
+          this.spinning = false
+          this.$message.success(res.data.info)
+          this.xbyxx = _.extend(this.xbyxx || {}, this.dealAnswers(res.data))
+          that.form.setFieldsValue(that.xbyxx)
+        })
+        .catch(error => {
+          this.confirmLoading = false
+        })
+    },
+    withdraw(){
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.xbyxx.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 20px 20px 80px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/task/components/mask-20.vue b/src/views/task/components/mask-20.vue
new file mode 100644
index 0000000000..ab491f4c46
--- /dev/null
+++ b/src/views/task/components/mask-20.vue
@@ -0,0 +1,1657 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!</p>
+              <a-form-item label="采样性质(多选):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['a', {...selectRequired, initialValue: initValue('a', 'array')}]">
+                  <a-checkbox value="1" @change="changeSelect($event, 'control1')" :disabled="detect('a', '4') || control4">细菌</a-checkbox>
+                  <a-checkbox value="2" @change="changeSelect($event, 'control2')" :disabled="detect('a', '4') || control4">真菌</a-checkbox>
+                  <a-checkbox value="3" @change="changeSelect($event, 'control3')" :disabled="detect('a', '4') || control4">分枝杆菌</a-checkbox>
+                  <a-checkbox value="4" @change="handleNone($event, 'a', '4', [], 'control4')">无</a-checkbox>
+                </a-checkbox-group>
+              </a-form-item>
+              <div v-if="control1">
+                <div class="title">1.细菌</div>
+                <a-form-item label="(1) 取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['a1', {...dateRequire, initialValue: initValue('a1', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="(2) 是否本院:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-radio-group v-decorator="['a2', {...require1, initialValue: initValue('a2')}]" @change="changeRadio($event, 'controla2')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="医院名称" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controla2">
+                  <a-input style="width: 240px;" v-decorator="['a21', {...inputRequired, initialValue: initValue('a21')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(3) 标本类型:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['a3', {...selectRequired, initialValue: initValue('a3', 'array')}]">
+                    <a-checkbox value="1" @change="changeSelect($event, 'controla31')">痰液</a-checkbox>
+                    <a-checkbox value="2" @change="changeSelect($event, 'controla32')">诱导痰</a-checkbox>
+                    <a-checkbox value="3" @change="changeSelect($event, 'controla33')">支气管肺泡灌洗液</a-checkbox>
+                    <a-checkbox value="4" @change="changeSelect($event, 'controla34')">血标本</a-checkbox>
+                    <a-checkbox value="5">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="痰液培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla31">
+                  <a-radio-group v-decorator="['a31', {...selectRequired, initialValue: initValue('a31')}]">
+                    <a-radio value="0">阴性</a-radio>
+                    <a-radio value="1">阳性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="痰液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controla31">
+                  <a-radio-group v-decorator="['a311', {...selectRequired, initialValue: initValue('a311')}]" @change="changeRadio($event, 'controla3113')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他痰液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controla3113">
+                  <a-input style="width: 240px;" v-decorator="['a3111', {...inputRequired, initialValue: initValue('a3111')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="诱导痰培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla32">
+                  <a-radio-group v-decorator="['a32', {...selectRequired, initialValue: initValue('a32')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="诱导痰检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controla32">
+                  <a-radio-group v-decorator="['a321', {...selectRequired, initialValue: initValue('a321')}]" @change="changeRadio($event, 'controla3213')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他诱导痰检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controla3213">
+                  <a-input style="width: 240px;" v-decorator="['a3211', {...inputRequired, initialValue: initValue('a3211')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="支气管肺泡灌洗液培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla33">
+                  <a-radio-group v-decorator="['a33', {...selectRequired, initialValue: initValue('a33')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="支气管肺泡灌洗液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controla33">
+                  <a-radio-group v-decorator="['a331', {...selectRequired, initialValue: initValue('a331')}]" @change="changeRadio($event, 'controla3313')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他支气管肺泡灌洗液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controla3313">
+                  <a-input style="width: 240px;" v-decorator="['a3311', {...inputRequired, initialValue: initValue('a3311')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="血标本培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla34">
+                  <a-radio-group v-decorator="['a34', {...selectRequired, initialValue: initValue('a34')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="血标本检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controla34">
+                  <a-radio-group v-decorator="['a341', {...selectRequired, initialValue: initValue('a341')}]" @change="changeRadio($event, 'controla3413')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他血标本检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controla3413">
+                  <a-input style="width: 240px;" v-decorator="['a3411', {...inputRequired, initialValue: initValue('a3411')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(4) 是否分离到微生物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a4', {...require1, initialValue: initValue('a4')}]" @change="changeRadio($event, 'controla4')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="分离到微生物:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla4">
+                  <a-checkbox-group v-decorator="['a42', {...selectRequired, initialValue: initValue('a42', 'array')}]" class="control-m-line">
+                    <a-checkbox value="0" @change="showList($event, '铜绿假单胞菌', 'controla420', true)">铜绿假单胞菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[0]" v-if="controla420" :type1="type1" @listen="changeType1" :isFirst="true" :picSource="picList1[0]" @changePic1="changePic1($event, 0)"></add-table>
+                    <a-checkbox value="2" @change="showList($event, '肺炎克雷伯菌', 'controla422', true)">肺炎克雷伯菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[2]" v-if="controla422" :isFirst="true" :picSource="picList1[2]" @changePic1="changePic1($event, 2)"></add-table>
+                    <a-checkbox value="10" @change="showList($event, '大肠杆菌', 'controla4210', true)">大肠杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[10]" v-if="controla4210" :isFirst="true" :picSource="picList1[10]" @changePic1="changePic1($event, 10)"></add-table>
+                    <a-checkbox value="3" @change="showList($event, '阴沟肠杆菌', 'controla423', true)">阴沟肠杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[3]" v-if="controla423" :isFirst="true" :picSource="picList1[3]" @changePic1="changePic1($event, 3)"></add-table>
+                    <a-checkbox value="1" @change="showList($event, '肺炎链球菌', 'controla421', true)">肺炎链球菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[1]" v-if="controla421" :isFirst="true" :picSource="picList1[1]" @changePic1="changePic1($event, 1)"></add-table>
+                    <a-checkbox value="6" @change="showList($event, '金黄色葡萄球菌', 'controla426', true)">金黄色葡萄球菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[6]" v-if="controla426" :isFirst="true" :picSource="picList1[6]" @changePic1="changePic1($event, 6)"></add-table>
+                    <a-checkbox value="8" @change="showList($event, '流感嗜血杆菌', 'controla428', true)">流感嗜血杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[8]" v-if="controla428" :isFirst="true" :picSource="picList1[8]" @changePic1="changePic1($event, 8)"></add-table>
+                    <a-checkbox value="4" @change="showList($event, '副流感嗜血杆菌', 'controla424', true)">副流感嗜血杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[4]" v-if="controla424" :isFirst="true" :picSource="picList1[4]" @changePic1="changePic1($event, 4)"></add-table>
+                    <a-checkbox value="9" @change="showList($event, '卡他莫拉菌', 'controla429', true)">卡他莫拉菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[9]" v-if="controla429" :isFirst="true" :picSource="picList1[9]" @changePic1="changePic1($event, 9)"></add-table>
+                    <a-checkbox value="5" @change="showList($event, '鲍曼不动杆菌', 'controla425', true)">鲍曼不动杆菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[5]" v-if="controla425" :isFirst="true" :picSource="picList1[5]" @changePic1="changePic1($event, 5)"></add-table>
+                    <a-checkbox value="11" @change="showList($event, '洋葱霍尔德菌', 'controla4211', true)">洋葱霍尔德菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[11]" v-if="controla4211" :isFirst="true" :picSource="picList1[11]" @changePic1="changePic1($event, 11)"></add-table>
+                    <a-checkbox value="12" @change="showList($event, '嗜麦芽窄食单胞菌', 'controla4212', true)">嗜麦芽窄食单胞菌</a-checkbox>
+                    <add-table :dataSource="optionDataSource[12]" v-if="controla4212" :isFirst="true" :picSource="picList1[12]" @changePic1="changePic1($event, 12)"></add-table>
+                    <a-checkbox value="7" @change="showList($event, '其他', 'controla427', true)">其他</a-checkbox>
+                    <a-input style="width: 240px;margin-right: 10px;" v-if="controla427" @change="otherChange($event, 7, true)" autocomplete="off" v-decorator="['otherName1', {...inputRequired, initialValue: otherName1}]"></a-input>
+                    <add-table :dataSource="optionDataSource[7]" v-if="controla427" :isFirst="true" :picSource="picList1[7]" @changePic1="changePic1($event, 7)"></add-table>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="铜绿假单胞菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla420">
+                  <a-radio-group v-decorator="['a421', {...require1, initialValue: initValue('a421')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="肺炎克雷伯菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla422">
+                  <a-radio-group v-decorator="['a422', {...require1, initialValue: initValue('a422')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="大肠杆菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla4210">
+                  <a-radio-group v-decorator="['a423', {...require1, initialValue: initValue('a423')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="阴沟肠杆菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla423">
+                  <a-radio-group v-decorator="['a424', {...require1, initialValue: initValue('a424')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="肺炎链球菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla421">
+                  <a-radio-group v-decorator="['a425', {...require1, initialValue: initValue('a425')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="金黄色葡萄球菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla426">
+                  <a-radio-group v-decorator="['a426', {...require1, initialValue: initValue('a426')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="流感嗜血杆菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla428">
+                  <a-radio-group v-decorator="['a427', {...require1, initialValue: initValue('a427')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="副流感嗜血杆菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla424">
+                  <a-radio-group v-decorator="['a428', {...require1, initialValue: initValue('a428')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="卡他莫拉菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla429">
+                  <a-radio-group v-decorator="['a429', {...require1, initialValue: initValue('a429')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="鲍曼不动杆菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla425">
+                  <a-radio-group v-decorator="['a4210', {...require1, initialValue: initValue('a4210')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="洋葱霍尔德菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla4211">
+                  <a-radio-group v-decorator="['a4211', {...require1, initialValue: initValue('a4211')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="嗜麦芽窄食单胞菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla4212">
+                  <a-radio-group v-decorator="['a4212', {...require1, initialValue: initValue('a4212')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controla427">
+                  <a-radio-group v-decorator="['a4213', {...require1, initialValue: initValue('a4213')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+              </div>
+              <div v-if="control2">
+                <div class="title">2.真菌</div>
+                <a-form-item label="取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['b1', {...dateRequire, initialValue: initValue('b1', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="是否本院:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                  <a-radio-group v-decorator="['b2', {...require1, initialValue: initValue('b2')}]" @change="changeRadio($event, 'controlb2')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="医院名称" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlb2">
+                  <a-input style="width: 240px;" v-decorator="['b21', {...inputRequired, initialValue: initValue('b21')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="标本类型:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['b3', {...selectRequired, initialValue: initValue('b3', 'array')}]">
+                    <a-checkbox value="1" @change="changeSelect($event, 'controlb31')">痰液</a-checkbox>
+                    <a-checkbox value="2" @change="changeSelect($event, 'controlb32')">诱导痰</a-checkbox>
+                    <a-checkbox value="3" @change="changeSelect($event, 'controlb33')">支气管肺泡灌洗液</a-checkbox>
+                    <a-checkbox value="4" @change="changeSelect($event, 'controlb34')">血标本</a-checkbox>
+                    <a-checkbox value="5">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="痰液培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlb31">
+                  <a-radio-group v-decorator="['b31', {...selectRequired, initialValue: initValue('b31')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="痰液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlb31">
+                  <a-radio-group v-decorator="['b311', {...selectRequired, initialValue: initValue('b311')}]" @change="changeRadio($event, 'controlb3113')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他痰液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlb3113">
+                  <a-input style="width: 240px;" v-decorator="['b3111', {...inputRequired, initialValue: initValue('b3111')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="诱导痰培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlb32">
+                  <a-radio-group v-decorator="['b32', {...selectRequired, initialValue: initValue('b32')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="诱导痰检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlb32">
+                  <a-radio-group v-decorator="['b321', {...selectRequired, initialValue: initValue('b321')}]" @change="changeRadio($event, 'controlb3213')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他诱导痰检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlb3213">
+                  <a-input style="width: 240px;" v-decorator="['b3211', {...inputRequired, initialValue: initValue('b3211')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="支气管肺泡灌洗液培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlb33">
+                  <a-radio-group v-decorator="['b33', {...selectRequired, initialValue: initValue('b33')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="支气管肺泡灌洗液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlb33">
+                  <a-radio-group v-decorator="['a331', {...selectRequired, initialValue: initValue('b331')}]" @change="changeRadio($event, 'controlb3313')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他支气管肺泡灌洗液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlb3313">
+                  <a-input style="width: 240px;" v-decorator="['b3311', {...inputRequired, initialValue: initValue('b3311')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="血标本培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlb34">
+                  <a-radio-group v-decorator="['b34', {...selectRequired, initialValue: initValue('b34')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="血标本检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlb34">
+                  <a-radio-group v-decorator="['b341', {...selectRequired, initialValue: initValue('b341')}]" @change="changeRadio($event, 'controlb3413')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他血标本检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlb3413">
+                  <a-input style="width: 240px;" v-decorator="['b3411', {...inputRequired, initialValue: initValue('b3411')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="是否分离到微生物:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controla5">
+                  <a-radio-group v-decorator="['b4', {...require1, initialValue: initValue('b4')}]" @change="changeRadio($event, 'controlb4')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="真菌:" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb4">
+                  <a-checkbox-group v-decorator="['b42', {...selectRequired, initialValue: initValue('b42', 'array')}]">
+                    <a-checkbox value="0">白色念珠菌</a-checkbox>
+                    <a-checkbox value="1">曲霉</a-checkbox>
+                    <a-checkbox value="2" @change="changeSelect($event, 'controlb422')">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="其他真菌" :labelCol="labelColHor" :wrapperCol="wrapperHor" v-if="controlb422">
+                  <a-input style="width: 240px;" v-decorator="['b43', {...inputRequired, initialValue: initValue('b43')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+              <div v-if="control3">
+                <div class="title">3.分枝杆菌</div>
+                <a-form-item label="(1) 取样日期:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-date-picker placeholder="请选择" style="width: 240px;" v-decorator="['c1', {...dateRequire, initialValue: initValue('c1', 'time')}]" :disabledDate="disabledDate"></a-date-picker>
+                </a-form-item>
+                <a-form-item label="(2) 是否本院:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                    <a-radio-group v-decorator="['c2', {...require1, initialValue: initValue('c2')}]" @change="changeRadio($event, 'controlc2')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                    </a-radio-group>
+                </a-form-item>
+                <a-form-item class="border-dotted" label="医院名称" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlc2">
+                    <a-input style="width: 240px;" v-decorator="['c21', {...inputRequired, initialValue: initValue('c21')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(3) 标本类型:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['c3', {...selectRequired, initialValue: initValue('c3', 'array')}]">
+                    <a-checkbox value="1" @change="changeSelect($event, 'controlc31')">痰液</a-checkbox>
+                    <a-checkbox value="2" @change="changeSelect($event, 'controlc32')">诱导痰</a-checkbox>
+                    <a-checkbox value="3" @change="changeSelect($event, 'controlc33')">支气管肺泡灌洗液</a-checkbox>
+                    <a-checkbox value="4" @change="changeSelect($event, 'controlc34')">血标本</a-checkbox>
+                    <a-checkbox value="5">其他</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="痰液培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlc31">
+                  <a-radio-group v-decorator="['c31', {...selectRequired, initialValue: initValue('c31')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="痰液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlc31">
+                  <a-radio-group v-decorator="['c311', {...selectRequired, initialValue: initValue('c311')}]" @change="changeRadio($event, 'controlc3113')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他痰液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlc3113">
+                  <a-input style="width: 240px;" v-decorator="['c3111', {...inputRequired, initialValue: initValue('c3111')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="诱导痰培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlc32">
+                  <a-radio-group v-decorator="['c32', {...selectRequired, initialValue: initValue('c32')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="诱导痰检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlc32">
+                  <a-radio-group v-decorator="['c321', {...selectRequired, initialValue: initValue('c321')}]" @change="changeRadio($event, 'controlc3213')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他诱导痰检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlc3213">
+                  <a-input style="width: 240px;" v-decorator="['c3211', {...inputRequired, initialValue: initValue('c3211')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="支气管肺泡灌洗液培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlc33">
+                  <a-radio-group v-decorator="['c33', {...selectRequired, initialValue: initValue('c33')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="支气管肺泡灌洗液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlc33">
+                  <a-radio-group v-decorator="['c331', {...selectRequired, initialValue: initValue('c331')}]" @change="changeRadio($event, 'controlc3313')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他支气管肺泡灌洗液检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlc3313">
+                  <a-input style="width: 240px;" v-decorator="['c3311', {...inputRequired, initialValue: initValue('c3311')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="血标本培养结果:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlc34">
+                  <a-radio-group v-decorator="['c34', {...selectRequired, initialValue: initValue('c34')}]">
+                    <a-radio value="1">阳性</a-radio>
+                    <a-radio value="0">阴性</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="血标本检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" class="border-dotted" v-if="controlc34">
+                  <a-radio-group v-decorator="['c341', {...selectRequired, initialValue: initValue('c341')}]" @change="changeRadio($event, 'controlc3413')">
+                    <a-radio value="1">普通培养</a-radio>
+                    <a-radio value="2">NGS</a-radio>
+                    <a-radio value="3">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="其他血标本检测方法:" :labelCol="labelColOffset2" :wrapperCol="wrapperOffset2" v-if="controlc3413">
+                  <a-input style="width: 240px;" v-decorator="['c3411', {...inputRequired, initialValue: initValue('c3411')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="分离到微生物:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-checkbox-group v-decorator="['c4', {...selectRequired, initialValue: initValue('c4', 'array')}]">
+                    <a-checkbox value="0" :disabled="detect('c4', '2') || initC4">结核分枝杆菌</a-checkbox>
+                    <a-checkbox value="1" :disabled="detect('c4', '2') || initC4" @change="changeSelect($event, 'controlc41')">非结核分枝杆菌</a-checkbox>
+                    <a-checkbox value="2" @change="handleNone($event, 'c4', '2', ['controlc41'])">阴性</a-checkbox>
+                  </a-checkbox-group>
+                </a-form-item>
+                <a-form-item label="非结核分枝杆菌检测方式:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted" v-if="controlc41">
+                  <a-radio-group v-decorator="['c422', {...require1, initialValue: initValue('c422')}]">
+                    <a-radio value="1">MIC</a-radio>
+                    <a-radio value="2">纸片法</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controlc41">
+                    <a-form-item label="非结核分枝杆菌:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-checkbox-group v-decorator="['c41', {...selectRequired, initialValue: initValue('c41', 'array')}]">
+                        <a-checkbox value="1">堪萨斯分枝杆菌</a-checkbox>
+                        <a-checkbox value="2">龟分枝杆菌</a-checkbox>
+                        <a-checkbox value="3">脓肿分枝杆菌</a-checkbox>
+                        <a-checkbox value="4">鸟分枝杆菌复合群(MAC)</a-checkbox>
+                        <a-checkbox value="5" @change="changeSelect($event, 'controlc415')">其他</a-checkbox>
+                    </a-checkbox-group>
+                    </a-form-item>
+                    <a-form-item label="其他非结核分枝杆菌名称:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controlc415">
+                    <a-input style="width: 240px;margin-right: 10px;" autocomplete="off"></a-input>
+                    </a-form-item>
+                </div>
+              </div>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, computeScore, getMedicineAllergyList, recoverSubmit } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import AddTable from "@/views/account/center/model/table"
+import ContactForm from '@/views/account/ContactForm'
+import _ from 'lodash'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+export default {
+  name: 'task20',
+  components: {
+    STree,
+    MyIcon,
+    AddTable,
+    ContactForm
+  },
+  data() {
+    return {
+      optionDataSource: [],
+      optionDataSource2: [],
+      markName: 'bywsw',
+      title: '年访视',
+      openKeys: [],
+      defaultSelectedKeys: [20],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: '100%',
+        "padding-right": "0px",
+        "border-right": "1px solid #ddd"
+      },
+      baselineFormStyle: {
+        // height: '444px',
+        'padding-top': '52px'
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 7 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 17 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 3, offset: 7 }
+      },
+      labelColOffset2: {
+        md: { span: 4, offset: 7 }
+      },
+      wrapperOffset2: {
+        md: { span: 13 }
+      },
+      wrapperOffset: {
+        md: { span: 14 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      bywsw: undefined,
+      controla2: false,
+      controla4: false,
+      controlb2: false,
+      controlb4: false,
+      controlc2: false,
+      controlc41: false,
+      controla420: false,
+      controla421: false,
+      controla422: false,
+      controla423: false,
+      controla424: false,
+      controla425: false,
+      controla426: false,
+      controla427: false,
+      controla428: false,
+      controla429: false,
+      controla4210: false,
+      controla4211: false,
+      controla4212: false,
+      controlb422: false,
+      controlc415: false,
+      controla31: false,
+      controla32: false,
+      controla33: false,
+      controla34: false,
+      controlb31: false,
+      controlb32: false,
+      controlb33: false,
+      controlb34: false,
+      controlc31: false,
+      controlc32: false,
+      controlc33: false,
+      controlc34: false,
+      spinning: false,
+      executeStatus: false,
+      control1: false,
+      control2: false,
+      control3: false,
+      control4: false,
+      type1: '',
+      otherName1: '',
+      otherName2: '',
+      picList1: [],
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined,
+      controla6: false,
+      controla5: false,
+      controlc5: false,
+      initC4: false,
+      controla3113: false,
+      controla3213: false,
+      controla3313: false,
+      controla3413: false,
+      controlb3113: false,
+      controlb3213: false,
+      controlb3313: false,
+      controlb3413: false,
+      controlc3113: false,
+      controlc3213: false,
+      controlc3313: false,
+      controlc3413: false
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    getFormData() {
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          Object.keys(res.data.bywsw).forEach(key => {
+            if (res.data.bywsw[key] === 0) {
+              res.data.bywsw[key] = "0";
+            }
+          });
+          if (res.data && res.data.bywsw)
+            that.bywsw = that.dealAnswers(res.data)
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    },
+    changeSelect(e, t) {
+      var that = this
+      this[t] = e.target.checked;
+      if (t === 'control4' && e.target.checked) {
+        this.control1 = false
+        this.control2 = false
+        this.control3 = false
+        //赋值必须要延时
+        setTimeout(function() {
+          that.form.setFieldsValue({ a: ['4'] })
+        }, 0)
+      }
+    },
+    changeRadio(e, t) {
+      if (t === 'controla2' || t === 'controlb2' || t === 'controlc2') {
+        if (e.target.value === '-1') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (t === 'controla4' && e.target.value === '-1') {
+        this.controla4 = false
+        this.controla420 = false
+        this.controla421 = false
+        this.controla422 = false
+        this.controla423 = false
+        this.controla424 = false
+        this.controla425 = false
+        this.controla426 = false
+        this.controla427 = false
+        this.controla428 = false
+        this.controla429 = false
+        this.controla4210 = false
+        this.controla4211 = false
+        this.controla4212 = false
+      } else if (t === 'controlb4' && e.target.value === '-1') {
+        this.controlb4 = false
+        this.controlb422 = false
+      } else if ((t !== 'controla3113' && t !== 'controla3213' && t !== 'controla3313' && t !== 'controla3413' && t !== 'controlb3113' && t !== 'controlb3213' && t !== 'controlb3313' && t !== 'controlb3413' && t !== 'controlc3113' && t !== 'controlc3213' && t !== 'controlc3313' && t !== 'controlc3413') && e.target.value === '1') {
+        this[t] = true
+      } else if((t === 'controla3113' || t === 'controla3213' || t === 'controla3313' || t === 'controla3413' ||
+        t === 'controlb3113' || t === 'controlb3213' || t === 'controlb3313' || t === 'controlb3413' ||
+        t === 'controlc3113' || t === 'controlc3213' || t === 'controlc3313' || t === 'controlc3413') && e.target.value === '3') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      if ((e.key >= 37 && e.key <= 42) || (e.key >= 45 && e.key <= 50)) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      } else {
+        this.$router.replace('/list/task/' + this.patientBasisId + '/' + e.key)
+      }
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          const allergy = []
+          for (var key in this.optionDataSource) {
+            _.each(this.optionDataSource[key], function(item) {
+              allergy.push({
+                markId: 1,
+                microbeName: item.microbeName,
+                antibiotic: item.antibiotic,
+                antibioticResult: item.antibioticResult,
+                allergyValue: item.allergyValue
+              })
+            })
+          }
+          for (var key in this.optionDataSource2) {
+            _.each(this.optionDataSource2[key], function(item) {
+              allergy.push({
+                markId: 2,
+                microbeName: item.microbeName,
+                antibiotic: item.antibiotic,
+                antibioticResult: item.antibioticResult,
+                allergyValue: item.allergyValue
+              })
+            })
+          }
+          //处理附件
+          var alList1 = ['铜绿假单胞菌', '阴沟肠杆菌', '肺炎克雷伯菌', '肺炎链球菌', '副流感嗜血杆菌', '鲍曼不动杆菌', '金黄色葡萄球菌', this.form.getFieldValue('otherName1')]
+
+          var pic1 = [];
+          if (!_.isEmpty(this.picList1)) {
+            pic1 = _.map(this.picList1, function(v, i) {
+              return '1-' + alList1[i] + '-' + v
+            })
+          }
+          var re = this.form.getFieldsValue()
+          var that = this
+          re = {
+            ...re,
+            'a': typeof re['a'] !== 'undefined' ? re['a'].join(',') : '',
+            'a3': typeof re['a3'] !== 'undefined' ? re['a3'].join(',') : '',
+            'b3': typeof re['b3'] !== 'undefined' ? re['b3'].join(',') : '',
+            'c3': typeof re['c3'] !== 'undefined' ? re['c3'].join(',') : '',
+            'a1': typeof re['a1'] !== 'undefined' ? re['a1'].format('YYYY-MM-DD') : '',
+            'b1': typeof re['b1'] !== 'undefined' ? re['b1'].format('YYYY-MM-DD') : '',
+            'c1': typeof re['c1'] !== 'undefined' ? re['c1'].format('YYYY-MM-DD') : '',
+            'a42': typeof re['a42'] !== 'undefined' ? re['a42'].join(',') : '',
+            'b42': typeof re['b42'] !== 'undefined' ? re['b42'].join(',') : '',
+            'c4': typeof re['c4'] !== 'undefined' ? re['c4'].join(',') : '',
+            'c41': typeof re['c41'] !== 'undefined' ? re['c41'].join(',') : ''
+          }
+          console.log(re)
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.bywsw && this.bywsw.bywswId) {
+            re.bywswId = this.bywsw.bywswId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          params.append('allergy', JSON.stringify(allergy))
+          params.append('fileNameForMa', JSON.stringify(pic1))
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', this.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    save() {
+      const allergy = []
+      for (var key in this.optionDataSource) {
+        _.each(this.optionDataSource[key], function(item) {
+          allergy.push({
+            markId: 1,
+            microbeName: item.microbeName,
+            antibiotic: item.antibiotic,
+            antibioticResult: item.antibioticResult,
+            allergyValue: item.allergyValue
+          })
+        })
+      }
+      for (var key in this.optionDataSource2) {
+        _.each(this.optionDataSource2[key], function(item) {
+          allergy.push({
+            markId: 2,
+            microbeName: item.microbeName,
+            antibiotic: item.antibiotic,
+            antibioticResult: item.antibioticResult,
+            allergyValue: item.allergyValue
+          })
+        })
+      }
+      //处理附件
+      var alList1 = ['铜绿假单胞菌', '阴沟肠杆菌', '肺炎克雷伯菌', '肺炎链球菌', '副流感嗜血杆菌', '鲍曼不动杆菌', '金黄色葡萄球菌', this.form.getFieldValue('otherName1')]
+
+      var pic1 = [];
+      if (!_.isEmpty(this.picList1)) {
+        pic1 = _.map(this.picList1, function(v, i) {
+          return '1-' + alList1[i] + '-' + v
+        })
+      }
+      var re = this.form.getFieldsValue()
+      var that = this
+      re = {
+        ...re,
+        'a': typeof re['a'] !== 'undefined' ? re['a'].join(',') : '',
+        'a3': typeof re['a3'] !== 'undefined' ? re['a3'].join(',') : '',
+        'b3': typeof re['b3'] !== 'undefined' ? re['b3'].join(',') : '',
+        'c3': typeof re['c3'] !== 'undefined' ? re['c3'].join(',') : '',
+        'a1': typeof re['a1'] !== 'undefined' ? re['a1'].format('YYYY-MM-DD') : '',
+        'b1': typeof re['b1'] !== 'undefined' ? re['b1'].format('YYYY-MM-DD') : '',
+        'c1': typeof re['c1'] !== 'undefined' ? re['c1'].format('YYYY-MM-DD') : '',
+        'a42': typeof re['a42'] !== 'undefined' ? re['a42'].join(',') : '',
+        'b42': typeof re['b42'] !== 'undefined' ? re['b42'].join(',') : '',
+        'c4': typeof re['c4'] !== 'undefined' ? re['c4'].join(',') : '',
+        'c41': typeof re['c41'] !== 'undefined' ? re['c41'].join(',') : ''
+      }
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.bywsw && this.bywsw.bywswId) {
+        re.bywswId = this.bywsw.bywswId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      params.append('allergy', JSON.stringify(allergy))
+      params.append('fileNameForMa', JSON.stringify(pic1))
+
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', this.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    initValue(key, type = 'normal') {
+      if (!this.bywsw) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.bywsw[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.bywsw[key])
+      } else if (type === 'array') {
+        return this.bywsw[key].split(',')
+      } else {
+        return this.bywsw[key] + ''
+      }
+    },
+    dealAnswers(data) {
+      var that = this
+      var answer = data.bywsw
+      var alList = ['铜绿假单胞菌', '阴沟肠杆菌', '肺炎克雷伯菌', '肺炎链球菌', '副流感嗜血杆菌', '鲍曼不动杆菌', '金黄色葡萄球菌']
+      if (answer && !_.isEmpty(answer)) {
+        var splitArr = []
+        if (answer.a) {
+          splitArr = answer.a.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.control1 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.control2 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.control3 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.control4 = true
+          }
+        }
+        if (answer.a3) {
+          splitArr = answer.a3.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controla31 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controla32 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.controla33 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.controla34 = true
+          }
+        }
+        if(answer.a311 === 3) {
+          this.controla3113 = true
+        }
+        if(answer.a321 === 3) {
+          this.controla3213 = true
+        }
+        if(answer.a331 === 3) {
+          this.controla3313 = true
+        }
+        if(answer.a341 === 3) {
+          this.controla3413 = true
+        }
+        if(answer.b311 === 3) {
+          this.controlb3113 = true
+        }
+        if(answer.b321 === 3) {
+          this.controlb3213 = true
+        }
+        if(answer.b331 === 3) {
+          this.controlb3313 = true
+        }
+        if(answer.b341 === 3) {
+          this.controlb3413 = true
+        }
+        if(answer.c311 === 3) {
+          this.controlc3113 = true
+        }
+        if(answer.c321 === 3) {
+          this.controlc3213 = true
+        }
+        if(answer.c331 === 3) {
+          this.controlc3313 = true
+        }
+        if(answer.c341 === 3) {
+          this.controlc3413 = true
+        }
+        if (answer.b3) {
+          splitArr = answer.b3.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controlb31 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controlb32 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.controlb33 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.controlb34 = true
+          }
+        }
+        if (answer.c3) {
+          splitArr = answer.c3.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controlc31 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controlc32 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.controlc33 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.controlc34 = true
+          }
+        }
+        if (answer.a2 && answer.a2 === -1) {
+          this.controla2 = true
+        }
+        if (answer.a4 && answer.a4 === 1) {
+          this.controla4 = true
+        }
+        if (answer.a6 && answer.a6 === 1) {
+          this.controla6 = true
+        }
+        if (answer.b2 && answer.b2 === -1) {
+          this.controlb2 = true
+        }
+        if (answer.b4 && answer.b4 === 1) {
+          this.controlb4 = true
+        }
+        if (answer.c2 && answer.c2 === -1) {
+          this.controlc2 = true
+        }
+        if (answer.c4) {
+          splitArr = answer.c4.split(',')
+          if (splitArr.indexOf('1') > -1) {
+            this.controlc41 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.initC4 = true
+          }
+        }
+        if (answer.a42) {
+          splitArr = answer.a42.split(',')
+          if (splitArr.indexOf('0') > -1) {
+            this.controla420 = true
+          }
+          if (splitArr.indexOf('1') > -1) {
+            this.controla421 = true
+          }
+          if (splitArr.indexOf('2') > -1) {
+            this.controla422 = true
+          }
+          if (splitArr.indexOf('3') > -1) {
+            this.controla423 = true
+          }
+          if (splitArr.indexOf('4') > -1) {
+            this.controla424 = true
+          }
+          if (splitArr.indexOf('5') > -1) {
+            this.controla425 = true
+          }
+          if (splitArr.indexOf('6') > -1) {
+            this.controla426 = true
+          }
+          if (splitArr.indexOf('7') > -1) {
+            this.controla427 = true
+          }
+          if (splitArr.indexOf('8') > -1) {
+            this.controla428 = true
+          }
+          if (splitArr.indexOf('9') > -1) {
+            this.controla429 = true
+          }
+          if (splitArr.indexOf('10') > -1) {
+            this.controla4210 = true
+          }
+          if (splitArr.indexOf('11') > -1) {
+            this.controla4211 = true
+          }
+          if (splitArr.indexOf('12') > -1) {
+            this.controla4212 = true
+          }
+        }
+        if (data[1]) {
+          _.each(alList, function(v, i) {
+            if (data[1][v]) {
+              that.optionDataSource[i] = _.map(data[1][v], function(v, i) {
+                return {
+                  keyW: i,
+                  microbeName: v.microbeName,
+                  antibiotic: v.antibiotic,
+                  antibioticResult: v.antibioticResult,
+                  allergyValue: v.allergyValue
+                };
+              })
+            }
+          })
+          var other = _.filter(data[1], function(v, k) { return alList.indexOf(k) === -1 })
+          if (other && other.length) {
+            that.optionDataSource[7] = _.map(other[0], function(v, i) {
+              return {
+                keyW: i,
+                microbeName: v.microbeName,
+                antibiotic: v.antibiotic,
+                antibioticResult: v.antibioticResult,
+                allergyValue: v.allergyValue
+              };
+            })
+            that.otherName1 = other[0][0].microbeName
+          }
+        }
+        if (answer.b42) {
+          splitArr = answer.b42.split(',')
+          if (splitArr.indexOf('2') > -1) {
+            this.controlb422 = true
+          }
+        }
+        if (data[2]) {
+          _.each(alList, function(v, i) {
+            if (data[2][v]) {
+              that.optionDataSource2[i] = _.map(data[2][v], function(v, i) {
+                return {
+                  keyW: i,
+                  microbeName: v.microbeName,
+                  antibiotic: v.antibiotic,
+                  antibioticResult: v.antibioticResult,
+                  allergyValue: v.allergyValue
+                };
+              })
+            }
+          })
+          var other = _.filter(data[2], function(v, k) { return alList.indexOf(k) === -1 })
+          if (other && other.length) {
+            that.optionDataSource2[7] = _.map(other[0], function(v, i) {
+              return {
+                keyW: i,
+                microbeName: v.microbeName,
+                antibiotic: v.antibiotic,
+                antibioticResult: v.antibioticResult,
+                allergyValue: v.allergyValue
+              };
+            })
+            that.otherName2 = other[0][0].microbeName
+          }
+        }
+        if (answer.c41) {
+          splitArr = answer.c41.split(',')
+          if (splitArr.indexOf('5') > -1) {
+            this.controlc415 = true
+          }
+        }
+      }
+      return answer
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    showList(e, name, controlNode, isSimple) {
+      if (e.target.checked) {
+        this[controlNode] = true
+        if (name == "其他") return
+        this.getMedicineAllergyList(name, e.target.value, isSimple)
+      } else {
+        this[controlNode] = false
+        if (isSimple) {
+          this.$set(this.optionDataSource, e.target.value, [])
+        } else {
+          this.$set(this.optionDataSource2, e.target.value, [])
+        }
+
+      }
+    },
+    getMedicineAllergyList(value, index, isSimple) {
+      const that = this
+      const params = new URLSearchParams()
+      params.append('microbeName', value)
+      getMedicineAllergyList(params).then(res => {
+        const optionDataSource = _.map(res.data, function(v, i) {
+          return {
+            keyW: i,
+            microbeName: v.microbeName,
+            antibiotic: v.antibiotic,
+            antibioticResult: v.antibioticResult,
+            allergyValue: v.allergyValue
+          };
+        })
+        if (isSimple) {
+          that.$set(that.optionDataSource, index, optionDataSource)
+        } else {
+          that.$set(that.optionDataSource2, index, optionDataSource)
+        }
+      })
+    },
+    otherChange(e, index, isSimple) {
+      this.getMedicineAllergyList(e.target.value, index, isSimple)
+    },
+    changeType1(v) {
+      this.type1 = v
+    },
+    changePic1(e, index) {
+      this.picList1[index] = e
+    },
+    withdraw(){
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.bywsw.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    handleNone(e, d, v, arr, extra) {
+      if(e.target.checked){
+        let data = {}
+        data[d] = [v]
+        if(d === 'a') {
+          this.control1 = false
+          this.control2 = false
+          this.control3 = false
+          this.control5 = false
+          this[extra] = true
+        }
+        this.$nextTick(() => {
+          this.form.setFieldsValue(data)
+          arr.forEach((t) => {
+            this[t] = false
+          })
+        })
+      } else {
+        if(d === 'a') {
+          this.control4 = false
+        }
+        if(d === 'c4') {
+          this.initC4 = false
+        }
+      }
+    },
+    detect(d, v) {
+      if(Array.isArray(this.form.getFieldValue(d)) && this.form.getFieldValue(d).indexOf(v) > -1) {
+        return true
+      } else {
+        return false
+      }
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+@media screen and (max-width: 1366px) {
+  .control-m-line.ant-checkbox-group {
+    top: 10px;
+    position: relative;
+  }
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/task/components/mask-21.vue b/src/views/task/components/mask-21.vue
new file mode 100644
index 0000000000..8eaacd45ce
--- /dev/null
+++ b/src/views/task/components/mask-21.vue
@@ -0,0 +1,1169 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!</p>
+              <div class="title">1.病因学相关检查</div>
+              <a-form-item label="有无新增病因学相关检查:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a', {...require2, initialValue: initValue('a')}]" @change="changeRadio($event, 'controla')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controla">
+                <a-form-item class="border-dotted" label="(1) 胃食管反流病量表评分:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-popover>
+                    <template slot="content">评分标准:Gerd-Q计分>=8分,提示胃食管反流</template>
+                    <a-icon type="exclamation-circle" style="position: relative;left: -20px;color: #0399ec;cursor: pointer;" />
+                  </a-popover>
+                  <a-input style="width: 240px;" v-decorator="['z', {...inputRequired, initialValue: initValue('z')}]" autocomplete="off" :readOnly="true"></a-input>
+                </a-form-item>
+                <div class="font-w">回忆过去7天当中下列症状发生的频率:</div>
+                <a-form-item label="您胸骨后出现灼烧感(烧心)的频率?:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['z1', {...selectRequired, initialValue: initValue('z1')}]" @change="computeGerd">
+                    <a-radio value="1">0天/周</a-radio>
+                    <a-radio value="2">1天/周</a-radio>
+                    <a-radio value="3">2-3天/周</a-radio>
+                    <a-radio value="4">4-7天/周</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="感觉到有胃内容物(液体或食物)上返到您的喉咙或口腔(反流)的频率?:" :labelCol="wrapper18">
+                  <a-radio-group v-decorator="['z2', {...selectRequired, initialValue: initValue('z2')}]" @change="computeGerd">
+                    <a-radio value="1">0天/周</a-radio>
+                    <a-radio value="2">1天/周</a-radio>
+                    <a-radio value="3">2-3天/周</a-radio>
+                    <a-radio value="4">4-7天/周</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="您感到上腹部中央疼痛的频率?:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['z3', {...selectRequired, initialValue: initValue('z3')}]" @change="computeGerd">
+                    <a-radio value="1">0天/周</a-radio>
+                    <a-radio value="2">1天/周</a-radio>
+                    <a-radio value="3">2-3天/周</a-radio>
+                    <a-radio value="4">4-7天/周</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="您感到恶心的频率?:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['z4', {...selectRequired, initialValue: initValue('z4')}]" @change="computeGerd">
+                    <a-radio value="1">0天/周</a-radio>
+                    <a-radio value="2">1天/周</a-radio>
+                    <a-radio value="3">2-3天/周</a-radio>
+                    <a-radio value="4">4-7天/周</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="由于您的烧心和/或反流而难以获得良好夜间睡眠的频率?:" :labelCol="wrapper18" class="border-dotted">
+                  <a-radio-group v-decorator="['z5', {...selectRequired, initialValue: initValue('z5')}]" @change="computeGerd">
+                    <a-radio value="1">0天/周</a-radio>
+                    <a-radio value="2">1天/周</a-radio>
+                    <a-radio value="3">2-3天/周</a-radio>
+                    <a-radio value="4">4-7天/周</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="除以上告知服用的药物外,您额外服用药物来缓解烧心和/或反流的频率?(如碳酸钙、氢氧化铝等抗酸剂):" :labelCol="wrapper18">
+                  <a-radio-group v-decorator="['z6', {...selectRequired, initialValue: initValue('z6')}]" @change="computeGerd">
+                    <a-radio value="1">0天/周</a-radio>
+                    <a-radio value="2">1天/周</a-radio>
+                    <a-radio value="3">2-3天/周</a-radio>
+                    <a-radio value="4">4-7天/周</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="(2) ABPA相关检查:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a1', {...selectRequired, initialValue: initValue('a1')}]" @change="changeRadio($event, 'controla1')">
+                    <a-radio value="1">是</a-radio>
+                    <a-radio value="-1">否</a-radio>
+                    <a-radio value="-2">未做</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controla1">
+                  <!-- <a-form-item label="ABPA检查时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-date-picker placeholder="请选择" v-decorator="['b1', {...dateRequire, initialValue: initValue('b1', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                  </a-form-item> -->
+                  <a-form-item label="外周血嗜酸细胞(绝对值):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-input addonAfter="*10^9/L" style="width: 240px; margin-right: 20px;" v-decorator="['a11', { initialValue: initValue('a11')}]" autocomplete="off"></a-input>
+                    </a-form-item>
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-radio-group v-decorator="['a12', {...selectRequired, initialValue: initValue('a12')}]">
+                        <a-radio value="1">升高</a-radio>
+                        <a-radio value="2">正常</a-radio>
+                        <a-radio value="3">未测量</a-radio>
+                      </a-radio-group>
+                    </a-form-item>
+                  </a-form-item>
+                  <a-form-item label="血总IgE:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-input addonAfter="IU/mL" style="width: 240px; margin-right: 20px;" v-decorator="['a13', {initialValue: initValue('a13')}]" autocomplete="off"></a-input>
+                    </a-form-item>
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-radio-group v-decorator="['a14', {...selectRequired, initialValue: initValue('a14')}]">
+                        <a-radio value="1">升高</a-radio>
+                        <a-radio value="2">正常</a-radio>
+                        <a-radio value="3">未测量</a-radio>
+                      </a-radio-group>
+                    </a-form-item>
+                  </a-form-item>
+                  <a-form-item label="曲霉特异IgE:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-input addonAfter="IU/L" style="width: 240px; margin-right: 20px;" v-decorator="['a15', {initialValue: initValue('a15')}]" autocomplete="off"></a-input>
+                    </a-form-item>
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-radio-group v-decorator="['a16', {...selectRequired, initialValue: initValue('a16')}]">
+                        <a-radio value="1">升高</a-radio>
+                        <a-radio value="2">正常</a-radio>
+                        <a-radio value="3">未测量</a-radio>
+                      </a-radio-group>
+                    </a-form-item>
+                  </a-form-item>
+                  <a-form-item label="曲霉皮肤点刺试验:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['a17', {...selectRequired, initialValue: initValue('a17')}]">
+                      <a-radio value="1">阴性</a-radio>
+                      <a-radio value="2">阳性</a-radio>
+                      <a-radio value="3">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item label="胸部CT有无中心性支扩:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['a18', {...selectRequired, initialValue: initValue('a18')}]">
+                      <a-radio value="1">升高</a-radio>
+                      <a-radio value="2">正常</a-radio>
+                      <a-radio value="3">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item label="胸部CT提示高密度黏液栓嵌顿:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['a19', {...selectRequired, initialValue: initValue('a19')}]">
+                      <a-radio value="1">有</a-radio>
+                      <a-radio value="2">无</a-radio>
+                      <a-radio value="3">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                </div>
+                <a-form-item label="(3) 自身免疫抗体检查:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a2', {...selectRequired, initialValue: initValue('a2')}]" @change="changeRadio($event, 'controla2')">
+                    <a-radio value="1">已做</a-radio>
+                    <a-radio value="-1">未做</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controla2">
+                  <!-- <a-form-item label="自身免疫抗体检查时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-date-picker placeholder="请选择" v-decorator="['b2', {...dateRequire, initialValue: initValue('b2', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                  </a-form-item> -->
+                  <a-form-item label="ANA:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['a22', {...selectRequired, initialValue: initValue('a22')}]">
+                      <a-radio value="1">阳性</a-radio>
+                      <!-- <a-radio value="2">中间</a-radio> -->
+                      <a-radio value="2">阴性</a-radio>
+                      <a-radio value="3">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item label="ENA:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['a23', {...selectRequired, initialValue: initValue('a23')}]">
+                      <a-radio value="1">阳性</a-radio>
+                      <a-radio value="2">阴性</a-radio>
+                      <a-radio value="3">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item label="ANCA:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['a25', {...selectRequired, initialValue: initValue('a25')}]">
+                      <a-radio value="1">阳性</a-radio>
+                      <a-radio value="2">阴性</a-radio>
+                      <a-radio value="3">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item label="其他检查(记录阳性结果):" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-input style="width: 240px;" v-decorator="['a27', {...inputRequired, initialValue: initValue('a27')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                </div>
+                <a-form-item label="(4) 球蛋白缺乏:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a3', {...selectRequired, initialValue: initValue('a3')}]" @change="changeRadio($event, 'controla3')">
+                    <a-radio value="1">已做</a-radio>
+                    <a-radio value="-1">未做</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controla3">
+                  <!-- <a-form-item label="球蛋白缺乏检查时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-date-picker placeholder="请选择" v-decorator="['b3', {...dateRequire, initialValue: initValue('b3', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                  </a-form-item> -->
+                  <a-form-item label="IgM:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-input style="width: 240px; margin-right: 20px;" v-decorator="['a31', {...inputRequired, initialValue: initValue('a31')}]" autocomplete="off" addonAfter="g/L"></a-input>
+                    </a-form-item>
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-radio-group v-decorator="['a32', {...selectRequired, initialValue: initValue('a32')}]">
+                        <a-radio value="1">正常</a-radio>
+                        <a-radio value="2">降低</a-radio>
+                        <a-radio value="3">升高</a-radio>
+                        <a-radio value="4">未测量</a-radio>
+                      </a-radio-group>
+                    </a-form-item>
+                  </a-form-item>
+                  <a-form-item label="IgG:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-input style="width: 240px; margin-right: 20px;" v-decorator="['a33', {...inputRequired, initialValue: initValue('a33')}]" autocomplete="off" addonAfter="g/L"></a-input>
+                    </a-form-item>
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-radio-group v-decorator="['a34', {...selectRequired, initialValue: initValue('a34')}]">
+                        <a-radio value="1">正常</a-radio>
+                        <a-radio value="2">降低</a-radio>
+                        <a-radio value="3">升高</a-radio>
+                        <a-radio value="4">未测量</a-radio>
+                      </a-radio-group>
+                    </a-form-item>
+                  </a-form-item>
+                  <a-form-item label="IgA:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-input style="width: 240px; margin-right: 20px;" v-decorator="['a35', {...inputRequired, initialValue: initValue('a35')}]" autocomplete="off" addonAfter="g/L"></a-input>
+                    </a-form-item>
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-radio-group v-decorator="['a36', {...selectRequired, initialValue: initValue('a36')}]">
+                        <a-radio value="1">正常</a-radio>
+                        <a-radio value="2">降低</a-radio>
+                        <a-radio value="3">升高</a-radio>
+                        <a-radio value="4">未测量</a-radio>
+                      </a-radio-group>
+                    </a-form-item>
+                  </a-form-item>
+                </div>
+                <a-form-item label="(5) 补体缺乏:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a4', {...selectRequired, initialValue: initValue('a4')}]" @change="changeRadio($event, 'controla4')">
+                    <a-radio value="1">已做</a-radio>
+                    <a-radio value="-1">未做</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controla4">
+                  <!-- <a-form-item label="补体缺乏检查时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-date-picker placeholder="请选择" v-decorator="['b4', {...dateRequire, initialValue: initValue('b4', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                  </a-form-item> -->
+                  <a-form-item label="C3:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-input style="width: 240px; margin-right: 20px;" v-decorator="['a41', {...inputRequired, initialValue: initValue('a41')}]" autocomplete="off" addonAfter="g/L"></a-input>
+                    </a-form-item>
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-radio-group v-decorator="['a42', {...selectRequired, initialValue: initValue('a42')}]">
+                        <a-radio value="1">正常</a-radio>
+                        <a-radio value="2">降低</a-radio>
+                        <a-radio value="3">升高</a-radio>
+                        <a-radio value="4">未测量</a-radio>
+                      </a-radio-group>
+                    </a-form-item>
+                  </a-form-item>
+                  <a-form-item label="C4:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-input style="width: 240px; margin-right: 20px;" v-decorator="['a43', {...inputRequired, initialValue: initValue('a43')}]" autocomplete="off" addonAfter="g/L"></a-input>
+                    </a-form-item>
+                    <a-form-item :style="{ display: 'inline-block'}">
+                      <a-radio-group v-decorator="['a44', {...selectRequired, initialValue: initValue('a44')}]">
+                        <a-radio value="1">正常</a-radio>
+                        <a-radio value="2">降低</a-radio>
+                        <a-radio value="3">升高</a-radio>
+                        <a-radio value="4">未测量</a-radio>
+                      </a-radio-group>
+                    </a-form-item>
+                  </a-form-item>
+                </div>
+                <a-form-item label="(6) α-1 抗蛋白酶缺乏:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a5', {...selectRequired, initialValue: initValue('a5')}]" @change="changeRadio($event, 'controla5')">
+                    <a-radio value="1">已做</a-radio>
+                    <a-radio value="-1">未做</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controla5">
+                  <!-- <a-form-item label=" α-1抗蛋白酶缺乏检查时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-date-picker placeholder="请选择" v-decorator="['b5', {...dateRequire, initialValue: initValue('b5', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                  </a-form-item> -->
+                  <a-form-item label="基因:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['a52', { ...selectRequired, initialValue: initValue('a52')}]" @change="changeRadio($event, 'controla52')">
+                      <a-radio value="1">阳性</a-radio>
+                      <a-radio value="2">阴性</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                  <!-- <a-form-item class="no-border" label="具体描述::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controla52">
+                    <a-input style="width: 240px;" v-decorator="['a53', {...inputRequired, initialValue: initValue('a53')}]" autocomplete="off"></a-input>
+                  </a-form-item> -->
+                </div>
+                <a-form-item label="(7) 囊性纤维化:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a6', {...selectRequired, initialValue: initValue('a6')}]" @change="changeRadio($event, 'controla6')">
+                    <a-radio value="1">已做</a-radio>
+                    <a-radio value="-1">未做</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controla6">
+                  <!-- <a-form-item label="囊性纤维化检查时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-date-picker placeholder="请选择" v-decorator="['b6', {...dateRequire, initialValue: initValue('b6', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                  </a-form-item> -->
+                  <a-form-item label="汗液实验:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['a61', { ...selectRequired, initialValue: initValue('a61')}]">
+                      <a-radio value="1">阳性</a-radio>
+                      <a-radio value="2">阴性</a-radio>
+                      <!-- <a-radio value="3">未测</a-radio> -->
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item label="基因检查:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['a62', { ...selectRequired, initialValue: initValue('a62')}]">
+                      <a-radio value="1">纯合</a-radio>
+                      <a-radio value="2">杂合</a-radio>
+                      <a-radio value="3">无突变</a-radio>
+                      <!-- <a-radio value="4">未测</a-radio> -->
+                    </a-radio-group>
+                  </a-form-item>
+                </div>
+                <a-form-item label="(8) 纤毛功能检测:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a7', {...selectRequired, initialValue: initValue('a7')}]" @change="changeRadio($event, 'controla7')">
+                    <a-radio value="1">已做</a-radio>
+                    <a-radio value="-1">未做</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <div v-if="controla7">
+                  <!-- <a-form-item label="纤毛功能检测时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-date-picker placeholder="请选择" v-decorator="['b7', {...dateRequire, initialValue: initValue('b7', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                  </a-form-item> -->
+                  <a-form-item label="FeNOppd:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['a71', { ...selectRequired, initialValue: initValue('a71')}]">
+                      <a-radio value="1">阳性</a-radio>
+                      <a-radio value="2">阴性</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item label="电镜检测的活检:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['a73', { ...selectRequired, initialValue: initValue('a73')}]">
+                      <a-radio value="1">阳性</a-radio>
+                      <a-radio value="2">阴性</a-radio>
+                      <a-radio value="3">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item label="分析纤毛摆动频率的活检:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['a74', { ...selectRequired, initialValue: initValue('a74')}]">
+                      <a-radio value="1">阳性</a-radio>
+                      <a-radio value="2">阴性</a-radio>
+                      <a-radio value="3">未测量</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item label="基因检测:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                    <a-radio-group v-decorator="['a75', { ...selectRequired, initialValue: initValue('a75')}]" @change="changeRadio($event, 'controla75')">
+                      <a-radio value="1">阳性</a-radio>
+                      <a-radio value="2">阴性</a-radio>
+                      <!-- <a-radio value="3">未测量</a-radio> -->
+                    </a-radio-group>
+                  </a-form-item>
+                  <a-form-item label="具体描述::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" v-if="controla75">
+                    <a-input style="width: 240px;" v-decorator="['a76', {...inputRequired, initialValue: initValue('a76')}]" autocomplete="off"></a-input>
+                  </a-form-item>
+                </div>
+                <a-form-item label="(9) 其他:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['a8', {initialValue: initValue('a8')}]" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item class="font-w" label="(10) 小结:根据实验室检查及既往病史判断(多选):" :labelCol="{md: 20}" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['a9', {...selectRequired, initialValue: initValue('a9', 'array')}]" @change="changeRadio($event, 'controla920')" style="line-height: 22px;">
+                    <a-radio value="1">特发性</a-radio>
+                    <a-radio value="2">感染后性</a-radio>
+                    <a-radio value="3">结核后性</a-radio>
+                    <a-radio value="4">原发性纤毛不动症</a-radio>
+                    <a-radio value="5">弥漫性泛细支气管炎</a-radio>
+                    <a-radio value="6">ABPA</a-radio>
+                    <a-radio value="7">炎症性肠病</a-radio>
+                    <a-radio value="8">结缔组织病(类风湿性关节炎)</a-radio>
+                    <a-radio value="21">结缔组织病(非类风湿性关节炎)</a-radio>
+                    <a-radio value="9">CF</a-radio>
+                    <a-radio value="10">α1-抗胰蛋白酶缺乏</a-radio>
+                    <a-radio value="11">误吸</a-radio>
+                    <a-radio value="12">胃食管返流病</a-radio>
+                    <a-radio value="13">大气道先天性异常</a-radio>
+                    <a-radio value="14">NTM</a-radio>
+                    <a-radio value="15">慢阻肺</a-radio>
+                    <a-radio value="16">哮喘</a-radio>
+                    <a-radio value="17">普通变异性免疫缺陷病(CVID)</a-radio>
+                    <a-radio value="18">血浆抗体缺乏</a-radio>
+                    <a-radio value="19">特异抗体缺乏性</a-radio>
+                    <a-radio value="20">其他</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="具体描述::" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" class="border-dotted" v-if="controla920">
+                  <a-input style="width: 240px;" v-decorator="['a91', {...inputRequiredNotEmpty, initialValue: initValue('a91')}]" autocomplete="off"></a-input>
+                </a-form-item>
+              </div>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, computeScore, recoverSubmit } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'task21',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      markName: 'byxxgjc',
+      title: '',
+      openKeys: [],
+      defaultSelectedKeys: [21],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      baselineFormStyle: {
+        // height: '444px',
+        'padding-top': '52px'
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+        md: { span: 6 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+        md: { span: 18 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 6, offset: 6 }
+      },
+      wrapperOffset: {
+        md: { span: 12 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      inputRequiredNotEmpty: {
+        rules: [{ required: true, message: '请填写!', whitespace: true }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      byxxgjc: undefined,
+      controla: false,
+      controla1: false,
+      controla2: false,
+      //   controla23: false,
+      //   controla25: false,
+      controla3: false,
+      controla4: false,
+      controla5: false,
+      controla6: false,
+      controla7: false,
+      controla52: false,
+      controla9: false,
+      controla920: false,
+      controla75: false,
+      spinning: false,
+      executeStatus: false,
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.title = '年访视'
+        that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    getFormData() {
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          if (res.data && res.data.byxxgjc)
+            that.byxxgjc = that.dealAnswers(res.data.byxxgjc)
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    },
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      if (t === 'controla920') {
+        if (e.target.value === '20') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (t === 'controla52' || t === 'controla75') {
+        if (e.target.value === '3') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      this.maskId = e.key
+      if ((e.key >= 37 && e.key <= 42) || (e.key >= 45 && e.key <= 50)) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + this.maskId)
+      } else {
+        this.$router.replace('/list/task/' + this.patientBasisId + '/' + this.maskId)
+      }
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          var that = this
+          re = {
+            ...re,
+            'b1': typeof re['b1'] !== 'undefined' ? re['b1'].format('YYYY-MM-DD') : '',
+            'b2': typeof re['b2'] !== 'undefined' ? re['b2'].format('YYYY-MM-DD') : '',
+            'b3': typeof re['b3'] !== 'undefined' ? re['b3'].format('YYYY-MM-DD') : '',
+            'b4': typeof re['b4'] !== 'undefined' ? re['b4'].format('YYYY-MM-DD') : '',
+            'b5': typeof re['b5'] !== 'undefined' ? re['b5'].format('YYYY-MM-DD') : '',
+            'b6': typeof re['b6'] !== 'undefined' ? re['b6'].format('YYYY-MM-DD') : '',
+            'b7': typeof re['b7'] !== 'undefined' ? re['b7'].format('YYYY-MM-DD') : ''
+          }
+          console.log(re)
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.byxxgjc && this.byxxgjc.byxxgjcId) {
+            re.byxxgjcId = this.byxxgjc.byxxgjcId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.$message.success(res.msg)
+              that.spinning = false
+              that.getFormData()
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.byxxgjc) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.byxxgjc[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.byxxgjc[key])
+      } else if (type === 'array') {
+        return this.byxxgjc[key].split(',')
+      } else {
+        return this.byxxgjc[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        if (answer.a == 1) {
+          this.controla = true
+        }
+        if (answer.a1 === 1) {
+          this.controla1 = true
+        }
+        if (answer.a2 === 1) {
+          this.controla2 = true
+        }
+        if (answer.a3 === 1) {
+          this.controla3 = true
+        }
+        if (answer.a4 === 1) {
+          this.controla4 = true
+        }
+        if (answer.a5 === 1) {
+          this.controla5 = true
+        }
+        if (answer.a6 === 1) {
+          this.controla6 = true
+        }
+        if (answer.a7 === 1) {
+          this.controla7 = true
+        }
+        if (answer.a9 === 20) {
+          this.controla920 = true
+        }
+        if (answer.a52 === 3) {
+          this.controla52 = true
+        }
+        if (answer.a75 === 3) {
+          this.controla75 = true
+        }
+      }
+      return answer
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      var that = this
+      re = {
+        ...re,
+        'b1': typeof re['b1'] !== 'undefined' ? re['b1'].format('YYYY-MM-DD') : '',
+        'b2': typeof re['b2'] !== 'undefined' ? re['b2'].format('YYYY-MM-DD') : '',
+        'b3': typeof re['b3'] !== 'undefined' ? re['b3'].format('YYYY-MM-DD') : '',
+        'b4': typeof re['b4'] !== 'undefined' ? re['b4'].format('YYYY-MM-DD') : '',
+        'b5': typeof re['b5'] !== 'undefined' ? re['b5'].format('YYYY-MM-DD') : '',
+        'b6': typeof re['b6'] !== 'undefined' ? re['b6'].format('YYYY-MM-DD') : '',
+        'b7': typeof re['b7'] !== 'undefined' ? re['b7'].format('YYYY-MM-DD') : ''
+      }
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.byxxgjc && this.byxxgjc.byxxgjcId) {
+        re.byxxgjcId = this.byxxgjc.byxxgjcId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.$message.success(res.msg)
+          that.spinning = false
+          that.getFormData()
+          params = new URLSearchParams()
+          params.append('patientBasisId', that.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+            .catch(error => {
+              console.log(error)
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    computeGerd() {
+      var that = this
+      this.$nextTick(() => {
+        var params = new URLSearchParams()
+        params.append('scoreType', 'gerd')
+        params.append('byxxgjcStr', JSON.stringify(that.form.getFieldsValue()))
+        computeScore(params)
+          .then(res => {
+            console.log(res.data.z)
+            that.form.setFieldsValue({
+              z: res.data.z
+            })
+          })
+          .catch(error => {
+            console.log(error)
+          })
+      })
+    },
+    withdraw() {
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.byxxgjc.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+/deep/ .font-w .ant-form-item-required {
+  font-weight: bold;
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+
+      .treeSubTitle {
+        font-size: 14px;
+      }
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px 50px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/task/components/mask-22.vue b/src/views/task/components/mask-22.vue
new file mode 100644
index 0000000000..1bf80031e0
--- /dev/null
+++ b/src/views/task/components/mask-22.vue
@@ -0,0 +1,1443 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!</p>
+              <div class="title">1.肺功能相关检查</div>
+              <!-- <a-form-item label="检查时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-date-picker placeholder="请选择" v-decorator="['t1', {...dateRequire, initialValue: initValue('t1', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+              </a-form-item> -->
+              <a-form-item label="报告上传 :" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <div class="clearfix" style="margin-top: 10px;">
+                  <a-upload :action="uploadUrl" listType="picture-card" :fileList="fileList1" @preview="handlePreview1" @change="handleChange1">
+                    <div v-if="fileList1.length < 1">
+                      <a-icon type="plus" />
+                      <div class="ant-upload-text">Upload</div>
+                    </div>
+                  </a-upload>
+                  <a-button style="position: absolute;top: 84px;left: 120px;font-size: 12px;padding: 0 5px;height: 30px;" @click="_importF" v-if="fileList1.length === 1">OCR识别</a-button>
+                  <!-- <a-modal :visible="previewVisible1" :footer="null" @cancel="handleCancel1">
+                    <img alt="example" style="width: 100%" :src="previewImage1" />
+                  </a-modal> -->
+                </div>
+              </a-form-item>
+              <a-form-item label="肺功能测试名称" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-row type="flex">
+                  <a-col :span="12">实际值</a-col>
+                  <a-col :span="12">实/预%</a-col>
+                </a-row>
+              </a-form-item>
+              <a-form-item label="FVC::" :labelCol="labelXs" :wrapperCol="wrapperMx" class="requireIcon">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a21', {...inputRequired, initialValue: initValue('a21')}]" addonAfter="L" autocomplete="off" @change="notice($event, 'FVC', 0.5, 6)"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a22', {...inputRequired, initialValue: initValue('a22')}]" addonAfter="%" autocomplete="off" @change="notice($event, 'FVC%', 20, 150)"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="FEV1::" :labelCol="labelXs" :wrapperCol="wrapperMx" class="requireIcon">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a31', {...inputRequired, initialValue: initValue('a31')}]" addonAfter="L" autocomplete="off" @change="notice($event, 'FEV1', 0.2, 5)"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a32', {...inputRequired, initialValue: initValue('a32')}]" addonAfter="%" autocomplete="off" @change="notice($event, 'FEV%', 20, 150)"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="FEV1%FVC::" :labelCol="labelXs" :wrapperCol="wrapperMx" class="requireIcon">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a41', {...inputRequired, initialValue: initValue('a41')}]" addonAfter="%" autocomplete="off" @change="notice($event, 'FEV1%FVC', undefined, 100)"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="FEV1%VC MAX::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a51', {initialValue: initValue('a51')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a52', {initialValue: initValue('a52')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="FEV3::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a61', {initialValue: initValue('a61')}]" addonAfter="L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['a62', {initialValue: initValue('a62')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="FEV3%FVC::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b21', {initialValue: initValue('b21')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b22', {initialValue: initValue('b22')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="PEF::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b31', {initialValue: initValue('b31')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b32', {initialValue: initValue('b32')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="MEF 75::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b41', {initialValue: initValue('b41')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b42', {initialValue: initValue('b42')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="MEF 50::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b51', {initialValue: initValue('b51')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b52', {initialValue: initValue('b52')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="MEF 25::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b61', {initialValue: initValue('b61')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b62', {initialValue: initValue('b62')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="MMEF::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b71', {initialValue: initValue('b71')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b72', {initialValue: initValue('b72')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="MVV::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <!-- <a-input v-decorator="['t1', {initialValue: '1'}]" style="display: none;"></a-input> -->
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b81', {initialValue: initValue('b81')}]" addonAfter="L/min" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b82', {initialValue: initValue('b82')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="FEV 1*30::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b91', {initialValue: initValue('b91')}]" addonAfter="L/min" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b92', {initialValue: initValue('b92')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="RV::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <!-- <a-input v-decorator="['t1', {initialValue: '1'}]" style="display: none;"></a-input> -->
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b101', {initialValue: initValue('b101')}]" addonAfter="L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b102', {initialValue: initValue('b102')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="TLC::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <!-- <a-input v-decorator="['t1', {initialValue: '1'}]" style="display: none;"></a-input> -->
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b111', {initialValue: initValue('b111')}]" addonAfter="L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b112', {initialValue: initValue('b112')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="RV%TLC::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <!-- <a-input v-decorator="['t1', {initialValue: '1'}]" style="display: none;"></a-input> -->
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b121', {initialValue: initValue('b121')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b122', {initialValue: initValue('b122')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="ITGV::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b131', {initialValue: initValue('b131')}]" addonAfter="L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b132', {initialValue: initValue('b132')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="IC::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b141', {initialValue: initValue('b141')}]" addonAfter="L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b142', {initialValue: initValue('b142')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="ERV::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b151', {initialValue: initValue('b151')}]" addonAfter="L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b152', {initialValue: initValue('b152')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="DLCO SB::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b161', {initialValue: initValue('b161')}]" addonAfter="ml/min/mmHg" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b162', {initialValue: initValue('b162')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="DLCO/VA::" :labelCol="labelXs" :wrapperCol="wrapperMx">
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b171', {initialValue: initValue('b171')}]" addonAfter="ml/min/mmHg" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item :labelCol="labelXs" :wrapperCol="wrapperMx" :style="{ display: 'inline-block', width: '50%',border: 'none' }">
+                  <a-input style="width: 240px;" v-decorator="['b172', {initialValue: initValue('b172')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+              </a-form-item>
+              <a-form-item label="(2) 是否做过其他舒张试验:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['c', {...require1, initialValue: initValue('c')}]" @change="changeRadio($event, 'controlc')">
+                  <a-radio value="1">是</a-radio>
+                  <a-radio value="-1">否</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controlc">
+                <a-form-item label="报告上传 :" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <div class="clearfix" style="margin-top: 10px;">
+                    <a-upload :action="uploadUrl" listType="picture-card" :fileList="fileList2" @preview="handlePreview2" @change="handleChange2">
+                      <div v-if="fileList2.length < 1">
+                        <a-icon type="plus" />
+                        <div class="ant-upload-text">Upload</div>
+                      </div>
+                    </a-upload>
+                    <a-button style="position: absolute;top: 84px;left: 120px;font-size: 12px;padding: 0 5px;height: 30px;" @click="_importS" v-if="fileList2.length === 1">OCR识别</a-button>
+                    <!-- <a-modal :visible="previewVisible2" :footer="null" @cancel="handleCancel2">
+                      <img alt="example" style="width: 100%" :src="previewImage2" />
+                    </a-modal> -->
+                  </div>
+                </a-form-item>
+                <a-form-item label="舒张试验名称" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-row type="flex">
+                    <a-col :span="6">前次</a-col>
+                    <a-col :span="6">前/预</a-col>
+                    <a-col :span="6">后次</a-col>
+                    <a-col :span="6">后/预</a-col>
+                  </a-row>
+                </a-form-item>
+                <a-form-item label="VC MAX::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c11', { initialValue: initValue('c11')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d11', { initialValue: initValue('d11')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c12', { initialValue: initValue('c12')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d12', { initialValue: initValue('d12')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="FVC::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c21', { initialValue: initValue('c21')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d21', { initialValue: initValue('d21')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c22', { initialValue: initValue('c22')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d22', { initialValue: initValue('d22')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="FEV1::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c31', { initialValue: initValue('c31')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d31', { initialValue: initValue('d31')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c32', { initialValue: initValue('c32')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d32', { initialValue: initValue('d32')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="FEV1%FVC::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c41', { initialValue: initValue('c41')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d41', { initialValue: initValue('d41')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c42', { initialValue: initValue('c42')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d42', { initialValue: initValue('d42')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="FEV1%VC MAX::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c51', { initialValue: initValue('c51')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d51', { initialValue: initValue('d51')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c52', { initialValue: initValue('c52')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d52', { initialValue: initValue('d52')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="FEV3::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c61', { initialValue: initValue('c61')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d61', { initialValue: initValue('d61')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c62', { initialValue: initValue('c62')}]" addonAfter="L" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d62', { initialValue: initValue('d62')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="FEV3%FVC::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c71', { initialValue: initValue('c71')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d71', { initialValue: initValue('d71')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c72', { initialValue: initValue('c72')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d72', { initialValue: initValue('d72')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="PEF::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c81', { initialValue: initValue('c81')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d81', { initialValue: initValue('d81')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c82', { initialValue: initValue('c82')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d82', { initialValue: initValue('d82')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="MEF 75::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c91', { initialValue: initValue('c91')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d91', { initialValue: initValue('d91')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c92', { initialValue: initValue('c92')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d92', { initialValue: initValue('d92')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="MEF 50::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c101', { initialValue: initValue('c101')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d101', { initialValue: initValue('d101')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c102', { initialValue: initValue('c102')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d102', { initialValue: initValue('d102')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="MEF 25::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c111', { initialValue: initValue('c111')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d111', { initialValue: initValue('d111')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c112', { initialValue: initValue('c112')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d112', { initialValue: initValue('d112')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="MEF 75/25::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c121', { initialValue: initValue('c121')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d121', { initialValue: initValue('d121')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c122', { initialValue: initValue('c122')}]" addonAfter="L/s" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d122', { initialValue: initValue('d122')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="V%FVC::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c131', { initialValue: initValue('c131')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d131', { initialValue: initValue('d131')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c132', { initialValue: initValue('c132')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['d132', { initialValue: initValue('d132')}]" addonAfter="%" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+                <a-form-item label="MVV::" :labelCol="labelNew" :wrapperCol="wrapperNew">
+                  <a-form-item :labelCol="labelNew" :wrapperCol="wrapperNew" :style="{ display: 'inline-block', width: '25%', border: 'none' }">
+                    <a-input style="width: 240px;" v-decorator="['c141', { initialValue: initValue('c141')}]" addonAfter="L/min" autocomplete="off"></a-input>
+                  </a-form-item>
+                </a-form-item>
+              </div>
+              <a-form-item label="(3) 肺功能结论:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-radio-group v-decorator="['d', {...require1, initialValue: initValue('d')}]" @change="changeRadio($event, 'controld')">
+                  <a-radio value="1">通气功能正常</a-radio>
+                  <a-radio value="-1">通气功能减退</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="通气功能减退类型:" :labelCol="labelColOffset" :wrapperCol="wrapperOffset" class="border-dotted" v-if="controld">
+                <a-radio-group v-decorator="['e12', {...require1, initialValue: initValue('e12')}]">
+                  <a-radio value="1">阻塞性</a-radio>
+                  <a-radio value="2">限制性</a-radio>
+                  <a-radio value="3">混合型</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <a-form-item label="(4) 呼出气一氧化氮(FeNO):" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-input addonAfter="ppb" style="width: 240px;" v-decorator="['d1', {initialValue: initValue('d1')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(5) 6分钟步行试验总距离:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+                <a-input addonAfter="m" style="width: 240px;" v-decorator="['e', { initialValue: initValue('e')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="(6) 血气分析:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="border-dotted">
+              </a-form-item>
+              <a-form-item label="PH:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                <a-input style="width: 240px;" v-decorator="['f', { initialValue: initValue('f')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="氧分压:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                <a-input style="width: 240px;" v-decorator="['f1', { initialValue: initValue('f1')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="二氧化碳分压:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                <a-input style="width: 240px;" v-decorator="['f2', { initialValue: initValue('f2')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="肺动脉氧分压差:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                <a-input style="width: 240px;" v-decorator="['f3', { initialValue: initValue('f3')}]" autocomplete="off"></a-input>
+              </a-form-item>
+              <a-form-item label="氧饱和度:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                <a-input style="width: 240px;" v-decorator="['f4', { initialValue: initValue('f4')}]" autocomplete="off"></a-input>
+              </a-form-item>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, recoverSubmit } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { getOcrResult } from '@/api/basis'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+import _ from 'lodash'
+export default {
+  name: 'task22',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      //   previewVisible1: false,
+      //   previewImage1: '',
+      //   previewVisible2: false,
+      //   previewImage2: '',
+      uploadUrl: process.env.VUE_APP_API_UPLOAD_URL,
+      viewPicUrl: process.env.VUE_APP_API_VIEW_PIC_URL,
+      fileList1: [],
+      fileList2: [],
+      markName: 'fgnxgjc',
+      title: '年访视',
+      openKeys: [],
+      defaultSelectedKeys: [22],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: '100%',
+        "padding-right": "0px",
+        "border-right": "1px solid #ddd"
+      },
+      baselineFormStyle: {
+        // height: '444px',
+        'padding-top': '52px'
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 7 },
+        md: { span: 7 }
+      },
+      labelXs: {
+        xs: { span: 24 },
+        sm: { span: 5 },
+        md: { span: 5 }
+      },
+      wrapperMx: {
+        xs: { span: 24 },
+        sm: { span: 19 },
+        md: { span: 19 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 17 },
+        md: { span: 17 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 4, offset: 7 }
+      },
+      wrapperOffset: {
+        md: { span: 13 }
+      },
+      labelNew: {
+        xs: { span: 2 },
+        sm: { span: 2 },
+        md: { span: 2 }
+      },
+      wrapperNew: {
+        xs: { span: 22 },
+        sm: { span: 22 },
+        md: { span: 22 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      fgnxgjc: undefined,
+      //   controla1p: false,
+      //   controla1n: false,
+      controla21: false,
+      controla31: false,
+      controla41: false,
+      controla51: false,
+      controla61: false,
+      controlb23: false,
+      controlb33: false,
+      controlb43: false,
+      controlb53: false,
+      controlb63: false,
+      controlc: false,
+      controlc11: false,
+      controlc21: false,
+      controlc31: false,
+      controlc41: false,
+      controld: false,
+      spinning: false,
+      executeStatus: false,
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    this.getFormData()
+    // 创建节流版本,防止触发过快
+    this.notice = _.debounce(this.notice, 300)
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    changeRadio(e, t) {
+      if (t === 'controld') {
+        if (e.target.value === '-1') {
+          this[t] = true
+        } else {
+          this[t] = false
+        }
+      } else if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      if ((e.key >= 37 && e.key <= 42) || (e.key >= 45 && e.key <= 50)) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + e.key)
+      } else {
+        this.$router.replace('/list/task/' + this.patientBasisId + '/' + e.key)
+      }
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          re = {
+            ...re,
+            't1': typeof re['t1'] !== 'undefined' ? re['t1'].format('YYYY-MM-DD') : ''
+          }
+          var that = this
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.fgnxgjc && this.fgnxgjc.fgnxgjcId) {
+            re.fgnxgjcId = this.fgnxgjc.fgnxgjcId
+          }
+          //附件
+          if (this.fileList1 && this.fileList1.length) {
+            var a = []
+            _.each(this.fileList1, function(v) {
+              if (v.response) a.push(v.response.fileName)
+              else a.push(v.name)
+            })
+            params.append('fileName', JSON.stringify(a))
+          }
+          //附件
+          if (this.fileList2 && this.fileList2.length) {
+            var a = []
+            _.each(this.fileList2, function(v) {
+              if (v.response) a.push(v.response.fileName)
+              else a.push(v.name)
+            })
+            params.append('fileNameOther', JSON.stringify(a))
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.spinning = false
+              that.getFormData()
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.fgnxgjc) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.fgnxgjc[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.fgnxgjc[key])
+      } else if (type === 'array') {
+        return this.fgnxgjc[key].split(',')
+      } else {
+        return this.fgnxgjc[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        if (answer.a21 === 1) {
+          this.controla21 = true
+        }
+        if (answer.a31 === 1) {
+          this.controla31 = true
+        }
+        if (answer.a41 === 1) {
+          this.controla41 = true
+        }
+        if (answer.a51 === 1) {
+          this.controla51 = true
+        }
+        if (answer.a61 === 1) {
+          this.controla61 = true
+        }
+        if (answer.b23 === 1) {
+          this.controlb23 = true
+        }
+        if (answer.b33 === 1) {
+          this.controlb33 = true
+        }
+        if (answer.b43 === 1) {
+          this.controlb43 = true
+        }
+        if (answer.b53 === 1) {
+          this.controlb53 = true
+        }
+        if (answer.b63 === 1) {
+          this.controlb63 = true
+        }
+        if (answer.c === 1) {
+          this.controlc = true
+        }
+        if (answer.c11 === 1) {
+          this.controlc11 = true
+        }
+        if (answer.c21 === 1) {
+          this.controlc21 = true
+        }
+        if (answer.c31 === 1) {
+          this.controlc31 = true
+        }
+        if (answer.c41 === 1) {
+          this.controlc41 = true
+        }
+        if (answer.d === -1) {
+          this.controld = true
+        }
+      }
+      return answer
+    },
+    getFormData() {
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          if (res.data && res.data.fgnxgjc) {
+            that.fgnxgjc = that.dealAnswers(res.data.fgnxgjc)
+          } else {
+            that.fgnxgjc = {}
+            that.form.resetFields()
+          }
+          if (res.data.annexListFgn && res.data.annexListFgn.length) {
+            that.fileList1 = _.map(res.data.annexListFgn, function(v) {
+              return {
+                uid: v.annexId,
+                url: that.viewPicUrl + v.annexAddress,
+                name: v.annexAddress,
+                status: 'done'
+              }
+            })
+          } else {
+            that.fileList1 = []
+          }
+          if (res.data.annexListQH && res.data.annexListQH.length) {
+            that.fileList2 = _.map(res.data.annexListQH, function(v) {
+              return {
+                uid: v.annexId,
+                url: that.viewPicUrl + v.annexAddress,
+                name: v.annexAddress,
+                status: 'done'
+              }
+            })
+          } else {
+            that.fileList2 = []
+          }
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      re = {
+        ...re,
+        't1': typeof re['t1'] !== 'undefined' ? re['t1'].format('YYYY-MM-DD') : ''
+      }
+      var that = this
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.fgnxgjc && this.fgnxgjc.fgnxgjcId) {
+        re.fgnxgjcId = this.fgnxgjc.fgnxgjcId
+      }
+      //附件
+      if (this.fileList1 && this.fileList1.length) {
+        var a = []
+        _.each(this.fileList1, function(v) {
+          if (v.response) a.push(v.response.fileName)
+          else a.push(v.name)
+        })
+        params.append('fileName', JSON.stringify(a))
+      }
+      //附件
+      if (this.fileList2 && this.fileList2.length) {
+        var a = []
+        _.each(this.fileList2, function(v) {
+          if (v.response) a.push(v.response.fileName)
+          else a.push(v.name)
+        })
+        params.append('fileNameOther', JSON.stringify(a))
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.spinning = false
+          that.getFormData()
+          that.$message.success(res.msg)
+          params = new URLSearchParams()
+          params.append('patientBasisId', that.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+            .catch(error => {
+              console.log(error)
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    // handleCancel1() {
+    //   this.previewVisible1 = false;
+    // },
+    handlePreview1(file) {
+      const viewer = this.$el.querySelector('.images1').$viewer
+      viewer.show()
+      //   this.previewImage1 = file.url || file.thumbUrl;
+      //   this.previewVisible1 = true;
+    },
+    handleChange1({ fileList }) {
+      var that = this
+      this.fileList1 = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList1.forEach((f,i) => {
+          if(f.response){
+              that.$set(that.fileList1,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    },
+    // handleCancel2() {
+    //   this.previewVisible2 = false;
+    // },
+    handlePreview2(file) {
+      const viewer = this.$el.querySelector('.images2').$viewer
+      viewer.show()
+      //   this.previewImage2 = file.url || file.thumbUrl;
+      //   this.previewVisible2 = true;
+    },
+    handleChange2({ fileList }) {
+      var that = this
+      this.fileList2 = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList2.forEach((f,i) => {
+          if(f.response){
+              that.$set(that.fileList2,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    },
+    _importF() {
+      this.spinning = true
+      var params = new URLSearchParams()
+      params.append('type', 4)
+      params.append('url', this.fileList1[0].response.data.src)
+      var that = this
+      getOcrResult(params)
+        .then(res => {
+          console.log(res.data)
+          that.spinning = false
+          that.$message.success(res.data.info)
+          that.fgnxgjc = _.extend(that.fgnxgjc || {}, that.dealAnswers(res.data))
+        })
+        .catch(error => {
+          that.confirmLoading = false
+        })
+    },
+    _importS() {
+      this.spinning = true
+      var params = new URLSearchParams()
+      params.append('type', 3)
+      params.append('url', this.fileList2[0].response.data.src)
+      var that = this
+      getOcrResult(params)
+        .then(res => {
+          //   console.log(res.data)
+          that.spinning = false
+          that.$message.success(res.data.info)
+          that.fgnxgjc = _.extend(that.fgnxgjc || {}, that.dealAnswers(res.data))
+          //   that.form.setFieldsValue(that.fgnxgjc)
+        })
+        .catch(error => {
+          that.confirmLoading = false
+        })
+    },
+    withdraw() {
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.fgnxgjc.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    },
+    notice(e, name, low, high) {
+      let v = parseFloat(e.target.value)
+      if(!Number.isNaN(v)) {
+        if(low && v < low) {
+          this.$message.info(`请确认${name}的值`)
+        }
+        if(high && v > high) {
+          this.$message.info(`请确认${name}的值`)
+        }
+      }
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+
+      .treeSubTitle {
+        font-size: 14px;
+      }
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+.requireIcon {
+  position: relative;
+}
+.requireIcon {
+  padding-left: 10px;
+}
+.requireIcon::before {
+  position: absolute;
+  top: 21px;
+  left: 0;
+  margin-right: 4px;
+  content: '*';
+  font-family: SimSun;
+  line-height: 1;
+  font-size: 14px;
+  color: #f5222d;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/task/components/mask-23.vue b/src/views/task/components/mask-23.vue
new file mode 100644
index 0000000000..4412babaf1
--- /dev/null
+++ b/src/views/task/components/mask-23.vue
@@ -0,0 +1,828 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!</p>
+              <a-form-item label="有无新增心脏彩超:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a1', {...require2, initialValue: initValue('a1')}]" @change="changeRadio($event, 'controla1')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controla1">
+                <a-form-item label="报告上传:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <div class="clearfix" style="margin-top: 10px;">
+                    <a-upload :action="uploadUrl" listType="picture-card" :fileList="fileList" @change="handleChange">
+                      <div v-if="fileList.length < 1">
+                        <a-icon type="plus" />
+                        <div class="ant-upload-text">Upload</div>
+                      </div>
+                    </a-upload>
+                    <a-button style="position: absolute;top: 84px;left: 120px;font-size: 12px;padding: 0 5px;height: 30px;" @click="_import" v-if="fileList.length === 1">OCR识别</a-button>
+                  </div>
+                </a-form-item>
+                <!-- <div class="title">1.M型主要测值</div> -->
+                <!-- <a-form-item label="检查时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" v-decorator="['t1', {...dateRequire, initialValue: initValue('t1', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                </a-form-item> -->
+                <a-form-item label="(1) 主动脉根部内径:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b1', { initialValue: initValue('b1')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(2) 左房收缩末期内径:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b2', { initialValue: initValue('b2')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(3) 左室舒张末期内径:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b3', { initialValue: initValue('b3')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(4) 左室收缩末期内径:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b4', { initialValue: initValue('b4')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(5) 室间隔厚度:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b5', { initialValue: initValue('b5')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(6) 左室后壁厚度:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b6', { initialValue: initValue('b6')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(7) 肺动脉收缩压:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b8', { initialValue: initValue('b8')}]" addonAfter="mmHg" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(8) 主肺动脉内径:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b7', { initialValue: initValue('b7')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(9) 右房内径:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['e1', { initialValue: initValue('e1')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(10) 右室内径:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['e2', { initialValue: initValue('e2')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(11) 右室流出道:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['e3', { initialValue: initValue('e3')}]" addonAfter="cm" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(12) 左室射血分数:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c1', { initialValue: initValue('c1')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(13) 左室短轴缩短率:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c2', { initialValue: initValue('c2')}]" addonAfter="%" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="小结:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['d1', {...selectRequired, initialValue: initValue('d1')}]">
+                    <a-radio value="1">肺动脉高压</a-radio>
+                    <a-radio value="2">肺源性心脏病</a-radio>
+                    <a-radio value="3">无</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+              </div>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, recoverSubmit } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { getOcrResult } from '@/api/basis'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'task23',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      markName: 'xzcc',
+      title: '',
+      openKeys: [],
+      defaultSelectedKeys: [23],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      baselineFormStyle: {
+        // height: '444px',
+        'padding-top': '52px'
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 7 },
+        md: { span: 7 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 17 },
+        md: { span: 17 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 4, offset: 7 }
+      },
+      wrapperOffset: {
+        md: { span: 13 }
+      },
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      },
+      require1: {
+        rules: [{ required: true, message: '请选择是或否!' }]
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      selectRequired: {
+        rules: [{ required: true, message: '请选择!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      xzcc: undefined,
+      controla1: false,
+      spinning: false,
+      executeStatus: false,
+      uploadUrl: process.env.VUE_APP_API_UPLOAD_URL,
+      viewPicUrl: process.env.VUE_APP_API_VIEW_PIC_URL,
+      fileList: [],
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.title = '年访视'
+        that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    getFormData() {
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          if (res.data && res.data.xzcc)
+            that.xzcc = that.dealAnswers(res.data.xzcc)
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    },
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      this.maskId = e.key
+      if ((e.key >= 37 && e.key <= 42) || (e.key >= 45 && e.key <= 50)) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + this.maskId)
+      } else {
+        this.$router.replace('/list/task/' + this.patientBasisId + '/' + this.maskId)
+      }
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          re = {
+            ...re,
+            't1': typeof re['t1'] !== 'undefined' ? re['t1'].format('YYYY-MM-DD') : ''
+          }
+          var that = this
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.xzcc && this.xzcc.xzccId) {
+            re.xzccId = this.xzcc.xzccId
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.$message.success(res.msg)
+              that.spinning = false
+              that.getFormData()
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.xzcc) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.xzcc[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.xzcc[key])
+      } else if (type === 'array') {
+        return this.xzcc[key].split(',')
+      } else {
+        return this.xzcc[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        if (answer.a1 === '1') {
+          this.controla1 = true
+        }
+      }
+      return answer
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      re = {
+        ...re,
+        't1': typeof re['t1'] !== 'undefined' ? re['t1'].format('YYYY-MM-DD') : ''
+      }
+      var that = this
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.xzcc && this.xzcc.xzccId) {
+        re.xzccId = this.xzcc.xzccId
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.$message.success(res.msg)
+          that.spinning = false
+          that.getFormData()
+          params = new URLSearchParams()
+          params.append('patientBasisId', that.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+            .catch(error => {
+              console.log(error)
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    _import() {
+      this.spinning = true
+      var params = new URLSearchParams()
+      params.append('type', 5)
+      params.append('url', this.fileList[0].response.data.src)
+      var that = this
+      getOcrResult(params)
+        .then(res => {
+          console.log(res.data)
+          this.spinning = false
+          this.$message.success(res.data.info)
+          this.xzcc = _.extend(this.xzcc || {}, this.dealAnswers(res.data))
+          that.form.setFieldsValue(that.xzcc)
+        })
+        .catch(error => {
+          this.confirmLoading = false
+        })
+    },
+    handleChange({ fileList }) {
+      var that = this
+      this.fileList = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList.forEach((f,i) => {
+          if(f.response){
+              that.$set(that.fileList,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    withdraw() {
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.xzcc.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+
+      .treeSubTitle {
+        font-size: 14px;
+      }
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/task/components/mask-24.vue b/src/views/task/components/mask-24.vue
new file mode 100644
index 0000000000..063a3c6bac
--- /dev/null
+++ b/src/views/task/components/mask-24.vue
@@ -0,0 +1,962 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;" v-if="!isGroup">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="5" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhehuaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzhenghuaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <a-form :form="form" @submit="handleSubmit" class="base-form">
+            <div class="btn-array" v-if="executeStatus !== 2 && canEdit">
+              <a-button class="btn fr" type="primary" html-type="submit" ref="submitBtn">提交</a-button>
+              <a-button class="btn fr" @click="save">保存</a-button>
+            </div>
+            <div class="btn-array" v-if="executeStatus === 2 && canEdit">
+              <a-button class="btn fr" type="primary" @click="withdraw">撤回</a-button>
+            </div>
+            <div class="baselineForm" :style="baselineFormStyle">
+              <p class="tip">必填项如数据缺失无法提交,请一律用"/"来填写!</p>
+              <a-form-item label="有无新增其他实验室检查:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                <a-radio-group v-decorator="['a1', {...require2, initialValue: initValue('a1')}]" @change="changeRadio($event, 'controla1')">
+                  <a-radio value="1">有</a-radio>
+                  <a-radio value="-1">无</a-radio>
+                </a-radio-group>
+              </a-form-item>
+              <div v-if="controla1">
+                <div class="title">1.血常规</div>
+                <a-form-item label="血常规报告上传 :" :labelCol="labelColHor" :wrapperCol="wrapperHor" style="margin-top: 10px;">
+                  <div class="clearfix">
+                    <a-upload :action="uploadUrl" listType="picture-card" :fileList="fileList1" @change="handleChange1">
+                      <div v-if="fileList1.length < 1">
+                        <a-icon type="plus" />
+                        <div class="ant-upload-text">Upload</div>
+                      </div>
+                    </a-upload>
+                    <a-button style="position: absolute;top: 74px;left: 120px;font-size: 12px;padding: 0 5px;height: 30px;" @click="_import(fileList1,1)" v-if="fileList1.length === 1">OCR识别</a-button>
+                  </div>
+                </a-form-item>
+                <!-- <a-form-item label="检查时间" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-date-picker placeholder="请选择" v-decorator="['t1', {...dateRequire, initialValue: initValue('t1', 'time')}]" :disabledDate="disabledDate" style="width: 240px;"></a-date-picker>
+                </a-form-item> -->
+                <a-form-item label="(1) 血红蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b1', {...inputRequired, initialValue: initValue('b1')}]" addonAfter="g/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(2) 白细胞:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b2', {...inputRequired, initialValue: initValue('b2')}]" addonAfter="10^9/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(3) 红细胞:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b3', {...inputRequired, initialValue: initValue('b3')}]" addonAfter="10^12/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(4) 血小板:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b4', {...inputRequired, initialValue: initValue('b4')}]" addonAfter="10^9/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(5) 中性粒细胞绝对值:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b5', {...inputRequired, initialValue: initValue('b5')}]" addonAfter="10^9/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(6) 嗜酸细胞绝对值:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['b6', {...inputRequired, initialValue: initValue('b6')}]" addonAfter="10^9/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <div class="title">2.血生化</div>
+                <a-form-item label="血生化报告上传 :" :labelCol="labelColHor" :wrapperCol="wrapperHor" style="margin-top: 10px;">
+                  <div class="clearfix">
+                    <a-upload :action="uploadUrl" listType="picture-card" :fileList="fileList2" @change="handleChange2">
+                      <div v-if="fileList2.length < 1">
+                        <a-icon type="plus" />
+                        <div class="ant-upload-text">Upload</div>
+                      </div>
+                    </a-upload>
+                    <a-button style="position: absolute;top: 74px;left: 120px;font-size: 12px;padding: 0 5px;height: 30px;" @click="_import(fileList2,2)" v-if="fileList2.length === 1">OCR识别</a-button>
+                  </div>
+                </a-form-item>
+                <a-form-item label="(1) 血糖:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c1', {...inputRequired, initialValue: initValue('c1')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(2) 白蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c4', {...inputRequired, initialValue: initValue('c4')}]" addonAfter="g/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(3) 谷丙转氨酶:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c2', { initialValue: initValue('c2')}]" addonAfter="IU/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(4) 谷草转氨酶:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c3', { initialValue: initValue('c3')}]" addonAfter="IU/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(5) 前白蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c5', { initialValue: initValue('c5')}]" addonAfter="g/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(6) 球蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c6', { initialValue: initValue('c6')}]" addonAfter="g/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(7) 肌酐:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c7', { initialValue: initValue('c7')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(8) 尿素:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c8', { initialValue: initValue('c8')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(9) 钾:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c9', { initialValue: initValue('c9')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(10) 钠:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c10', { initialValue: initValue('c10')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(11) 钙:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c11', { initialValue: initValue('c11')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(12) 磷:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c12', { initialValue: initValue('c12')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(13) 总胆固醇:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c13', { initialValue: initValue('c13')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(14) 甘油三脂:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c14', { initialValue: initValue('c14')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(15) 高密度脂蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c15', { initialValue: initValue('c15')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(16) 低密度脂蛋白:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-input style="width: 240px;" v-decorator="['c16', { initialValue: initValue('c16')}]" addonAfter="mmol/L" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="(17) DD二聚体:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                  <a-input style="width: 240px;" v-decorator="['c17', { initialValue: initValue('c17')}]" addonAfter="ng/ml" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="DD二聚体:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['c171', { initialValue: initValue('c171')}]">
+                    <a-radio value="1">正常</a-radio>
+                    <a-radio value="2">降低</a-radio>
+                    <a-radio value="3">升高</a-radio>
+                    <a-radio value="4">未测量</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+                <a-form-item label="(18) 维生素D:" :labelCol="labelColHor" :wrapperCol="wrapperHor" class="no-border">
+                  <a-input style="width: 240px;" v-decorator="['c18', { initialValue: initValue('c18')}]" addonAfter="nmol/l" autocomplete="off"></a-input>
+                </a-form-item>
+                <a-form-item label="维生素D:" :labelCol="labelColHor" :wrapperCol="wrapperHor">
+                  <a-radio-group v-decorator="['c181', { initialValue: initValue('c181')}]">
+                    <a-radio value="1">正常</a-radio>
+                    <a-radio value="2">降低</a-radio>
+                    <a-radio value="3">升高</a-radio>
+                    <a-radio value="4">未测量</a-radio>
+                  </a-radio-group>
+                </a-form-item>
+              </div>
+            </div>
+          </a-form>
+        </a-col>
+      </a-row>
+    </a-card>
+    <a-spin :spinning="spinning"></a-spin>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import moment from 'moment'
+import { mapActions } from 'vuex'
+import { getPatientBasis, saveBasis, getBasisForm, getOcrResult, recoverSubmit } from '@/api/basis'
+import { MyIcon } from '@/components/_util/util'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import ContactForm from '@/views/account/ContactForm'
+export default {
+  name: 'task24',
+  components: {
+    STree,
+    MyIcon,
+    ContactForm
+  },
+  data() {
+    return {
+      markName: 'qtsyjc',
+      title: '',
+      openKeys: [],
+      defaultSelectedKeys: [24],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      baselineFormStyle: {
+        // height: '444px',
+        'padding-top': '52px'
+      },
+      labelColHor: {
+        xs: { span: 24 },
+        sm: { span: 7 },
+        md: { span: 7 }
+      },
+      wrapper18: {
+        md: { span: 18 }
+      },
+      labelColVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      wrapperHor: {
+        xs: { span: 24 },
+        sm: { span: 17 },
+        md: { span: 17 }
+      },
+      wrapperVer: {
+        xs: { span: 24 },
+        sm: { span: 24 },
+        md: { span: 24 }
+      },
+      labelColOffset: {
+        md: { span: 4, offset: 7 }
+      },
+      wrapperOffset: {
+        md: { span: 13 }
+      },
+      require2: {
+        rules: [{ required: true, message: '请选择有或无!' }]
+      },
+      inputRequired: {
+        rules: [{ required: true, message: '请填写!' }]
+      },
+      form: this.$form.createForm(this),
+      maskId: this.$route.meta.maskId,
+      patientBasisId: this.$route.params.id,
+      qtsyjc: undefined,
+      controla1: false,
+      spinning: false,
+      executeStatus: false,
+      previewVisible1: false,
+      previewImage1: '',
+      previewVisible2: false,
+      previewImage2: '',
+      uploadUrl: process.env.VUE_APP_API_UPLOAD_URL,
+      viewPicUrl: process.env.VUE_APP_API_VIEW_PIC_URL,
+      fileList1: [],
+      fileList2: [],
+      isGroup: this.$ls.get(ACCESS_TOKEN).roleId === 1 || false,
+      canEdit: false,
+      submitInfo: undefined,
+      dateRequire: {
+        rules: [{ type: 'object', required: true, message: '请选择时间!' }]
+      }
+    }
+  },
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.title = '年访视'
+        that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+        that.canEdit = that.$ls.get(ACCESS_TOKEN).centerId === that.patient.targetCenterId
+      })
+    this.getFormData()
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    moment,
+    getFormData() {
+      var that = this
+      var params = new URLSearchParams()
+      params.append('patientBasisId', this.patientBasisId)
+      params.append('basisMarkId', this.maskId)
+      getBasisForm(params)
+        .then(res => {
+          if (res.data && res.data.qtsyjc) {
+            that.qtsyjc = that.dealAnswers(res.data.qtsyjc)
+          }
+          if (res.data.annexListXcg && res.data.annexListXcg.length) {
+            that.fileList1 = _.map(res.data.annexListXcg, function(v) {
+              return {
+                uid: v.annexId,
+                url: that.viewPicUrl + v.annexAddress,
+                name: v.annexAddress,
+                status: 'done'
+              }
+            })
+          }
+          if (res.data.annexListXsh && res.data.annexListXsh.length) {
+            that.fileList2 = _.map(res.data.annexListXsh, function(v) {
+              return {
+                uid: v.annexId,
+                url: that.viewPicUrl + v.annexAddress,
+                name: v.annexAddress,
+                status: 'done'
+              }
+            })
+          }
+        })
+        .catch(error => {
+          console.log(error)
+        })
+    },
+    changeSelect(e, t) {
+      this[t] = e.target.checked
+    },
+    changeRadio(e, t) {
+      if (e.target.value === '1') {
+        this[t] = true
+      } else {
+        this[t] = false
+      }
+    },
+    handleClick(e) {
+      this.maskId = e.key
+      if ((e.key >= 37 && e.key <= 42) || (e.key >= 45 && e.key <= 50)) {
+        this.$router.replace('/basis/question/' + this.patientBasisId + '/' + this.maskId)
+      } else {
+        this.$router.replace('/list/task/' + this.patientBasisId + '/' + this.maskId)
+      }
+    },
+    handleSubmit(e) {
+      var _this = this
+      e.preventDefault()
+      const { form: { validateFieldsAndScroll } } = this
+      validateFieldsAndScroll((errors, values) => {
+        if (!errors) {
+          var re = this.form.getFieldsValue()
+          re = {
+            ...re,
+            't1': typeof re['t1'] !== 'undefined' ? re['t1'].format('YYYY-MM-DD') : ''
+          }
+          var that = this
+          this.patientBasis.status = 2
+          var params = new URLSearchParams()
+          if (this.qtsyjc && this.qtsyjc.qtsyjcId) {
+            re.qtsyjcId = this.qtsyjc.qtsyjcId
+          }
+          //附件
+          if (this.fileList1 && this.fileList1.length) {
+            var a = []
+            _.each(this.fileList1, function(v) {
+              if (v.response) a.push(v.response.fileName)
+              else a.push(v.name)
+            })
+            params.append('fileName', JSON.stringify(a))
+          }
+          //附件
+          if (this.fileList2 && this.fileList2.length) {
+            var a = []
+            _.each(this.fileList2, function(v) {
+              if (v.response) a.push(v.response.fileName)
+              else a.push(v.name)
+            })
+            params.append('fileNameOther', JSON.stringify(a))
+          }
+          params.append('formData', JSON.stringify(re))
+          params.append('patientBasis', JSON.stringify(this.patientBasis))
+          params.append('basisMarkId', this.maskId)
+          params.append('markName', this.markName)
+          this.spinning = true
+          saveBasis(params)
+            .then(res => {
+              console.log(res)
+              that.$message.success(res.msg)
+              that.spinning = false
+              that.getFormData()
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            })
+            .catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    initValue(key, type = 'normal') {
+      if (!this.qtsyjc) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (!this.qtsyjc[key]) return type === 'array' ? [] : type === 'time' ? undefined : ''
+      if (type === 'time') {
+        return moment(this.qtsyjc[key])
+      } else if (type === 'array') {
+        return this.qtsyjc[key].split(',')
+      } else {
+        return this.qtsyjc[key] + ''
+      }
+    },
+    dealAnswers(answer) {
+      if (answer && !_.isEmpty(answer)) {
+        if (answer.a1 == '1') {
+          this.controla1 = true
+        }
+      }
+      return answer
+    },
+    handleOk(v) {
+      this.submitInfo = v
+      this.$refs.submitBtn.$el.click()
+    },
+    getBirthdayByIdNO (IdNO){
+      let birthday = "";
+      if (IdNO.length==18) {
+        birthday = IdNO.substr(6,8);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else if(IdNO.length==15){
+        birthday = "19"+IdNO.substr(6,6);
+        return birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      }else{
+        return "";
+      }
+    },
+    disabledDate(current) {
+      let date = this.getBirthdayByIdNO(this.patient.card)
+      return current && current > moment().endOf('day') || moment(date).endOf('day') > current;
+    },
+    save() {
+      var re = this.form.getFieldsValue()
+      re = {
+        ...re,
+        't1': typeof re['t1'] !== 'undefined' ? re['t1'].format('YYYY-MM-DD') : ''
+      }
+      var that = this
+      console.log(re)
+      this.patientBasis.status = 1
+      var params = new URLSearchParams()
+      if (this.qtsyjc && this.qtsyjc.qtsyjcId) {
+        re.qtsyjcId = this.qtsyjc.qtsyjcId
+      }
+      //附件
+      if (this.fileList1 && this.fileList1.length) {
+        var a = []
+        _.each(this.fileList1, function(v) {
+          if (v.response) a.push(v.response.fileName)
+          else a.push(v.name)
+        })
+        params.append('fileName', JSON.stringify(a))
+      }
+      //附件
+      if (this.fileList2 && this.fileList2.length) {
+        var a = []
+        _.each(this.fileList2, function(v) {
+          if (v.response) a.push(v.response.fileName)
+          else a.push(v.name)
+        })
+        params.append('fileNameOther', JSON.stringify(a))
+      }
+      params.append('formData', JSON.stringify(re))
+      params.append('patientBasis', JSON.stringify(this.patientBasis))
+      params.append('basisMarkId', this.maskId)
+      params.append('markName', this.markName)
+      this.spinning = true
+      saveBasis(params)
+        .then(res => {
+          console.log(res)
+          that.$message.success(res.msg)
+          that.spinning = false
+          that.getFormData()
+          params = new URLSearchParams()
+          params.append('patientBasisId', that.patientBasisId)
+          getPatientBasis(params)
+            .then(res => {
+              that.orgTree = res.data.list
+              that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+            })
+            .catch(error => {
+              console.log(error)
+            })
+        })
+        .catch(error => {
+          that.spinning = false
+          console.log(error)
+        })
+      return false
+    },
+    handleCancel1() {
+      this.previewVisible1 = false;
+    },
+    handleChange1({ fileList }) {
+      var that = this
+      this.fileList1 = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList1.forEach((f,i) => {
+          if(f.response){
+              that.$set(that.fileList1,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    },
+    handleCancel2() {
+      this.previewVisible2 = false;
+    },
+    handleChange2({ fileList }) {
+      var that = this
+      this.fileList2 = fileList;
+      if (fileList.every(function(v) { return v.status === 'done'})) {
+        this.spinning = false
+        this.fileList2.forEach((f,i) => {
+          if(f.response){
+              that.$set(that.fileList2,i,{
+                name: f.response.fileName,
+                status: 'done',
+                uid: f.uid,
+                url: f.response.data.src
+              })
+          }
+        })
+      }
+    },
+    _import(fileList, type) {
+      var that = this
+      this.spinning = true
+      var params = new URLSearchParams()
+      params.append('url', fileList[0].response.data.src)
+      params.append('type', type)
+      getOcrResult(params)
+        .then(res => {
+          that.spinning = false
+          that.$message.success(res.data.info)
+          // console.log(res.data);
+          that.qtsyjc = _.extend(that.qtsyjc || {}, that.dealAnswers(res.data))
+          that.form.setFieldsValue(that.qtsyjc)
+        })
+        .catch(error => {
+          // console.log(error)
+          that.spinning = false
+          that.$message.error(res.msg)
+        })
+    },
+    withdraw() {
+      var that = this
+      this.$confirm({
+        title: '确认撤销?',
+        onOk() {
+          that.spinning = true
+          var params = new URLSearchParams()
+          params.append('patientBasisMarkId', that.qtsyjc.patientBasisMarkId)
+          recoverSubmit(params)
+            .then(res => {
+              that.spinning = false
+              that.$message.success(res.msg)
+              params = new URLSearchParams()
+              params.append('patientBasisId', that.patientBasisId)
+              getPatientBasis(params)
+                .then(res => {
+
+                  that.orgTree = res.data.list
+                  that.executeStatus = _.find(res.data.list[2].childList, function(v) { return v.basisMarkId === that.maskId }).executeStatus
+                })
+                .catch(error => {
+                  console.log(error)
+                })
+            }).catch(error => {
+              that.spinning = false
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo {
+  height: calc(100% - 10px);
+}
+
+/deep/ .card-box {
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+
+/deep/ .ant-spin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background: rgba(0, 0, 0, .2);
+  z-index: 2;
+
+  & .ant-spin-dot {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+  }
+}
+
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ant-row.ant-form-item:hover {
+  background-color: #e6f7ff;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-calendar-picker {
+  width: 240px;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #1890FF;
+  color: #FFF;
+
+  .anticon.anticon-clock-circle,
+  .anticon.anticon-check-circle {
+    color: #FFF;
+  }
+}
+
+/deep/ .anticon.anticon-clock-circle,
+/deep/ .anticon.anticon-check-circle {
+  font-size: 18px;
+}
+
+/deep/ .ant-menu-item:hover,
+.ant-menu-item-active,
+.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+.ant-menu-submenu-active,
+.ant-menu-submenu-title:hover {
+  background-color: #e6f7ff;
+}
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    color: #25aefe;
+    font-size: 20px;
+    padding-left: 70px;
+    padding-top: 18px;
+    padding-bottom: 10px;
+    background-image: url(../../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    background-position: 8px 10px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #00A0E9;
+  }
+
+  /deep/ .anticon.anticon-clock-circle {
+    color: #8ac51b;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+
+      .treeSubTitle {
+        font-size: 14px;
+      }
+
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .btn-array {
+    overflow: hidden;
+    position: absolute;
+    padding-top: 10px;
+    padding-right: 20px;
+    width: calc(100% - 8px);
+    // height: 42px;
+    background: #fff;
+    z-index: 1;
+    padding-bottom: 10px;
+    bottom: 0;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+
+.base-form {
+  height: 100%;
+  -ms-overflow-x: hidden;
+  overflow: hidden auto;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/task/components/taskCreateForm.vue b/src/views/task/components/taskCreateForm.vue
new file mode 100644
index 0000000000..c2b171ee8a
--- /dev/null
+++ b/src/views/task/components/taskCreateForm.vue
@@ -0,0 +1,152 @@
+<template>
+  <a-modal :title="options.title" :width="700" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :destroyOnClose="destroyOnClose" :centered="centered" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item>
+          <a-input-search placeholder="搜索患者姓名,身份证号" @search="onSearch" v-decorator="['card', { rules: [{ required: true , message: '该选项必填'}] }]" enterButton autocomplete="off" />
+        </a-form-item>
+        <a-table v-if="data.length > 0" :columns="columns" :rowSelection="rowSelection" :dataSource="data" :pagination="pagination" rowKey="patientId" @change="handleTableChange">
+        </a-table>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+import { getPatientDataList } from '@/api/patient'
+import { createNfs } from '@/api/basis'
+import moment from 'moment'
+const columns = [{
+    title: '患者编号',
+    dataIndex: 'code'
+  },
+  {
+    title: '患者姓名',
+    dataIndex: 'name'
+  },
+  {
+    title: '身份证号',
+    dataIndex: 'card'
+  },
+  {
+    title: '联系方式',
+    dataIndex: 'telephone1'
+  }
+];
+export default {
+  data() {
+    return {
+      options: {},
+      residences: [],
+      patientId: undefined,
+      maskClosable: false,
+      data: [],
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 7 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 14 }
+      },
+      visible: false,
+      confirmLoading: false,
+      centered: true,
+      destroyOnClose: true,
+      bodyStyle: {
+        height: '500px',
+        overflow: 'auto'
+      },
+      form: this.$form.createForm(this),
+      requiredRule: { rules: [{ required: true, message: '该选项必填' }] },
+      pagination: {},
+      columns,
+      keyword: ''
+    };
+  },
+  computed: {
+    rowSelection() {
+      const { selectedRowKeys } = this;
+      return {
+        type: 'radio',
+        onChange: (selectedRowKeys, selectedRows) => {
+          this.patientId = selectedRows[0].patientId
+        },
+        getCheckboxProps: record => ({
+          props: {
+            disabled: record.name === 'Disabled User', // Column configuration not to be checked
+            name: record.name
+          }
+        })
+      };
+    }
+  },
+  methods: {
+    add() {
+      this.options.title = '新建访视信息';
+      this.visible = true;
+      this.data = [];
+      this.patientId = null;
+    },
+    onSearch(value) {
+      this.keyword = value
+      this.getPatientList(1, 5);
+    },
+    handleTableChange(pagination) {
+      console.log(pagination);
+      const pager = { ...this.pagination };
+      pager.current = pagination.current;
+      this.pagination = pager;
+      this.getPatientList(pagination.current, 5);
+    },
+    handleSubmit() {
+      if (!this.patientId) {
+        this.$message.error('请选择患者')
+        return
+      }
+      this.confirmLoading = true
+      const p = new URLSearchParams();
+      p.append('patientId', this.patientId)
+      createNfs(p).then(res => {
+        if(res.code == 0) {
+          this.$emit('ok')
+          this.visible = false
+          this.$message.success(res.msg);
+          this.confirmLoading = false
+        } else {
+          this.$emit('ok')
+          this.visible = false
+          this.$message.warning(res.msg);
+          this.confirmLoading = false
+        }
+      })
+    },
+    handleCancel() {
+      this.visible = false;
+    },
+    getPatientList(pageNumber, pageSize) {
+      const Params = new URLSearchParams();
+      Params.append('pageNumber', pageNumber);
+      Params.append('pageSize', pageSize);
+      Params.append('keyWord', this.keyword);
+      getPatientDataList(Params).then(res => {
+        this.data = res.data;
+        const pagination = { ...this.pagination };
+        pagination.total = res.total;
+        // this.confirmLoading = false;
+        this.pagination = pagination;
+      });
+    }
+  }
+};
+</script>
+<style>
+.ant-modal-header {
+  padding: 12px 24px !important;
+}
+
+.ant-modal-close-x {
+  width: 50px !important;
+  height: 50px !important;
+  line-height: 50px !important;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/task/index.vue b/src/views/task/index.vue
new file mode 100644
index 0000000000..47bd5bff60
--- /dev/null
+++ b/src/views/task/index.vue
@@ -0,0 +1,429 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索患者姓名、身份证号、入组编号" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="4" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col :md="15" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="$refs.createModal.add()">新建</a-button>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch(1)">未执行任务</p>
+                    <p @click="tableSearch(2)">未执行随访</p>
+                    <p @click="tableSearch(3)">未执行访视</p>
+                    <p @click="tableSearch(4)">已执行随访</p>
+                    <p @click="tableSearch(5)">已执行访视</p>
+                    <p @click="tableSearch(6)">全部任务</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="是否ICON">
+                        <a-radio-group v-model="queryParam.isIcon">
+                          <a-radio value="-1">否</a-radio>
+                          <a-radio value="1">是</a-radio>
+                        </a-radio-group>
+                      </a-form-item>
+                      <a-form-item label="入组编号">
+                        <a-input v-model.trim="queryParam.fileCode" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="患者姓名">
+                        <a-input v-model.trim="queryParam.patientName" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="身份证号">
+                        <a-input v-model.trim="queryParam.card" style="width: 100%" />
+                      </a-form-item>
+                      <a-form-item label="任务名称">
+                        <a-select v-model.trim="queryParam.type">
+                          <a-select-option value="2">半年随访任务</a-select-option>
+                          <a-select-option value="3">年访视任务</a-select-option>
+                        </a-select>
+                      </a-form-item>
+                      <a-form-item label="到期时间" style="margin-bottom:0;">
+                        <a-range-picker @change="changeTime" style="width: 100%" :value="dateArr" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                        <a-button type="primary" @click="clearForm">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="patientBasisId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <template slot="warnStatus" slot-scope="text">
+        <img width="25px" v-if="text == 1" src="../../assets/warn-1.png" :alt="text">
+        <img width="25px" v-else-if="text == 2" src="../../assets/warn-2.png" :alt="text">
+        <img width="25px" v-else-if="text > 2" src="../../assets/warn-3.png" :alt="text">
+      </template>
+      <template slot="patientName" slot-scope="text,record">
+        <a @click="showUser(record)">{{modifyName(text)}}</a>
+      </template>
+      <span slot="unSubmitquestion" slot-scope="text, record">
+        <p>{{ record.unSubmitquestion }}</p>
+      </span>
+      <span slot="questionStatus" slot-scope="text">
+        <a-badge :status="text | visitTypeFilter" :text="text | visitFilter" /></span>
+      <span slot="submitStatusStr" slot-scope="text">
+        <a-badge :status="text | visitTypeFilter" :text="text | visitFilter" /></span>
+      <template slot="operation" slot-scope="text, record">
+        <a @click="implement(record)">执行</a>
+        <a-divider type="vertical" />
+        <a @click="ignore(record)">忽略</a>
+      </template>
+    </s-table>
+    <create-form ref="createModal" @ok="handleOk" />
+    <user-detail ref="detailModal" />
+    <a-modal :visible="visible" title="退组" @ok="outSubmit" :confirmLoading="confirmLoading" :centered="centered" :destroyOnClose="destroyOnClose" @cancel="handleClose">
+      <a-form :form="form">
+        <input type="hidden" v-model="outPatientBasisId">
+        <a-form-item label="退组原因" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-radio-group v-decorator="['status', requiredRule]">
+            <a-radio value="1">访视结束</a-radio>
+            <a-radio value="2">失访</a-radio>
+            <a-radio value="3">死亡</a-radio>
+          </a-radio-group>
+        </a-form-item>
+      </a-form>
+    </a-modal>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getVisitTask, ignoreBNTask } from '@/api/task'
+import { STable } from '@/components'
+import CreateForm from './components/taskCreateForm'
+import UserDetail from '../list/modules/UserDetail'
+import $ from 'jquery'
+const visitMap = {
+  '已提交': {
+    status: 'success',
+    text: '已提交'
+  },
+  '未提交': {
+    status: 'error',
+    text: '未提交'
+  },
+  '忽略': {
+    status: 'default',
+    text: '忽略'
+  }
+};
+
+export default {
+  name: 'Task',
+  components: {
+    STable,
+    CreateForm,
+    UserDetail
+  },
+  data() {
+    return {
+      visible: false,
+      form: this.$form.createForm(this),
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 7 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 15 }
+      },
+      requiredRule: { rules: [{ required: true, message: '该选项必填!' }] },
+      confirmLoading: false,
+      centered: true,
+      destroyOnClose: true,
+      outPatientBasisId: undefined,
+      form: this.$form.createForm(this),
+      bodyStyle: {
+        padding: "10px",
+        paddingBottom: "0px"
+      },
+      // 查询参数
+      queryParam: {},
+      advanced: false,
+      // 表头
+      columns: [{
+          title: '预警',
+          dataIndex: 'warnStatus',
+          scopedSlots: { customRender: 'warnStatus' },
+          width: 70
+        },{
+          title: '是否ICON',
+          dataIndex: 'research',
+          width: 80,
+        },
+        {
+          title: '提交状态',
+          dataIndex: 'submitStatusStr',
+          width: 80,
+          scopedSlots: {
+            customRender: 'submitStatusStr'
+          }
+        },
+        {
+          title: '入组编号',
+          dataIndex: 'fileCode',
+          width: 100
+        },
+        {
+          title: '任务状态',
+          dataIndex: 'executeStatusName',
+          width: 80
+        },
+        {
+          title: '任务名称',
+          dataIndex: 'typeName',
+          customRender: typeName => typeName + '任务',
+          width: 120
+        },
+        {
+          title: '患者姓名',
+          dataIndex: 'patientName',
+          scopedSlots: { customRender: 'patientName' },
+          align: 'center',
+          width: 100
+        },
+        {
+          title: '联系电话',
+          dataIndex: 'telephone',
+          width: 120,
+        },
+        {
+          title: '创建日期',
+          dataIndex: 'createDate',
+          customRender: createDate => moment(createDate).format('YYYY-MM-DD'),
+          width: 120
+        },
+        {
+          title: '到期日期',
+          dataIndex: 'planDate',
+          customRender: planDate => moment(planDate).format('YYYY-MM-DD'),
+          width: 120,
+        },
+        {
+          title: '分支中心',
+          dataIndex: 'centerName',
+          width: 200
+        }, {
+          title: '问卷状态',
+          width: 80,
+          dataIndex: 'questionStatus',
+          scopedSlots: {
+            customRender: 'questionStatus'
+          }
+        }, {
+          title: '未提交问卷',
+          width: 200,
+          dataIndex: ' unSubmitquestion',
+          scopedSlots: {
+            customRender: 'unSubmitquestion'
+          }
+        },
+        {
+          title: '操作',
+          width: 100,
+          scopedSlots: { customRender: 'operation' }
+        }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        if (!parameter.queryType) {
+          parameter.queryType = 1
+        }
+        return getVisitTask(Object.assign(parameter, this.queryParam)).then(res => {
+          return res;
+        });
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      scroll: false,
+      dateArr: [],
+      // custom table alert & rowSelection
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = [];
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      }
+    };
+  },
+  created() {
+    this.scroll = {
+      y: (window.screen.height - 368) + "px"
+    }
+  },
+  filters: {
+    visitFilter(type) {
+      if (typeof type === 'undefined') {
+        type = '忽略'
+      }
+      return visitMap[type].text;
+    },
+    visitTypeFilter(type) {
+      if (typeof type === 'undefined') {
+        type = '忽略'
+      }
+      return visitMap[type].status;
+    }
+  },
+  mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  },
+  methods: {
+    modifyName(name) {
+      return name.replace(/(.)(.*)/, (_, $1, $2) => $1 + '*'.repeat($2.length))
+    },
+    handleClose() {
+      this.visible = false
+    },
+    handleOk() {
+      this.$refs.table.refresh();
+    },
+    clearForm() {
+      this.queryParam = {}
+      this.dateArr = []
+    },
+    refreshTable() {
+      this.advanced = false;
+      this.$refs.table.refresh();
+    },
+    changeTime(time) {
+      this.dateArr = time;
+      this.queryParam.planDateStart = moment(time[0]).format('YYYY-MM-DD');
+      this.queryParam.planDateEnd = moment(time[1]).format('YYYY-MM-DD');
+    },
+    tableSearch(type) {
+      this.queryParam.queryType = type
+      this.$refs.table.refresh();
+      this.advanced = false;
+    },
+    showUser(record) {
+      this.$refs.detailModal.show(record);
+    },
+    implement(record) {
+      //执行
+      if (record.type === 6) {
+        this.$router.push('/icon/task/' + record.patientBasisId)
+      } else {
+        this.$router.push('/list/task/' + record.patientBasisId)
+      }
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    ignore(record) {
+      var that = this
+      // if (record.executeStatus == 0) {
+      //   this.$message.warning('只能忽略未执行的任务!');
+      //   return false;
+      // }
+      if (record.submitStatus == 2) {
+        this.$message.warning('只能忽略未忽略的任务!');
+        return false;
+      }
+      if (record.type != 2) {
+        this.visible = true;
+        this.outPatientBasisId = record.patientBasisId
+        return false;
+      }
+      this.$confirm({
+        title: '是否忽略?',
+        onOk() {
+          const params = new URLSearchParams()
+          params.append('patientBasisId', record.patientBasisId)
+          ignoreBNTask(params)
+            .then(res => {
+              that.$message.success(res.msg)
+              that.$refs.table.refresh()
+            });
+        }
+      });
+    },
+    outSubmit() {
+      var that = this
+      this.form.validateFieldsAndScroll((errors, fieldsValue) => {
+        if (errors) {
+          that.confirmLoading = false
+          return
+        }
+        const params = new URLSearchParams()
+        params.append('patientBasisId', that.outPatientBasisId)
+        params.append('status', fieldsValue.status)
+        ignoreBNTask(params).then(res => {
+          that.visible = false
+          that.confirmLoading = false
+          that.$message.success(res.msg)
+          that.$refs.table.refresh()
+        });
+      });
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 100px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/task/total.vue b/src/views/task/total.vue
new file mode 100644
index 0000000000..a659767ea4
--- /dev/null
+++ b/src/views/task/total.vue
@@ -0,0 +1,408 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main">
+    <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;">
+      <a-row :gutter="30" style="line-height: 34px;">
+        <a-col :md="1" :sm="4">
+          <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+        </a-col>
+        <a-col :md="4" :sm="20" class="UserNameCard">
+          <my-icon type="iconshoufangzhe_huaban" />
+          受访者:{{ patient.name }}
+        </a-col>
+        <a-col :md="7" :sm="24" class="UserNameCard">
+          <my-icon type="iconshenfenzheng_huaban" />
+          身份证:{{ patient.card }}
+        </a-col>
+        <a-col :md="11" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ patientBasis.createDate | moment }}</a-col>
+      </a-row>
+    </a-card>
+    <a-card :bordered="false" class="card-box">
+      <a-row :gutter="8">
+        <a-col :span="5" :style="baselineInfoStyle">
+          <s-tree :treeTitle="title" :defaultSelectedKeys="defaultSelectedKeys" :dataSource="orgTree" :openKeys.sync="openKeys" :search="false" @click="handleClick">
+          </s-tree>
+        </a-col>
+        <a-col :span="19" style="height:100%;">
+          <!-- 支扩病史资料 -->
+        </a-col>
+      </a-row>
+    </a-card>
+  </div>
+</template>
+<script>
+import STree from '@/components/Tree/Tree'
+import { mapActions } from 'vuex'
+import { getPatientBasis, getElementsAnswer, getMedicineAllergyList, computeScore, getAllQuestionList, saveQuestion, getVtList, importVtData } from '@/api/basis'
+import _ from 'lodash'
+import $ from 'jquery'
+import moment from 'moment'
+import { MyIcon } from '@/components/_util/util'
+
+export default {
+  name: 'taskTotal',
+  components: {
+    STree,
+    MyIcon
+  },
+  data() {
+    return {
+      baselineInfoStyle: {
+        overflow: "auto",
+        height: "100%",
+        "padding-right": "0px",
+        boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+      },
+      baselineFormStyle: {
+        // height: '444px',
+      },
+      title: '年访视',
+      openKeys: [],
+      defaultSelectedKeys: [],
+      orgTree: [],
+      patient: {},
+      patientBasis: {},
+      patientBasisId: this.$route.params.id,
+      basisMaskId: -1
+    }
+  },
+  beforeCreate() {},
+  created() {
+    var that = this
+    this.CloseSidebar()
+    var params = new URLSearchParams()
+    params.append('patientBasisId', this.patientBasisId)
+    getPatientBasis(params)
+      .then(res => {
+        that.patient = res.data.patient
+        that.patientBasis = res.data.patientBasis
+        that.orgTree = res.data.list
+        that.basisMaskId = that.orgTree[0].basisMarkId
+        that.defaultSelectedKeys = [that.basisMaskId]
+        that.$router.replace('/list/task/' + that.patientBasisId + '/' + that.basisMaskId)
+      })
+  },
+  methods: {
+    ...mapActions(['CloseSidebar']),
+    handleClick(e) {
+      this.basisMaskId = e.key
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#baselineInfo{
+  height:calc(100% - 10px);
+}
+/deep/ .card-box{
+  margin-top: 10px;
+  padding-left: 0;
+  height: calc(100% - 54px);
+}
+/deep/ #baselineHeader {
+  .ant-card-body {
+    padding: 10px
+  }
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.UserNameCard {
+  font-size: 20px;
+
+  .anticon {
+    font-size: 26px;
+    vertical-align: text-bottom;
+    position: relative;
+    left: -5px;
+  }
+}
+
+.clear {
+  clear: both;
+}
+
+.ant-col-4 .ant-calendar-picker,
+.ant-col-6 .ant-calendar-picker {
+  width: 100%;
+}
+
+.ant-checkbox-wrapper+.ant-checkbox-wrapper {
+  margin-left: 0;
+}
+
+/deep/.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+  background-color: #CFF4FF;
+}
+
+
+/deep/.ant-menu-vertical .ant-menu-item:after,
+.ant-menu-vertical-left .ant-menu-item:after,
+.ant-menu-vertical-right .ant-menu-item:after,
+.ant-menu-inline .ant-menu-item:after {
+  border-right: 6px solid #1890ff;
+}
+
+/deep/ .ant-row {
+  clear: both;
+  height: 100%;
+}
+
+.page-header-index-wide {
+  /deep/ .ant-card-wider-padding .ant-card-body {
+    padding: 0;
+    height: 100%;
+  }
+
+  /deep/ .tree-title {
+    border-right: 1px solid #e8e8e8;
+    color: #25aefe;
+    font-size: 22px;
+    padding-left: 70px;
+    padding-top: 5px;
+    padding-bottom: 10px;
+    background-image: url(../../assets/treeTop.png);
+    background-repeat: no-repeat;
+    border-bottom: 1px solid #eee;
+    padding-left: 20p;
+    background-position-x: 15px;
+    padding-bottom: 26px;
+  }
+
+  /deep/ .ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,
+  .ant-menu .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+  }
+
+  /deep/ .ant-menu-submenu-title {
+    height: 50px;
+    line-height: 50px;
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    background-color: rgba(245, 251, 255);
+
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      background-color: rgba(245, 251, 255);
+      padding-left: 20px;
+      .treeSubTitle{
+        font-size: 14px;
+      }
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ li.ant-menu-submenu.ant-menu-submenu-inline {
+    .ant-menu.ant-menu-inline.ant-menu-sub {
+      li {
+        border-bottom: none;
+        height: 40px;
+        line-height: 40px;
+      }
+    }
+  }
+
+  /deep/ .ant-menu-item {
+    height: 50px;
+    line-height: 50px;
+    border-bottom: 1px solid #eeeeee;
+    margin: 0;
+
+    .ant-menu-item:hover,
+    .ant-menu-item-active,
+    .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
+    .ant-menu-submenu-active,
+    .ant-menu-submenu-title:hover {
+      background-color: #eaf2fd;
+    }
+
+    .placeholderI {
+      display: inline-block;
+      width: 27px;
+    }
+
+    .anticon.anticon-check-circle {
+      font-size: 18px;
+      color: #8ac51b;
+    }
+
+    .anticon.anticon-clock-circle {
+      font-size: 18px;
+      color: #06a0e2;
+    }
+
+    .treeSubTitle {
+      font-size: 16px;
+      margin-left: 10px;
+      display: inline-block;
+      width: 140px;
+    }
+
+    .treeSubPercentage {
+      font-size: 16px;
+      margin-left: 10px;
+    }
+  }
+
+  /deep/ .ant-menu-submenu {
+    .anticon-check-circle {
+      color: #8ac51b;
+    }
+
+    .anticon-clock-circle {
+      color: #06a0e2;
+    }
+    &.ant-menu-submenu-inline {
+      .treeSubTitle {
+        font-size: 16px;
+        margin-left: 10px;
+        display: inline-block;
+        width: 140px;
+      }
+
+      .treeSubPercentage {
+        font-size: 16px;
+        margin-left: 10px;
+      }
+
+      .action {
+        font-size: 18px;
+
+        &.anticon-check-circle {
+          color: #8ac51b;
+        }
+
+        &.anticon-clock-circle {
+          color: #06a0e2;
+        }
+      }
+
+      .placeholderI {
+        display: inline-block;
+        width: 27px;
+      }
+    }
+  }
+
+  .fr {
+    float: right;
+  }
+
+  .btn {
+    margin-right: 10px;
+  }
+
+  .baselineForm {
+
+    overflow: auto;
+
+    .title {
+      background-color: #f7f8f8;
+      font-weight: bold;
+      font-size: 16px;
+      color: #231815;
+      padding-left: 15px;
+      border-top: 1px solid #eee;
+      border-bottom: 1px solid #eee;
+      height: 40px;
+      line-height: 40px;
+    }
+
+    padding: 40px 20px;
+
+    .ant-form-item {
+      // padding-bottom: 10px;
+      // padding-top: 10px;
+      margin-bottom: 0px;
+      border-bottom: 1px solid #eee;
+
+      &.no-border {
+        border-bottom: none;
+        padding-top: 0;
+        padding-bottom: 0;
+      }
+
+      &:hover {}
+
+      &.border-dotted {
+        border-bottom: 1px dotted #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-label {
+      text-align: left;
+      line-height: 56px;
+      white-space: inherit;
+
+      label:after {
+        content: '';
+      }
+
+      &.ant-col-md-24 label {
+        display: block;
+        background-color: #f7f8f8;
+        font-weight: bold;
+        font-size: 16px;
+        color: #231815;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+    }
+
+    /deep/ .ant-form-item-control-wrapper .ant-form-item-control {
+      line-height: 56px;
+    }
+
+    .formSubtitle {
+      height: 50px;
+      line-height: 50px;
+      font-weight: bold;
+      font-size: 16px;
+      padding-left: 10px;
+      margin-bottom: 0px;
+      background: #fafcfd;
+      border-bottom: 1px solid #f3f3f3;
+    }
+
+    .itemRow:hover {
+      background-color: #e6f7ff;
+    }
+  }
+}
+
+.question-title {
+  text-align: center;
+  font-size: 22px;
+  color: #3398DC;
+}
+
+.question-des {
+  font-size: 16px;
+  // border: 1px solid #91D5FF ;
+  // border-radius: 3px;
+  // background: lightblue;
+  padding: 0 10px;
+}
+
+.question-t {
+  font-size: 18px;
+  line-height: 40px;
+  font-weight: 700;
+}
+
+/deep/.page-header-index-wide[data-v-30448598] .ant-menu-submenu.ant-menu-submenu-inline .treeSubTitle {
+  width: 120px;
+}
+
+/deep/.ant-menu-inline .ant-menu-submenu-title {
+  padding-right: 0px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/user/Login.vue b/src/views/user/Login.vue
index f6657ad513..f075626df4 100644
--- a/src/views/user/Login.vue
+++ b/src/views/user/Login.vue
@@ -1,131 +1,35 @@
 <template>
   <div class="main">
-    <a-form
-      id="formLogin"
-      class="user-layout-login"
-      ref="formLogin"
-      :form="form"
-      @submit="handleSubmit"
-    >
-      <a-tabs
-        :activeKey="customActiveKey"
-        :tabBarStyle="{ textAlign: 'center', borderBottom: 'unset' }"
-        @change="handleTabClick"
-      >
-        <a-tab-pane key="tab1" tab="账号密码登录">
-          <a-form-item>
-            <a-input
-              size="large"
-              type="text"
-              placeholder="账户: admin"
-              v-decorator="[
-                'username',
-                {rules: [{ required: true, message: '请输入帐户名或邮箱地址' }, { validator: handleUsernameOrEmail }], validateTrigger: 'change'}
-              ]"
-            >
-              <a-icon slot="prefix" type="user" :style="{ color: 'rgba(0,0,0,.25)' }"/>
-            </a-input>
-          </a-form-item>
-
-          <a-form-item>
-            <a-input
-              size="large"
-              type="password"
-              autocomplete="false"
-              placeholder="密码: admin or ant.design"
-              v-decorator="[
-                'password',
-                {rules: [{ required: true, message: '请输入密码' }], validateTrigger: 'blur'}
-              ]"
-            >
-              <a-icon slot="prefix" type="lock" :style="{ color: 'rgba(0,0,0,.25)' }"/>
-            </a-input>
-          </a-form-item>
-        </a-tab-pane>
-        <a-tab-pane key="tab2" tab="手机号登录">
-          <a-form-item>
-            <a-input size="large" type="text" placeholder="手机号" v-decorator="['mobile', {rules: [{ required: true, pattern: /^1[34578]\d{9}$/, message: '请输入正确的手机号' }], validateTrigger: 'change'}]">
-              <a-icon slot="prefix" type="mobile" :style="{ color: 'rgba(0,0,0,.25)' }"/>
-            </a-input>
-          </a-form-item>
-
-          <a-row :gutter="16">
-            <a-col class="gutter-row" :span="16">
-              <a-form-item>
-                <a-input size="large" type="text" placeholder="验证码" v-decorator="['captcha', {rules: [{ required: true, message: '请输入验证码' }], validateTrigger: 'blur'}]">
-                  <a-icon slot="prefix" type="mail" :style="{ color: 'rgba(0,0,0,.25)' }"/>
-                </a-input>
-              </a-form-item>
-            </a-col>
-            <a-col class="gutter-row" :span="8">
-              <a-button
-                class="getCaptcha"
-                tabindex="-1"
-                :disabled="state.smsSendBtn"
-                @click.stop.prevent="getCaptcha"
-                v-text="!state.smsSendBtn && '获取验证码' || (state.time+' s')"
-              ></a-button>
-            </a-col>
-          </a-row>
-        </a-tab-pane>
-      </a-tabs>
-
+    <a-form id="formLogin" class="user-layout-login" ref="formLogin" :form="form" @submit="handleSubmit">
       <a-form-item>
-        <a-checkbox v-decorator="['rememberMe']">自动登录</a-checkbox>
-        <router-link
-          :to="{ name: 'recover', params: { user: 'aaa'} }"
-          class="forge-password"
-          style="float: right;"
-        >忘记密码</router-link>
+        <a-input size="large" type="text" placeholder="账号" v-decorator="['account', { rules: [{ required: true, message: '请输入账号' }, { validator: handleUsernameOrEmail }], validateTrigger: 'change' }]">
+          <a-icon slot="prefix" type="user" :style="{ color: 'rgba(0,0,0,.25)' }" />
+        </a-input>
+      </a-form-item>
+      <a-form-item>
+        <a-input size="large" type="password" autocomplete="false" placeholder="密码" v-decorator="['password', { rules: [{ required: true, message: '请输入密码' }], validateTrigger: 'blur' }]">
+          <a-icon slot="prefix" type="lock" :style="{ color: 'rgba(0,0,0,.25)' }" />
+        </a-input>
+      </a-form-item>
+      <a-form-item>
+        <a-checkbox v-decorator="['rememberMe']">记住密码</a-checkbox>
       </a-form-item>
-
       <a-form-item style="margin-top:24px">
-        <a-button
-          size="large"
-          type="primary"
-          htmlType="submit"
-          class="login-button"
-          :loading="state.loginBtn"
-          :disabled="state.loginBtn"
-        >确定</a-button>
+        <a-button size="large" type="primary" htmlType="submit" class="login-button" :loading="state.loginBtn" :disabled="state.loginBtn">登录</a-button>
       </a-form-item>
-
-      <div class="user-login-other">
-        <span>其他登录方式</span>
-        <a>
-          <a-icon class="item-icon" type="alipay-circle"></a-icon>
-        </a>
-        <a>
-          <a-icon class="item-icon" type="taobao-circle"></a-icon>
-        </a>
-        <a>
-          <a-icon class="item-icon" type="weibo-circle"></a-icon>
-        </a>
-        <router-link class="register" :to="{ name: 'register' }">注册账户</router-link>
-      </div>
     </a-form>
-
-    <two-step-captcha
-      v-if="requiredTwoStepCaptcha"
-      :visible="stepCaptchaVisible"
-      @success="stepCaptchaSuccess"
-      @cancel="stepCaptchaCancel"
-    ></two-step-captcha>
   </div>
 </template>
-
 <script>
+import Vue from 'vue'
 import md5 from 'md5'
-import TwoStepCaptcha from '@/components/tools/TwoStepCaptcha'
 import { mapActions } from 'vuex'
 import { timeFix } from '@/utils/util'
-import { getSmsCaptcha, get2step } from '@/api/login'
+import { getVersion } from '@/api/login'
 
 export default {
-  components: {
-    TwoStepCaptcha
-  },
-  data () {
+  components: {},
+  data() {
     return {
       customActiveKey: 'tab1',
       loginBtn: false,
@@ -141,145 +45,94 @@ export default {
         loginType: 0,
         smsSendBtn: false
       }
-    }
+    };
   },
-  created () {
-    get2step({ })
-      .then(res => {
-        this.requiredTwoStepCaptcha = res.result.stepCode
-      })
-      .catch(() => {
-        this.requiredTwoStepCaptcha = false
-      })
-    // this.requiredTwoStepCaptcha = true
+  created() {
+    getVersion()
+    .then(res => {
+      console.log(res)
+      if(res.code === 0){
+        Vue.ls.set('version', res.data.htmlVersionNumber)
+      }
+    })
   },
   methods: {
     ...mapActions(['Login', 'Logout']),
     // handler
-    handleUsernameOrEmail (rule, value, callback) {
-      const { state } = this
-      const regex = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/
+    handleUsernameOrEmail(rule, value, callback) {
+      const { state } = this;
+      const regex = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;
       if (regex.test(value)) {
-        state.loginType = 0
+        state.loginType = 0;
       } else {
-        state.loginType = 1
+        state.loginType = 1;
       }
-      callback()
-    },
-    handleTabClick (key) {
-      this.customActiveKey = key
-      // this.form.resetFields()
+      callback();
     },
-    handleSubmit (e) {
-      e.preventDefault()
+    handleSubmit(e) {
+      const that = this;
+      e.preventDefault();
       const {
-        form: { validateFields },
+        form: { validateFieldsAndScroll },
         state,
         customActiveKey,
         Login
-      } = this
+      } = this;
 
-      state.loginBtn = true
+      state.loginBtn = true;
 
-      const validateFieldsKey = customActiveKey === 'tab1' ? ['username', 'password'] : ['mobile', 'captcha']
+      const validateFieldsAndScrollKey = customActiveKey === 'tab1' ? ['account', 'password'] : ['mobile', 'captcha'];
 
-      validateFields(validateFieldsKey, { force: true }, (err, values) => {
+      validateFieldsAndScroll(validateFieldsAndScrollKey, { force: true }, (err, values) => {
         if (!err) {
-          console.log('login form', values)
-          const loginParams = { ...values }
-          delete loginParams.username
-          loginParams[!state.loginType ? 'email' : 'username'] = values.username
-          loginParams.password = md5(values.password)
+          const loginParams = { ...values };
           Login(loginParams)
-            .then((res) => this.loginSuccess(res))
-            .catch(err => this.requestFailed(err))
-            .finally(() => {
-              state.loginBtn = false
+            .then(function(res) {
+              that.loginSuccess(res)
+            })
+            .catch(response => {
+              that.$notification['error']({
+                message: response.msg,
+                // description: response.msg,
+                duration: 4
+              })
             })
+            .finally(() => {
+              state.loginBtn = false;
+            });
         } else {
           setTimeout(() => {
-            state.loginBtn = false
-          }, 600)
+            state.loginBtn = false;
+          }, 600);
         }
-      })
-    },
-    getCaptcha (e) {
-      e.preventDefault()
-      const { form: { validateFields }, state } = this
-
-      validateFields(['mobile'], { force: true }, (err, values) => {
-        if (!err) {
-          state.smsSendBtn = true
-
-          const interval = window.setInterval(() => {
-            if (state.time-- <= 0) {
-              state.time = 60
-              state.smsSendBtn = false
-              window.clearInterval(interval)
-            }
-          }, 1000)
-
-          const hide = this.$message.loading('验证码发送中..', 0)
-          getSmsCaptcha({ mobile: values.mobile }).then(res => {
-            setTimeout(hide, 2500)
-            this.$notification['success']({
-              message: '提示',
-              description: '验证码获取成功,您的验证码为:' + res.result.captcha,
-              duration: 8
-            })
-          }).catch(err => {
-            setTimeout(hide, 1)
-            clearInterval(interval)
-            state.time = 60
-            state.smsSendBtn = false
-            this.requestFailed(err)
-          })
-        }
-      })
-    },
-    stepCaptchaSuccess () {
-      this.loginSuccess()
+      });
     },
-    stepCaptchaCancel () {
-      this.Logout().then(() => {
-        this.loginBtn = false
-        this.stepCaptchaVisible = false
-      })
-    },
-    loginSuccess (res) {
-      console.log(res)
-      this.$router.push({ name: 'dashboard' })
+    loginSuccess(res) {
+      this.$router.push({ name: 'Analysis' });
       // 延迟 1 秒显示欢迎信息
       setTimeout(() => {
         this.$notification.success({
           message: '欢迎',
           description: `${timeFix()},欢迎回来`
-        })
-      }, 1000)
+        });
+      }, 1000);
     },
-    requestFailed (err) {
+    requestFailed(err) {
       this.$notification['error']({
         message: '错误',
-        description: ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试',
+        description: ((err.response || {}).data || {}).m || '请求出现错误,请稍后再试',
         duration: 4
-      })
+      });
     }
   }
-}
+};
 </script>
-
 <style lang="less" scoped>
 .user-layout-login {
   label {
     font-size: 14px;
   }
 
-  .getCaptcha {
-    display: block;
-    width: 100%;
-    height: 40px;
-  }
-
   .forge-password {
     font-size: 14px;
   }
@@ -314,4 +167,4 @@ export default {
     }
   }
 }
-</style>
+</style>
\ No newline at end of file
diff --git a/src/views/user/Register.vue b/src/views/user/Register.vue
index 79be00cfa2..9648a62a63 100644
--- a/src/views/user/Register.vue
+++ b/src/views/user/Register.vue
@@ -211,8 +211,8 @@ export default {
     },
 
     handleSubmit () {
-      const { form: { validateFields }, state, $router } = this
-      validateFields({ force: true }, (err, values) => {
+      const { form: { validateFieldsAndScroll }, state, $router } = this
+      validateFieldsAndScroll({ force: true }, (err, values) => {
         if (!err) {
           state.passwordLevelChecked = false
           $router.push({ name: 'registerResult', params: { ...values } })
@@ -222,9 +222,9 @@ export default {
 
     getCaptcha (e) {
       e.preventDefault()
-      const { form: { validateFields }, state, $message, $notification } = this
+      const { form: { validateFieldsAndScroll }, state, $message, $notification } = this
 
-      validateFields(['mobile'], { force: true },
+      validateFieldsAndScroll(['mobile'], { force: true },
         (err, values) => {
           if (!err) {
             state.smsSendBtn = true
diff --git a/src/views/user/UserDetail.vue b/src/views/user/UserDetail.vue
new file mode 100644
index 0000000000..4114e007e0
--- /dev/null
+++ b/src/views/user/UserDetail.vue
@@ -0,0 +1,229 @@
+<template>
+  <a-modal :title="options.title" :width="750" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :destroyOnClose="destroyOnClose" :centered="centered" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item label="用户名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['name', requiredRule]" />
+        </a-form-item>
+        <a-form-item label="用户账号" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['account', requiredRule]" />
+        </a-form-item>
+        <a-form-item label="密码" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input type="password" placeholder="请输入密码" @blur="handleConfirmBlur" v-decorator="['password', {rules: [{ required: true, message: '至少6位密码,区分大小写'}, {validator: validateToNextPassword}]}]" />
+        </a-form-item>
+        <a-form-item label="确认密码" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input type="password" placeholder="请确认密码" v-decorator="['password2', {rules: [{ required: true, message: '请确认密码' }, {validator: compareToFirstPassword}]}]" />
+        </a-form-item>
+        <a-form-item label="用户角色" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-radio-group v-decorator="['roleId', requiredRule]" :options="roleList">
+          </a-radio-group>
+        </a-form-item>
+        <a-form-item label="分支中心" :labelCol="labelCol" :wrapperCol="wrapperCol" v-if="form.getFieldValue('roleId') == 2">
+          <a-select :placeholder="centerPlaceholder" showSearch v-decorator="['centerId', requiredRule]" optionFilterProp="label">
+            <a-select-option v-for="item in centerList" :key="item.value" :value="item.value" :label="item.label">{{item.label}}</a-select-option>
+          </a-select>
+        </a-form-item>
+        <a-form-item label="是否查看全部中心" :labelCol="labelCol" :wrapperCol="wrapperCol" v-if="form.getFieldValue('roleId') == 2">
+          <a-radio-group v-decorator="['purviewType', requiredRule]">
+            <a-radio value="1">是</a-radio>
+            <a-radio value="2">否</a-radio>
+          </a-radio-group>
+        </a-form-item>
+        <a-form-item label="状态" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-radio-group v-decorator="['status', requiredRule]">
+            <a-radio value="1">使用</a-radio>
+            <a-radio value="-1">停用</a-radio>
+          </a-radio-group>
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+import { saveDoctor, getRoleDataList, selectCenterDataList, getDoctorDetail } from '@/api/center'
+import moment from 'moment'
+import _ from 'lodash'
+export default {
+  data() {
+    return {
+      options: {},
+      maskClosable: false,
+      roleList: [],
+      centerList: [],
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 7 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 15 }
+      },
+      visible: false,
+      confirmLoading: false,
+      centered: true,
+      destroyOnClose: true,
+      bodyStyle: {
+        height: '500px',
+        overflow: 'auto'
+      },
+      form: this.$form.createForm(this),
+      requiredRule: { rules: [{ required: true, message: '该选项必填!' }] },
+      confirmDirty: false,
+      doctorId: undefined,
+      centerPlaceholder: '选择分支中心'
+    }
+  },
+  created() {
+    var that = this
+    getRoleDataList()
+      .then(res => {
+        that.roleList = _.map(res.data, function(v) {
+          return {
+            label: v.name,
+            value: v.id
+          }
+        })
+      })
+
+    selectCenterDataList()
+      .then(res => {
+        that.centerList = _.map(res.data, function(v) {
+          return {
+            label: v.name,
+            value: v.centerId
+          }
+        })
+      })
+  },
+  methods: {
+    add() {
+      this.options.title = '新建用户'
+      this.visible = true
+      this.doctorId = undefined
+    },
+    edit(value) {
+      this.options.title = '编辑用户'
+      this.doctorId = value.doctorId
+
+      const params = new URLSearchParams()
+      params.append('doctorId', value.doctorId)
+      getDoctorDetail(params).then(res => {
+        var data = res.data.doctor;
+        this.form.setFieldsValue({
+          name: data.name,
+          account: data.account,
+          password: data.password,
+          password2: data.password,
+          roleId: data.roleId,
+          status: String(data.status),
+          purviewType: String(data.purviewType)
+        })
+        this.$nextTick(() => {
+          if (this.form.getFieldValue('roleId') == 2) {
+            this.form.setFieldsValue({
+              centerId: data.centerId
+            })
+          }
+        })
+      })
+      this.visible = true
+    },
+    handleSubmit() {
+      this.confirmLoading = true;
+      this.form.validateFieldsAndScroll((errors, fieldsValue) => {
+        const that = this;
+        if (errors) {
+          this.confirmLoading = false
+          return
+        }
+        const values = {
+          ...fieldsValue,
+          doctorId: this.doctorId
+        };
+        if (this.doctorId) {
+            values.doctorId = this.doctorId
+        }
+        const params = new URLSearchParams()
+        params.append('doctorStr', JSON.stringify(values))
+        saveDoctor(params).then(res => {
+          that.visible = false
+          that.confirmLoading = false
+          that.$message.success(res.msg)
+          that.$emit('ok', values)
+        });
+      });
+    },
+    handleCancel() {
+      this.visible = false
+    },
+    handleConfirmBlur(e) {
+      const value = e.target.value;
+      this.confirmDirty = this.confirmDirty || !!value;
+    },
+    validateToNextPassword(rule, value, callback) {
+      if (value.length < 6) {
+        callback(new Error('至少6位密码'))
+      }
+      
+      let level = 0
+
+      // 判断这个字符串中有没有数字
+      if (/[0-9]/.test(value)) {
+        level++
+      }
+      // 判断字符串中有没有字母
+      if (/[a-zA-Z]/.test(value)) {
+        level++
+      }
+      // 判断字符串中有没有特殊符号
+      if (/[^0-9a-zA-Z_]/.test(value)) {
+        level++
+      }
+      if (level < 2) {
+        callback(new Error('密码强度不够'))
+      }
+
+      const form = this.form;
+      if (value && this.confirmDirty) {
+        form.validateFieldsAndScroll(['password2'], { force: true });
+      }
+      callback();
+    },
+    compareToFirstPassword(rule, value, callback) {
+      const form = this.form;
+      if (value && value !== form.getFieldValue('password')) {
+        callback('您两次输入的密码不一致!');
+      } else {
+        callback();
+      }
+    },
+    handlePasswordLevel(rule, value, callback) {
+      if (!value) callback()
+      let level = 0
+
+      // 判断这个字符串中有没有数字
+      if (/[0-9]/.test(value)) {
+        level++
+      }
+      // 判断字符串中有没有字母
+      if (/[a-zA-Z]/.test(value)) {
+        level++
+      }
+      // 判断字符串中有没有特殊符号
+      if (/[^0-9a-zA-Z_]/.test(value)) {
+        level++
+      }
+      if (level >= 2) {
+        callback()
+      } else {
+        callback(new Error('密码强度不够'))
+      }
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+/deep/ .ant-form-item:last-child {
+  margin-bottom: 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/user/list.vue b/src/views/user/list.vue
new file mode 100644
index 0000000000..4ba5ddcc97
--- /dev/null
+++ b/src/views/user/list.vue
@@ -0,0 +1,231 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索用户名称" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col :md="13" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="$refs.userDetail.add()">新增</a-button>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch()">全部用户</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="用户名称">
+                        <a-input v-model.trim="queryParam.userName" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="doctorId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <span slot="operation" slot-scope="text, record">
+        <template>
+          <a @click="handleReview(record)">编辑</a>
+          <a-divider type="vertical" />
+          <a @click="resetPwd(record)">重置密码</a>
+        </template>
+      </span>
+      <template slot="status" slot-scope="text">
+        <span v-if="text == 1">使用</span>
+        <span v-if="text == -1">停用</span>
+      </template>
+    </s-table>
+    <user-detail ref="userDetail" @ok="handleOk"></user-detail>
+    <!-- <a-spin :spinning="spinning"></a-spin> -->
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getDoctorDataList } from '@/api/center'
+import { resetPwd } from '@/api/patient'
+import { STable } from '@/components'
+import UserDetail from './UserDetail'
+export default {
+  components: {
+    STable,
+    UserDetail
+  },
+  data() {
+    return {
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      scroll: false,
+      loadData: parameter => {
+        return getDoctorDataList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      spinning: false,
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      columns: [{
+          title: '用户名称',
+          dataIndex: 'name',
+          width: '150px'
+        },
+        {
+          title: '账号',
+          dataIndex: 'account',
+          width: '150px'
+        },
+        {
+          title: '所属分支中心',
+          dataIndex: 'centerName',
+          width: '120px'
+        },
+        {
+          title: '状态',
+          dataIndex: 'status',
+          width: '120px',
+          scopedSlots: { customRender: 'status' }
+        },
+        {
+          title: '创建时间',
+          dataIndex: 'createTime',
+          customRender: createTime => moment(createTime).format('YYYY-MM-DD'),
+          width: '120px'
+        },
+        {
+          title: '操作',
+          dataIndex: 'operation',
+          scopedSlots: { customRender: 'operation' },
+          width: '100px'
+        }
+      ],
+    }
+  },
+  created() {
+    this.scroll = {
+      y: window.screen.height - 368 + 'px'
+    }
+  },
+  mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  },
+  methods: {
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    clearForm() {
+      this.queryParam = {}
+    },
+    tableSearch(type) {
+      this.queryParam.isUser = type
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    refreshTable() {
+      this.advanced = false
+      this.$refs.table.refresh()
+    },
+    handleReview(record) {
+      this.$refs.userDetail.edit(record)
+    },
+    handleOk() {
+      this.$refs.table.refresh()
+    },
+    resetPwd(record) {
+      var that = this
+      this.$confirm({
+        title: '确认重置密码?',
+        onOk() {
+          var params = new URLSearchParams()
+          params.append('doctorId', record.doctorId)
+          resetPwd(params)
+            .then(res => {
+              that.$message.success(res.msg)
+            }).catch(error => {
+              console.log(error)
+            })
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/wx/article.vue b/src/views/wx/article.vue
new file mode 100644
index 0000000000..01baa7315b
--- /dev/null
+++ b/src/views/wx/article.vue
@@ -0,0 +1,139 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.title" placeholder="搜索文章标题" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+            </a-form-item>
+          </a-col>
+          <a-col :md="13" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="handleReview">新增</a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="textId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <template slot="terminal" slot-scope="text">
+        <span v-if="text == 1">微信</span>
+        <span v-if="text == 2">官网</span>
+      </template>
+      <template slot="operation" slot-scope="text, record">
+        <a @click="handleReview(record)">编辑</a>
+      </template>
+    </s-table>
+
+    <article-detail ref="articleDetail" @ok="handleOk"></article-detail>
+  </a-card>
+</template>
+
+<script>
+  import moment from 'moment'
+  import { getWXList } from '@/api/text'
+  import { STable } from '@/components'
+  import ArticleDetail from './modules/ArticleDetail'
+  export default {
+    components: {
+      STable,
+      ArticleDetail
+    },
+    data() {
+      return {
+        bodyStyle: {
+          padding: '10px',
+          paddingBottom: '0px'
+        },
+        // 查询参数
+        queryParam: {},
+        scroll: false,
+        loadData: parameter => {
+          return getWXList(Object.assign(parameter, this.queryParam)).then(res => {
+            return res
+          })
+        },
+        selectedRowKeys: [],
+        selectedRows: [],
+        options: {
+          alert: {
+            show: false,
+            clear: () => {
+              this.selectedRowKeys = []
+            }
+          },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            onChange: this.onSelectChange
+          }
+        },
+        columns: [
+          {
+            title: '文章标题',
+            dataIndex: 'title',
+            width: '220px'
+          },
+          {
+            title: '文章发布人',
+            dataIndex: 'publisher',
+            width: '100px'
+          },
+          {
+            title: '发布终端',
+            dataIndex: 'terminal',
+            scopedSlots: { customRender: 'terminal' },
+            width: '100px'
+          },
+          {
+            title: '发布时间',
+            dataIndex: 'publishDate',
+            customRender: publishDate => moment(publishDate).format('YYYY-MM-DD'),
+            width: '150px'
+          },
+          {
+            title: '阅读量',
+            dataIndex: 'num',
+            width: '100px'
+          },
+          {
+            title: '操作',
+            dataIndex: 'operation',
+            scopedSlots: { customRender: 'operation' },
+            width: '100px'
+          }
+        ],
+      }
+    },
+    created() {
+      this.scroll = {
+        y: window.screen.height - 368 + 'px'
+      }
+    },
+    methods: {
+      onSelectChange(selectedRowKeys, selectedRows) {
+        this.selectedRowKeys = selectedRowKeys;
+        this.selectedRows = selectedRows;
+      },
+      refreshTable() {
+        this.$refs.table.refresh()
+      },
+      handleReview(recode) {
+        this.$refs.articleDetail.show(recode.textId)
+      },
+      handleOk() {
+        this.$refs.table.refresh()
+      }
+    },
+  }
+</script>
+
+<style lang="less" scoped>
+  /deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+    margin-bottom: 10px;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/wx/famousDoctor.vue b/src/views/wx/famousDoctor.vue
new file mode 100644
index 0000000000..2de543b2c0
--- /dev/null
+++ b/src/views/wx/famousDoctor.vue
@@ -0,0 +1,214 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索医生姓名" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col :md="13" style="text-align:right" :sm="24">
+            <a-button type="primary" @click="handleReview">新增</a-button>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch(1)">已启用医生</p>
+                    <p @click="tableSearch(0)">未启用医生</p>
+                    <p @click="tableSearch()">全部医生</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="医生姓名">
+                        <a-input v-model.trim="queryParam.doctorName" />
+                      </a-form-item>
+                      <a-form-item label="所属中心">
+                        <a-input v-model.trim="queryParam.centerName" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="doctorDetailId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <span slot="operation" slot-scope="text, record">
+        <template>
+          <a @click="handleReview(record)">编辑</a>
+        </template>
+      </span>
+    </s-table>
+    <doctor-detail ref="doctorDetail" @ok="handleOk"></doctor-detail>
+  </a-card>
+</template>
+
+<script>
+  import moment from 'moment'
+  import { getFamousDoctorList } from '@/api/famousDoctor'
+  import { STable } from '@/components'
+  import DoctorDetail from './modules/DoctorDetail'
+  export default {
+    components: {
+      STable,
+      DoctorDetail
+    },
+    data() {
+      return {
+        bodyStyle: {
+          padding: '10px',
+          paddingBottom: '0px'
+        },
+        // 高级搜索 展开/关闭
+        advanced: false,
+        // 查询参数
+        queryParam: {},
+        scroll: false,
+        loadData: parameter => {
+          return getFamousDoctorList(Object.assign(parameter, this.queryParam)).then(res => {
+            return res
+          })
+        },
+        selectedRowKeys: [],
+        selectedRows: [],
+        options: {
+          alert: {
+            show: false,
+            clear: () => {
+              this.selectedRowKeys = []
+            }
+          },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            onChange: this.onSelectChange
+          }
+        },
+        columns: [
+          {
+            title: '医生姓名',
+            dataIndex: 'doctorName',
+            width: '150px'
+          },
+          {
+            title: '职称',
+            dataIndex: 'job',
+            width: '120px'
+          },
+          {
+            title: '所属中心',
+            dataIndex: 'centerName',
+            width: '120px'
+          },
+          {
+            title: '是否启用',
+            dataIndex: 'useName',
+            width: '100px'
+          },
+          {
+            title: '创建人',
+            dataIndex: 'creatorName',
+            width: '150px'
+          },
+          {
+            title: '创建时间',
+            dataIndex: 'createDate',
+            customRender: createDate => moment(createDate).format('YYYY-MM-DD'),
+            width: '120px'
+          },
+          {
+            title: '操作',
+            dataIndex: 'operation',
+            scopedSlots: { customRender: 'operation' },
+            width: '100px'
+          }
+        ],
+      }
+    },
+    created() {
+      this.scroll = {
+        y: window.screen.height - 368 + 'px'
+      }
+    },
+    mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  },
+    methods: {
+      onSelectChange(selectedRowKeys, selectedRows) {
+        this.selectedRowKeys = selectedRowKeys;
+        this.selectedRows = selectedRows;
+      },
+      clearForm() {
+        this.queryParam = {}
+      },
+      tableSearch(type) {
+        this.queryParam.isUser = type
+        this.$refs.table.refresh()
+        this.advanced = false
+      },
+      refreshTable() {
+        this.advanced = false
+        this.$refs.table.refresh()
+      },
+      handleReview(recode) {
+        this.$refs.doctorDetail.show(recode.doctorDetailId)
+      },
+      handleOk() {
+        this.$refs.table.refresh()
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+  /deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+    margin-bottom: 10px;
+  }
+  .tableSearch {
+    background: #ffffff;
+    position: absolute;
+    top: 52px;
+    box-shadow: 4px 4px 10px #ddd;
+    z-index: 100;
+    /deep/ .ant-card-body .ant-form-horizontal .ant-form-item > .ant-form-item-label {
+      width: 70px !important;
+    }
+    .commonRetrieval {
+      padding: 10px;
+      p {
+        &:hover {
+          cursor: pointer;
+          text-decoration: underline;
+        }
+      }
+    }
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/wx/messageReply.vue b/src/views/wx/messageReply.vue
new file mode 100644
index 0000000000..297008c01b
--- /dev/null
+++ b/src/views/wx/messageReply.vue
@@ -0,0 +1,241 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索患者姓名、手机号" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs :style="{width: '250px'}" defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch()">全部</p>
+                    <p @click="tableSearch(1)">待答复</p>
+                    <p @click="tableSearch(3)">已答复</p>
+                  </div>
+                </a-tab-pane>
+                <!-- <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="姓名">
+                        <a-input v-model.trim="queryParam.name" />
+                      </a-form-item>
+                      <a-form-item label="身份证号">
+                        <a-input v-model.trim="queryParam.card" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right; margin-bottom: 0; margin-top: 15px">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane> -->
+              </a-tabs>
+            </div>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table
+      ref="table"
+      :scroll="scroll"
+      size="small"
+      rowKey="wxPatientId"
+      :columns="columns"
+      :data="loadData"
+      :alert="options.alert"
+      :rowSelection="options.rowSelection"
+      showPagination="auto"
+    >
+      <span slot="operation" slot-scope="text, record">
+        <template>
+          <a @click="handleReview(record)">答复</a>
+        </template>
+      </span>
+    </s-table>
+    <reply-view ref="replyView" @ok="handleOk"></reply-view>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getMessageDataList, getPatientMessageList } from '@/api/messageReply'
+import { STable } from '@/components'
+import $ from 'jquery'
+import replyView from './modules/replyView.vue'
+export default {
+  components: {
+    STable,
+    replyView
+  },
+  data () {
+    return {
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      scroll: false,
+      dataEchoInfo: {},
+      loadData: (parameter) => {
+        return getMessageDataList(Object.assign(parameter, this.queryParam)).then((res) => {
+          return res
+        })
+      },
+      form: this.$form.createForm(this),
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      columns: [
+        {
+          title: '患者姓名',
+          dataIndex: 'patientName',
+          width: 100
+        },
+        {
+          title: '手机号码',
+          dataIndex: 'telephone',
+          width: 120
+        },
+        {
+          title: '留言状态',
+          dataIndex: 'statusStr',
+          width: 100
+        },
+        {
+          title: '首次留言',
+          dataIndex: 'firstMessage',
+          width: 300,
+          ellipsis: true
+        },
+        {
+          title: '最新留言',
+          dataIndex: 'lastMessage',
+          width: 300,
+          ellipsis: true
+        },
+        {
+          title: '最新留言时间',
+          dataIndex: 'lastMessageTime',
+          customRender: (lastMessageTime) => moment(lastMessageTime).format('YYYY-MM-DD HH:mm:ss'),
+          width: 150
+        },
+        {
+          title: '操作',
+          dataIndex: 'operation',
+          scopedSlots: { customRender: 'operation' },
+          width: 60
+        }
+      ]
+    }
+  },
+  created () {
+    this.scroll = {
+      y: window.screen.height - 368 + 'px'
+    }
+  },
+  mounted () {
+    var that = this
+    $(document).on('click', function (e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if (
+        $(e.target).closest('.tableSearch').length == 0 &&
+        $(e.target).closest('.ant-calendar').length == 0 &&
+        $(e.target).closest('.ant-calendar-year-panel-table').length === 0 &&
+        $(e.target).closest('.ant-calendar-month-panel-table').length === 0
+      ) {
+        that.advanced = false
+      }
+    })
+  },
+  methods: {
+    onSelectChange (selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    },
+    clearForm () {
+      this.queryParam = {}
+    },
+    tableSearch (type) {
+      this.queryParam.replyStatus = type
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    refreshTable () {
+      this.advanced = false
+      this.$refs.table.refresh()
+    },
+    async handleReview (recode) {
+      const { data } = await getPatientMessageList(recode.patientCenterMessageId)
+      this.$refs.replyView.replyMessage(data)
+    },
+    handleOk () {
+      this.$refs.table.refresh()
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+/deep/ .ant-table-tbody td{
+  max-width: 300px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item > .ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+</style>
+
diff --git a/src/views/wx/modules/ArticleDetail.vue b/src/views/wx/modules/ArticleDetail.vue
new file mode 100644
index 0000000000..34afec4efd
--- /dev/null
+++ b/src/views/wx/modules/ArticleDetail.vue
@@ -0,0 +1,209 @@
+<template>
+  <a-modal :title="title" okText="发布" :width="800" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :centered="centered" :destroyOnClose="destroyOnClose" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item label="文章标题" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['title', requiredRule]" />
+        </a-form-item>
+        <a-form-item label="标题配图" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-upload v-decorator="[ 'url', { ...requiredRule, valuePropName: 'fileList', getValueFromEvent: normFile }]" :action="action" list-type="picture" @preview="handlePreview" :remove="handleRemove">
+            <a-button v-if="!fileName">
+              <a-icon type="upload" />点击上传
+            </a-button>
+          </a-upload>
+          <a-modal :visible="previewVisible" :footer="null" @cancel="previewVisible=false">
+            <img alt="example" style="width: 100%" :src="previewImage" />
+          </a-modal>
+        </a-form-item>
+        <!-- <a-form-item label="发布终端" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-radio-group v-model="terminal">
+            <a-radio value="1">微信</a-radio>
+          </a-radio-group>
+        </a-form-item> -->
+        <a-form-item label="模块类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-select style="width: 100%" v-decorator="['type', requiredRule]">
+            <a-select-option value="3">科普知识</a-select-option>
+            <a-select-option value="4">日常护理</a-select-option>
+            <a-select-option value="5">饮食健康</a-select-option>
+            <a-select-option value="6">注意事项</a-select-option>
+          </a-select>
+        </a-form-item>
+        <a-form-item label="文章发布人" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['publisher', requiredRule]" />
+        </a-form-item>
+        <a-form-item class="textarea" label="文章内容" :labelCol="labelCol" :wrapperCol="wrapperCol" style="margin-bottom: 0">
+          <quill-editor v-decorator="['text', { ...requiredRule, valuePropName: 'value', getValueFromEvent: normEditor }]" :options="editorOption"></quill-editor>
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { getArticleDetail, addOrEdit } from '@/api/text'
+  import { quillEditor, Quill } from 'vue-quill-editor'
+  import Video from '@/utils/quill-video.js'
+  import 'quill/dist/quill.snow.css'
+  import quillConfig from '@/utils/quillConfig'
+  Quill.register(Video, true)
+  export default {
+    components: {
+      quillEditor
+    },
+    data() {
+      return {
+        editorOption: quillConfig,
+        title: '',
+        bodyStyle: {
+          height: '500px',
+          overflow: 'auto'
+        },
+        maskClosable: false,
+        centered: true,
+        destroyOnClose: true,
+        visible: false,
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 }
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 17 }
+        },
+        requiredRule: { rules: [{ required: true, message: '该选项必填' }] },
+        textId: '',
+        previewVisible: false,
+        previewImage: '',
+        action: process.env.VUE_APP_API_UPLOAD_URL,
+        attachsPrefix: process.env.VUE_APP_API_VIEW_PIC_URL,
+        fileName: ''
+      }
+    },
+    methods: {
+      show(textId) {
+        this.visible = true;
+        this.textId = textId;
+
+        if (textId) {
+          this.confirmLoading = true
+          this.title = '修改文章'
+          const params = {
+            textId,
+            terminal: '1'
+          }
+          getArticleDetail(params).then(res => {
+            this.confirmLoading = false
+            this.form.setFieldsValue({
+              title: res.data.title,
+              type: String(res.data.type),
+              publisher: res.data.publisher,
+              text: res.data.text
+            });
+            if (res.data.url) {
+              this.form.setFieldsValue({
+                url: [{
+                  uid: '1',
+                  name: res.data.url,
+                  status: 'done',
+                  url: this.attachsPrefix + res.data.url
+                }],
+              })
+            }
+            this.fileName = res.data.url
+          })
+        } else {
+          this.title = '新增文章'
+          this.fileName = ''
+        }
+      },
+      handleChange(e) {
+        if (e.target.value) {
+          this.form.setFieldsValue({ type: '' })
+        }
+      },
+      normEditor(e) {
+        return e && e.html
+      },
+      normFile(e) {
+        if (Array.isArray(e)) {
+          return e;
+        }
+        const isJPG = e.file.type === 'image/jpeg';
+        const isPNG = e.file.type === 'image/png';
+        if (!(isJPG || isPNG)) {
+          this.$message.error('请上传正确的图片格式');
+        }
+        const isLt1M = e.file.size / 1024 / 1024 < 1;
+        if (!isLt1M) {
+          this.$message.error('图片大小不能超过1MB!');
+        }
+        if (e.file.status == 'done') {
+          this.fileName = e.file.response.fileName
+        }
+        if ((isJPG || isPNG) && isLt1M) {
+          return e && e.fileList;
+        }
+        return []
+      },
+      handleRemove(file) {
+        this.fileName = ''
+      },
+      handlePreview(file) {
+        this.previewImage = file.url || file.thumbUrl;
+        this.previewVisible = true;
+      },
+      handleSubmit() {
+        this.confirmLoading = true
+
+        const { form: { validateFieldsAndScroll } } = this;
+
+        validateFieldsAndScroll((errors, fieldsValue) => {
+          if (errors) {
+            this.confirmLoading = false;
+            return;
+          }
+
+          const params = new FormData()
+          const textWx = {
+            ...fieldsValue,
+            terminal: '1',
+            url: this.fileName
+          }
+          if (this.textId) {
+            textWx.textId = this.textId
+          }
+          params.append('entity', JSON.stringify(textWx))
+
+          addOrEdit(params).then(res => {
+            this.$message.success(res.msg);
+            this.visible = false
+            this.confirmLoading = false
+            this.$emit('ok')
+          })
+        })
+      },
+      handleCancel() {
+        this.visible = false
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+  .textarea {
+    /deep/.ant-form-item-control {
+      line-height: 1;
+    }
+  }
+  /deep/ .ql-editor {
+    height: 350px;
+  }
+  /deep/ .ql-video[type='file'] {
+    display: none;
+  }
+  /deep/ .ql-editor .ql-video {
+    width: 100%;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/wx/modules/CaseInfo.vue b/src/views/wx/modules/CaseInfo.vue
new file mode 100644
index 0000000000..6b51a2e8aa
--- /dev/null
+++ b/src/views/wx/modules/CaseInfo.vue
@@ -0,0 +1,128 @@
+<template>
+  <div class="patient">
+    <div class="patient-box">
+      <img src="../../../assets/woman.png" height="60px" v-if="patient.sex == 0" />
+      <img src="../../../assets/man.png" height="60px" v-else />
+      <div class="patient-info">
+        <span class="patient-name">{{ patient.name }}</span>
+        <span class="patient-age" :class="patient.sex == 0 ? 'womenBg' : ''">
+          <a-icon :type="patient.sex == 1 ? 'man':'woman'" />
+          {{getAge}}岁
+        </span>
+        <span class="patient-nation">{{patient.nationName}}</span>
+      </div>
+    </div>
+    <a-row>
+      <a-col :span="8">
+        <p>患者编号:{{patient.code}}</p>
+      </a-col>
+      <a-col :span="8">
+        <p>身份证号:{{patient.card}}</p>
+      </a-col>
+      <a-col :span="8">
+        <p>创建人:{{patient.creatorName}}</p>
+      </a-col>
+    </a-row>
+    <a-row>
+      <a-col :span="8">
+        <p>联系电话:{{patient.telephone1}}</p>
+      </a-col>
+      <a-col :span="8">
+        <p>所属中心:{{patient.centerName}}</p>
+      </a-col>
+      <a-col :span="8">
+        <p>创建时间:{{patient.createDate | moment}}</p>
+      </a-col>
+    </a-row>
+    <a-row>
+      <a-col :span="8">
+        <p>文化程度:{{patient.censusName}}</p>
+      </a-col>
+      <a-col :span="8">
+        <p>职业:{{patient.workName}}</p>
+      </a-col>
+      <a-col :span="8">
+        <p>家庭年收入:{{patient.income + '万元'}}</p>
+      </a-col>
+    </a-row>
+  </div>
+</template>
+
+<script>
+  import moment from 'moment'
+  export default {
+    props: ['patient'],
+    computed: {
+      getAge() {
+        var identityCard = this.patient.card
+        var len = (identityCard + '').length
+        var strBirthday = ''
+        if (len == 18) {
+          //处理18位的身份证号码从号码中得到生日和性别代码
+          strBirthday = identityCard.substr(6, 4) + '/' + identityCard.substr(10, 2) + '/' + identityCard.substr(12, 2)
+        }
+        if (len == 15) {
+          strBirthday =
+            '19' + identityCard.substr(6, 2) + '/' + identityCard.substr(8, 2) + '/' + identityCard.substr(10, 2)
+        }
+        //时间字符串里,必须是“/”
+        var birthDate = new Date(strBirthday)
+        var nowDateTime = new Date()
+        var age = nowDateTime.getFullYear() - birthDate.getFullYear()
+        //再考虑月、天的因素;.getMonth()获取的是从0开始的,这里进行比较,不需要加1
+        if (
+          nowDateTime.getMonth() < birthDate.getMonth() ||
+          (nowDateTime.getMonth() == birthDate.getMonth() && nowDateTime.getDate() < birthDate.getDate())
+        ) {
+          age--
+        }
+        return age
+      }
+    }
+  }
+</script>
+<style lang="less" scoped>
+  .patient {
+    border: 1px solid rgba(22, 143, 253, 0.15);
+    background: #f5f9fd;
+    padding: 15px 20px;
+    .patient-box {
+      border-bottom: 1px dashed rgba(22, 143, 253, 0.15);
+      padding-bottom: 15px;
+      margin-bottom: 15px;
+      display: flex;
+      .patient-info {
+        flex: 1;
+        display: flex;
+        align-items: center;
+        span {
+          height: 24px;
+          line-height: 24px;
+          font-size: 14px;
+          margin-left: 15px;
+        }
+        .patient-name {
+          font-size: 20px;
+        }
+        .womenBg {
+          background-color: #fd94dc !important;
+        }
+        .patient-age {
+          color: #fff;
+          background-color: #96dcfd;
+          padding: 0px 10px;
+          border-radius: 3px;
+        }
+        .patient-nation {
+          background-color: #e8e8e8;
+          padding: 0px 10px;
+          border-radius: 3px;
+          margin-left: 10px;
+        }
+      }
+    }
+    p {
+      font-size: 14px;
+    }
+  }
+</style>
diff --git a/src/views/wx/modules/DoctorDetail.vue b/src/views/wx/modules/DoctorDetail.vue
new file mode 100644
index 0000000000..4eee932289
--- /dev/null
+++ b/src/views/wx/modules/DoctorDetail.vue
@@ -0,0 +1,252 @@
+<template>
+  <a-modal :title="title" okText="保存" :width="800" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :centered="centered" :destroyOnClose="destroyOnClose" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item label="医生姓名" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['doctorName', requiredRule]" placeholder="请输入医生姓名" />
+        </a-form-item>
+        <a-form-item label="头像上传" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-upload v-decorator="[ 'url', { ...requiredRule, valuePropName: 'fileList', getValueFromEvent: normFile }]" :action="action" list-type="picture" @preview="handlePreview" :remove="handleRemove">
+            <a-button v-if="!fileName">
+              <a-icon type="upload" />点击上传
+            </a-button>
+          </a-upload>
+          <a-modal :visible="previewVisible" :footer="null" @cancel="previewVisible=false">
+            <img alt="example" style="width: 100%" :src="previewImage" />
+          </a-modal>
+        </a-form-item>
+        <a-form-item label="职称" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['job', requiredRule]" placeholder="请输入职称" />
+        </a-form-item>
+        <a-form-item label="科室" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['department', requiredRule]" placeholder="请输入科室" />
+        </a-form-item>
+        <a-form-item label="所属中心" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-select v-decorator="['centerId',  requiredRule]" placeholder="请选择所属中心">
+            <template v-for="item in centerList">
+              <a-select-option :value="item.centerId" :key="item.centerId">{{item.name}}</a-select-option>
+            </template>
+          </a-select>
+        </a-form-item>
+        <a-form-item label="医生标签" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <input-tag placeholder="添加标签" v-model="markDetail" :beforeAdding="beforeAdding" :add-tag-on-blur="true" :limit="4"></input-tag>
+        </a-form-item>
+        <a-form-item class="textarea" label="医生简介" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-textarea rows="5" v-decorator="['detail', requiredRule]" placeholder="请输入医生简介" />
+        </a-form-item>
+        <a-form-item label="擅长领域" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-textarea rows="3" v-decorator="['disease', requiredRule]" placeholder="请输入擅长领域" />
+        </a-form-item>
+        <a-form-item class="textarea" label="获得荣誉" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-textarea rows="5" v-decorator="['honor', requiredRule]" placeholder="请输入获得荣誉" />
+        </a-form-item>
+        <a-form-item label="是否启用" :labelCol="labelCol" :wrapperCol="wrapperCol" style="margin-bottom:0">
+          <a-radio-group v-decorator="['isUser', requiredRule]">
+            <a-radio value="1">启用</a-radio>
+            <a-radio value="0">停用</a-radio>
+          </a-radio-group>
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { getDoctorDetail, saveDoctor, getCenter } from '@/api/famousDoctor'
+  import InputTag from 'vue-input-tag'
+  export default {
+    data() {
+      return {
+        markDetail: [],
+        title: '',
+        bodyStyle: {
+          height: '500px',
+          overflow: 'auto'
+        },
+        maskClosable: false,
+        centered: true,
+        destroyOnClose: true,
+        visible: false,
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 }
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 17 }
+        },
+        requiredRule: { rules: [{ required: true, message: '该选项必填' }] },
+        doctorId: '',
+        centerList: [],
+        creatorId: '',
+        previewVisible: false,
+        previewImage: '',
+        action: process.env.VUE_APP_API_UPLOAD_URL,
+        attachsPrefix: process.env.VUE_APP_API_VIEW_PIC_URL,
+        fileName: ''
+      }
+    },
+    mounted() {
+      this.getCenterList()
+    },
+    components: {
+      'input-tag': InputTag
+    },
+    methods: {
+      beforeAdding(val) {
+        if (val.length >= 8) {
+          return false
+        } else {
+          return val
+        }
+      },
+      show(id) {
+        this.visible = true
+
+        this.doctorId = id
+
+        if (id) {
+          this.title = '修改医生信息'
+          this.confirmLoading = true
+
+          const params = new FormData()
+          params.append('doctorDetailId', id)
+          getDoctorDetail(params).then(res => {
+            this.confirmLoading = false
+
+            this.creatorId = res.data.doctorDetail.creatorId
+            this.markDetail = res.data.doctorDetail.markDetail && res.data.doctorDetail.markDetail.split(',')
+            this.form.setFieldsValue({
+              doctorName: res.data.doctorDetail.doctorName,
+              job: res.data.doctorDetail.job,
+              department: res.data.doctorDetail.department,
+              centerId: res.data.doctorDetail.centerId,
+              detail: res.data.doctorDetail.detail,
+              disease: res.data.doctorDetail.disease,
+              honor: res.data.doctorDetail.honor,
+              isUser: String(res.data.doctorDetail.isUser)
+            });
+            // if (res.data.doctorDetail.url) {
+            if (res.data.annexList[0].annexAddress) {
+              this.form.setFieldsValue({
+                url: [{
+                  uid: '1',
+                  // name: res.data.doctorDetail.url,
+                  name: res.data.annexList[0].annexAddress,
+                  status: 'done',
+                  // url: this.attachsPrefix + res.data.doctorDetail.url
+                  url: this.attachsPrefix + res.data.annexList[0].annexAddress
+                }],
+              })
+              // this.fileName = res.data.doctorDetail.url
+              this.fileName = res.data.annexList[0].annexAddress
+            }
+          })
+        } else {
+          this.title = '新增医生信息'
+          this.fileName = ''
+        }
+      },
+      getCenterList() {
+        getCenter().then(res => {
+          this.centerList = res.data.centerList
+        })
+      },
+      normFile(e) {
+        if (Array.isArray(e)) {
+          return e;
+        }
+        const isJPG = e.file.type === 'image/jpeg';
+        const isPNG = e.file.type === 'image/png';
+        if (!(isJPG || isPNG)) {
+          this.$message.error('请上传正确的图片格式');
+        }
+        const isLt1M = e.file.size / 1024 / 1024 < 1;
+        if (!isLt1M) {
+          this.$message.error('图片大小不能超过1MB!');
+        }
+        if (e.file.status == 'done') {
+          this.fileName = e.file.response.fileName
+        }
+        if ((isJPG || isPNG) && isLt1M) {
+          return e && e.fileList;
+        }
+        return []
+      },
+      handleRemove(file) {
+        this.fileName = ''
+      },
+      handlePreview(file) {
+        this.previewImage = file.url || file.thumbUrl;
+        this.previewVisible = true;
+      },
+      handleSubmit() {
+        this.confirmLoading = true
+
+        const { form: { validateFieldsAndScroll } } = this;
+
+        validateFieldsAndScroll((errors, fieldsValue) => {
+          if (errors) {
+            this.confirmLoading = false;
+            return;
+          }
+
+          const params = new FormData()
+          const doctorDetail = {
+            markDetail: this.markDetail.join(','),
+            doctorName: fieldsValue['doctorName'],
+            job: fieldsValue['job'],
+            department: fieldsValue['department'],
+            centerId: fieldsValue['centerId'],
+            detail: fieldsValue['detail'],
+            disease: fieldsValue['disease'],
+            honor: fieldsValue['honor'],
+            isUser: Number(fieldsValue['isUser'])
+          }
+
+          if (this.doctorId) {
+            doctorDetail.doctorDetailId = this.doctorId
+            doctorDetail.creatorId = this.creatorId
+          }
+          params.append('doctorDetail', JSON.stringify(doctorDetail))
+          params.append('fileName', this.fileName)
+
+          saveDoctor(params).then(res => {
+            this.$message.success(res.msg);
+            this.visible = false
+            this.confirmLoading = false
+            this.$emit('ok')
+          })
+        })
+      },
+      handleCancel() {
+        this.visible = false
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+  .textarea {
+    /deep/.ant-form-item-control {
+      line-height: 1;
+    }
+  }
+
+  .vue-input-tag-wrapper {
+    border-color: #d9d9d9;
+    border-radius: 5px;
+    line-height: 1.5;
+  }
+
+  /deep/ .vue-input-tag-wrapper .new-tag {
+    padding-left: 5px;
+    margin-top: 0;
+    line-height: normal;
+    &::placeholder {
+      color: #ccc;
+    }
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/wx/modules/ReportDetail.vue b/src/views/wx/modules/ReportDetail.vue
new file mode 100644
index 0000000000..962cb700f2
--- /dev/null
+++ b/src/views/wx/modules/ReportDetail.vue
@@ -0,0 +1,115 @@
+<template>
+  <a-modal title="患者报告审阅" okText="审阅" :width="800" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :centered="centered" :destroyOnClose="destroyOnClose" :visible="visible" :confirmLoading="confirmLoading" :okButtonProps="{ props: {disabled: !isSee} }" @ok="handleSubmit" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item label="报告标题" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-input v-decorator="['reportTitle']" readOnly />
+        </a-form-item>
+        <a-form-item label="报告详情" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-textarea rows="3" v-decorator="['reprotDescription']" readOnly />
+        </a-form-item>
+        <a-form-item label="上报时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-date-picker style="width: 100%" format="YYYY-MM-DD" v-decorator="['uploadDate']" disabled />
+        </a-form-item>
+        <a-form-item label="报告附件" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <viewer class="img-list" :images="imgList">
+            <img v-for="item in imgList" :src="`${attachsPrefix}${item.annexAddress}`" :key="item.annexAddress" height="150px">
+          </viewer>
+        </a-form-item>
+        <a-form-item v-if="isSee" label="反馈意见" :labelCol="labelCol" :wrapperCol="wrapperCol" style="margin-bottom:0">
+          <a-textarea rows="3" v-decorator="['feedback', requiredRule]" />
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import moment from 'moment'
+  import { getReportInfo, updateReport } from '@/api/reportCheck'
+  export default {
+    data() {
+      return {
+        bodyStyle: {
+          height: '550px',
+          overflow: 'auto'
+        },
+        maskClosable: false,
+        centered: true,
+        destroyOnClose: true,
+        visible: false,
+        confirmLoading: false,
+        isSee: false,
+        checkId: '',
+        form: this.$form.createForm(this),
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 4 }
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 18 }
+        },
+        requiredRule: { rules: [{ required: true, message: '该选项必填' }] },
+        attachsPrefix: '',
+        imgList: []
+      }
+    },
+    methods: {
+      show(id, isSee) {
+        this.visible = true;
+        this.checkId = id
+        this.isSee = isSee
+
+        this.confirmLoading = true
+
+        const params = new FormData()
+        params.append('checkId', id)
+        getReportInfo(params).then(res => {
+          this.confirmLoading = false
+          this.imgList = res.data.annexList
+          this.attachsPrefix = res.data.attachsPrefix
+
+          this.form.setFieldsValue({
+            reportTitle: res.data.reportCheck.reportTitle,
+            reprotDescription: res.data.reportCheck.reprotDescription,
+            uploadDate: moment(res.data.reportCheck.uploadDate, 'x'),
+            feedback: res.data.reportCheck.feedback
+          });
+        })
+      },
+      handleSubmit() {
+        this.confirmLoading = true
+        const { form: { validateFieldsAndScroll } } = this;
+        validateFieldsAndScroll((errors, fieldsValue) => {
+          if (errors) {
+            this.confirmLoading = false;
+            return;
+          }
+          const params = new FormData()
+          params.append('checkId', this.checkId)
+          params.append('feedback', fieldsValue['feedback'])
+          updateReport(params).then(res => {
+            this.$message.success(res.msg);
+            this.visible = false
+            this.confirmLoading = false
+            this.$emit('ok')
+          })
+        })
+      },
+      handleCancel() {
+        this.visible = false
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+  .img-list img {
+    display: inline-block;
+    width: calc(25% - 5px);
+    margin-right: 5px;
+    margin-bottom: 5px;
+    cursor: pointer;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/wx/modules/UserDetail.vue b/src/views/wx/modules/UserDetail.vue
new file mode 100644
index 0000000000..bd83568f85
--- /dev/null
+++ b/src/views/wx/modules/UserDetail.vue
@@ -0,0 +1,151 @@
+<template>
+  <a-modal title="微信用户绑定" okText="绑定" :width="800" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :centered="centered" :destroyOnClose="destroyOnClose" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <div class="patientDetail-box">
+        <a-divider orientation="left">微信用户信息</a-divider>
+        <div class="patient">
+          <a-row>
+            <a-col :span="8">
+              <p>患者姓名:{{userInfo.name}}</p>
+            </a-col>
+            <a-col :span="8">
+              <p>微信号:{{userInfo.wxCode}}</p>
+            </a-col>
+            <a-col :span="8">
+              <p>手机号码:{{userInfo.telephone}}</p>
+            </a-col>
+          </a-row>
+          <a-row>
+            <a-col :span="8">
+              <p>微信昵称:{{userInfo.wxName}}</p>
+            </a-col>
+            <a-col :span="8">
+              <p>身份证号:{{userInfo.card}}</p>
+            </a-col>
+            <a-col :span="8">
+              <p>注册时间:{{userInfo.registeredDate}}</p>
+            </a-col>
+          </a-row>
+        </div>
+
+        <a-divider orientation="left">患者病例信息</a-divider>
+        <div v-if="code == 0">
+          <case-info :patient="patient"></case-info>
+        </div>
+        <div v-else-if="code == -1" class="tip">未查询到该患者病例,是否<span class="add" @click="$refs.createModal.add()">新增患者病例</span>?</div>
+        <div v-else-if="code == 1" class="tip">该患者病例不在本分支中心,请进行病例转移申请</div>
+      </div>
+      <create-form ref="createModal" @ok="handleOk" />
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { wxPatientReview, wxBind } from '@/api/distract'
+  import CaseInfo from './CaseInfo'
+  import CreateForm from '../../list/modules/CreateForm';
+  export default {
+    components: {
+      CaseInfo,
+      CreateForm
+    },
+    data() {
+      return {
+        bodyStyle: {
+          height: '500px',
+          paddingTop: '0',
+          overflow: 'auto'
+        },
+        maskClosable: false,
+        centered: true,
+        destroyOnClose: true,
+        visible: false,
+        confirmLoading: false,
+        userInfo: {},
+        patient: {},
+        code: 0
+      }
+    },
+    methods: {
+      handleOk() {
+        this.show(this.userInfo)
+      },
+      show(recode) {
+        this.visible = true;
+        this.confirmLoading = true
+        this.patient = {}
+        this.userInfo = recode
+
+        const params = new FormData()
+        params.append('card', recode.card)
+        wxPatientReview(params).then(res => {
+          this.confirmLoading = false
+          this.code = res.code
+          if (res.code == 0) {
+            this.patient = res.data
+          }
+        })
+      },
+      handleSubmit() {
+        if (JSON.stringify(this.patient) == '{}') {
+          this.$message.error('患者病例信息为空无法绑定!');
+          return
+        }
+        this.confirmLoading = true
+        const params = new FormData()
+        params.append('patientId', this.patient.patientId)
+        params.append('wxPatient', JSON.stringify(this.userInfo))
+        wxBind(params).then(res => {
+          this.visible = false
+          this.confirmLoading = false
+          this.$message.success(res.msg)
+          this.$emit('ok')
+        })
+      },
+      handleCancel() {
+        this.visible = false
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+  /deep/ .ant-divider-horizontal.ant-divider-with-text-left {
+    color: #1890ff;
+  }
+
+  .patientDetail-box {
+    font-size: 18px;
+    .title {
+      height: 40px;
+      line-height: 40px;
+      font-size: 18px;
+      padding-left: 15px;
+      margin-bottom: 15px;
+      background-color: #fafafa;
+    }
+    .patient {
+      border: 1px solid rgba(22, 143, 253, 0.15);
+      background: #f5f9fd;
+      padding: 15px 25px;
+      p {
+        text-overflow: ellipsis;
+        overflow: hidden;
+        white-space: nowrap;
+        font-size: 14px;
+      }
+    }
+    .tip {
+      height: 100px;
+      line-height: 100px;
+      font-size: 16px;
+      text-align: center;
+      color: rgba(0, 0, 0, 0.45);
+      .add {
+        cursor: pointer;
+        color: rgba(24, 144, 255, 0.8);
+        font-size: inherit;
+      }
+    }
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/wx/modules/replyView.vue b/src/views/wx/modules/replyView.vue
new file mode 100644
index 0000000000..cd635e94f1
--- /dev/null
+++ b/src/views/wx/modules/replyView.vue
@@ -0,0 +1,217 @@
+<template>
+  <a-modal title="留言答复" :width="800" :bodyStyle="bodyStyle" :maskClosable="maskClosable" :destroyOnClose="destroyOnClose" :centered="centered" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel" ref="modal">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <div class="replyList" ref="content" id="content">
+          <div v-for="(item, index) in messageRecords" :key="index">
+            <div v-if="item.type == 1" class="patient">
+              <p class="time">{{ item.createTime | formDate }}</p>
+              <div class="item clearfix">
+                <img src="../../../assets/p-a.png" alt="">
+                <div class="info">
+                  <div class="clearfix">
+                    <p class="code">{{ patientCenterMessage.patientCode }}</p>
+                    <p class="cus">患者</p>
+                  </div>
+                  <p class="question">{{ item.content }}</p>
+                </div>
+              </div>
+            </div>
+            <div v-if="item.type == 2" class="reply">
+              <p class="time">{{ item.createTime | formDate }}</p>
+              <div class="item clearfix">
+                <img src="../../../assets/h-a.png" alt="">
+                <div class="info">
+                  <div class="clearfix">
+                    <p class="name">{{ patientCenterMessage.centerName }}</p>
+                    <p class="cus">医院</p>
+                  </div>
+                  <p class="question">{{ item.content }}</p>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div style="margin:20px;">
+          <a-form-item hasFeedback>
+            <a-textarea class="textarea" style="top: 2px;" :rows="4" v-decorator="['content', {rules: [{required: true, message: '请输入回复内容'}]}]" placeholder="请输入回复....." autocomplete="off"></a-textarea>
+          </a-form-item>
+        </div>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+<script>
+import { replyMessageData } from '@/api/messageReply'
+import moment from 'moment'
+export default {
+  data() {
+    return {
+      bodyStyle: {
+        height: '600px',
+        overflow: 'auto'
+      },
+      maskClosable: false,
+      destroyOnClose: true,
+      centered: true,
+      visible: false,
+      confirmLoading: false,
+      patientCenterMessageId: null,
+      messageRecords: [],
+      patientCenterMessage: {},
+      form: this.$form.createForm(this)
+    }
+  },
+  filters: {
+    formDate(date) {
+      return moment(date).format('YYYY-MM-DD HH:mm:ss')
+    }
+  },
+  updated() {
+    const msg = document.getElementById('content')
+    msg.scrollTop = msg.scrollHeight
+  },
+  methods: {
+    replyMessage(data) {
+      this.patientCenterMessageId = data.patientCenterMessage.patientCenterMessageId
+      this.messageRecords = data.messageRecords
+      this.patientCenterMessage = data.patientCenterMessage
+      this.visible = true
+    },
+    handleSubmit() {
+      if (!this.confirmLoading) {
+        this.confirmLoading = true
+        this.form.validateFieldsAndScroll((errors, fieldsValue) => {
+          const that = this
+          if (errors) {
+            this.confirmLoading = false
+            return
+          }
+          const values = {
+            content: fieldsValue.content,
+            patientCenterMessageId: this.patientCenterMessageId
+          }
+          replyMessageData(values).then((res) => {
+            that.visible = false
+            that.confirmLoading = false
+            that.$message.success(res.msg)
+            that.$emit('ok', values)
+          })
+        })
+      }
+    },
+    handleCancel() {
+      this.visible = false
+      //   this.$parent.refreshTable()
+      this.$emit('refreshTable')
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+.replyList {
+  margin: 20px 10px;
+  max-height: 380px;
+  overflow: auto;
+  padding-right: 15px;
+
+  .time {
+    text-align: center;
+  }
+
+  .patient {
+    margin-bottom: 30px;
+    .item {
+      img {
+        float: left;
+      }
+
+      .info {
+        float: left;
+        margin-left: 4px;
+        width: calc(100% - 100px);
+        .name{
+          font-size: 16px;
+          color: black;
+          float: left;
+          margin-bottom: 0;
+        }
+        .code{
+          background-color: #1890ff;
+          border-radius: 4px;
+          margin-left: 6px;
+          font-size: 12px;
+          padding: 3px 8px;
+          float: left;
+          color: #fff;
+          margin-bottom: 0;
+        }
+        .cus{
+          background-color: #f6b42d;
+          border-radius: 4px;
+          margin-left: 6px;
+          font-size: 12px;
+          padding: 3px 8px;
+          float: left;
+          color: #fff;
+          margin-bottom: 0;
+        }
+        .question{
+          background-color: #f2f3f4;
+          max-width: 70%;
+          border-radius: 3px;
+          padding: 12px;
+          line-height: 15px;
+          word-wrap: break-word;
+          word-break: normal;
+          margin-bottom: 0;
+          margin-top: 10px;
+        }
+      }
+    }
+  }
+  .reply{
+    margin-bottom: 30px;
+    .item {
+      img {
+        float: right;
+      }
+
+      .info {
+        float: right;
+        margin-right: 6px;
+        width: calc(100% - 100px);
+        .name{
+          font-size: 16px;
+          color: black;
+          float: right;
+          margin-bottom: 0;
+        }
+        .cus{
+          background-color: #0fd085;
+          border-radius: 4px;
+          margin-right: 6px;
+          font-size: 12px;
+          padding: 3px 8px;
+          float: right;
+          color: #fff;
+          margin-bottom: 0;
+        }
+        .question{
+          background-color: #1890ff;
+          width: 70%;
+          border-radius: 3px;
+          padding: 12px;
+          line-height: 15px;
+          word-wrap: break-word;
+          word-break: normal;
+          float: right;
+          color: #fff;
+          margin-bottom: 0;
+          margin-top: 10px;
+        }
+      }
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/wx/patientReportReview.vue b/src/views/wx/patientReportReview.vue
new file mode 100644
index 0000000000..c086f0401a
--- /dev/null
+++ b/src/views/wx/patientReportReview.vue
@@ -0,0 +1,230 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索患者姓名、身份证号" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch(3)">全部报告</p>
+                    <p @click="tableSearch(1)">待审阅报告</p>
+                    <p @click="tableSearch(2)">已审阅报告</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="入组编号">
+                        <a-input v-model.trim="queryParam.fileBasisCode" />
+                      </a-form-item>
+                      <a-form-item label="姓名">
+                        <a-input v-model.trim="queryParam.name" />
+                      </a-form-item>
+                      <a-form-item label="身份证号">
+                        <a-input v-model.trim="queryParam.card" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="checkId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <template slot="patientName" slot-scope="text,record">
+        <p>{{modifyName(text)}}</p>
+      </template>
+      <template slot="executeStatus" slot-scope="text">
+        <a-badge :status="text == 0 ? 'default' : 'success'" :text="text == 0 ? '待审阅' : '已审阅'" />
+      </template>
+      <span slot="operation" slot-scope="text, record">
+        <template>
+          <a v-if="record.executeStatus == 0" @click="handleReview(record, true)">审阅</a>
+          <span v-else>审阅</span>
+          <a-divider type="vertical" />
+          <a @click="handleReview(record, false)">查看</a>
+        </template>
+      </span>
+    </s-table>
+    <report-detail ref="reportDetail" @ok="handleOk"></report-detail>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getReportDataList } from '@/api/reportCheck'
+import { STable } from '@/components'
+import ReportDetail from './modules/ReportDetail'
+import $ from 'jquery'
+
+export default {
+  components: {
+    STable,
+    ReportDetail
+  },
+  data() {
+    return {
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      scroll: false,
+      loadData: parameter => {
+        return getReportDataList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      columns: [{
+          title: '入组编号',
+          dataIndex: 'fileBasisCode',
+          width: '120px'
+        },
+        {
+          title: '微信号',
+          dataIndex: 'wxCode',
+          width: '120px'
+        },
+        {
+          title: '姓名',
+          dataIndex: 'name',
+          width: '100px',
+          scopedSlots: { customRender: 'patientName' }
+        },
+        {
+          title: '身份证号',
+          dataIndex: 'card',
+          width: '150px'
+        },
+        {
+          title: '上报时间',
+          dataIndex: 'uploadDate',
+          customRender: uploadDate => moment(uploadDate).format('YYYY-MM-DD'),
+          width: '120px'
+        },
+        {
+          title: '审阅状态',
+          dataIndex: 'executeStatus',
+          scopedSlots: { customRender: 'executeStatus' },
+          width: '100px'
+        },
+        {
+          title: '操作',
+          dataIndex: 'operation',
+          scopedSlots: { customRender: 'operation' },
+          width: '120px'
+        }
+      ],
+    }
+  },
+  created() {
+    this.scroll = {
+      y: window.screen.height - 368 + 'px'
+    }
+  },
+  mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  },
+  methods: {
+    modifyName(name) {
+      return name.replace(/(.)(.*)/, (_, $1, $2) => $1 + '*'.repeat($2.length))
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    clearForm() {
+      this.queryParam = {}
+    },
+    tableSearch(type) {
+      this.queryParam.queryType = type
+      this.$refs.table.refresh();
+      this.advanced = false
+    },
+    refreshTable() {
+      this.advanced = false
+      this.$refs.table.refresh()
+    },
+    handleReview(recode, isSee) {
+      this.$refs.reportDetail.show(recode.checkId, isSee)
+    },
+    handleOk() {
+      this.$refs.table.refresh()
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/wx/questionDetail.vue b/src/views/wx/questionDetail.vue
new file mode 100644
index 0000000000..15ddf64fc7
--- /dev/null
+++ b/src/views/wx/questionDetail.vue
@@ -0,0 +1,328 @@
+<template>
+  <div id="baselineInfo" class="page-header-index-wide page-header-wrapper-grid-content-main" style="height:100%;">
+    <a-spin :spinning="isLoading" style="height:100%">
+      <div style="flex: 1;display: flex;flex-direction: column;">
+        <a-card :bordered="false" id="baselineHeader" style="background-color: #0399EC;color:#FFFFFF;">
+          <a-row :gutter="30" style="line-height: 34px;">
+            <a-col :md="1" :sm="4">
+              <a-icon type="left" style="fontSize:18px;cursor: pointer;" @click="$router.back(-1)" />
+            </a-col>
+            <a-col :md="5" :sm="20" class="UserNameCard">
+              <my-icon type="iconshoufangzhehuaban" />
+              受访者:{{ info.name }}
+            </a-col>
+            <a-col :md="6" :sm="24" class="UserNameCard">
+              <my-icon type="iconshenfenzhenghuaban" />
+              身份证号:{{ info.card }}
+            </a-col>
+            <a-col :md="12" :sm="24" style="fontSize:18px;textAlign: right;">创建时间:{{ info.createDate }}</a-col>
+          </a-row>
+        </a-card>
+        <!-- <a-card :bordered="false" style="margin-top: 10px"> -->
+        <a-row style="flex: 1;background: #fff;margin-top: 15px;overflow: hidden;">
+          <a-col :span="5" :style="baselineInfoStyle">
+            <ul class="menu">
+              <template v-for="item in orgTree">
+                <li class="menu-item" :class="{'active':item.questionTaskId == questionTaskId}" :key="item.questionTaskId" @click="handleChange(item.questionTaskId)">{{item.questionName}}</li>
+              </template>
+            </ul>
+          </a-col>
+          <a-col :span="19" style="height: 100%; display: flex; flex-direction: column;">
+            <div class="head-bar">
+              <a-row type="flex">
+                <span class="head-icon"></span>
+                <div v-if="question.name" class="question-title">{{question.name}}</div>
+                <span v-if="(score) && (questionTask.questionId !== 36)" class="question-score">{{`(得分:${score}分)`}}</span>
+                <span v-if="(score) && (questionTask.questionId === 36) && (!questionTask.score9)" class="question-score">{{`(得分:${score}分)`}}</span>
+                <span v-if="(score) && (questionTask.questionId === 36) && (questionTask.score9)" class="question-score">{{`(HADS-A得分:${questionTask.score}分;`}}<span v-if="questionTask.score9">{{` HADS-D得分:${questionTask.score9}分`}}</span>)</span>
+              </a-row>
+              <span v-if="showBtnState == 3">已驳回</span>
+              <span v-else-if="showBtnState == 4">已审批</span>
+              <a-row v-else>
+                <a-button class="btn fr" type="primary" @click="save(4)">通过</a-button>
+                <a-button class="btn fr" @click="save(3)">不通过</a-button>
+              </a-row>
+            </div>
+            <div class="baselineForm">
+              <!-- 调查问卷 -->
+              <div v-if="question.remark" class="question-des"><span style="color:#3398dc">说明:</span>{{question.remark}}</div>
+              <a-form :form="form">
+                <div v-for="item in questionList" :key="item.id">
+                  <div class="question-t">
+                    <span class="question-icon"></span>
+                    <span>{{item.name}}</span>
+                  </div>
+                  <a-form-item v-for="(qu1, index) in item.childrens" :key="index" :colon="false" :label="qu1.type !== 5 ? qu1.name : ''">
+                    <div v-if="qu1.type == 5" class="question-tip">
+                      <span class="tip-icon"></span>
+                      <span>{{qu1.name}}</span>
+                    </div>
+                    <a-input v-if="qu1.type === 3" style="width: 200px" :addonAfter="qu1.unit" :name="qu1.questionTitleId+''" :defaultValue="qu1.answers && qu1.answers.length && qu1.answers[0].questionOptionValue" readOnly />
+                    <a-radio-group v-if="qu1.type === 1" :name="qu1.questionTitleId+''" v-model="qu1.inputType">
+                      <a-radio :style="disBlock" v-for="(item, index) in qu1.options" :key="index" :value="item.questionOptionId" disabled>{{item.name}}</a-radio>
+                    </a-radio-group>
+                    <a-checkbox-group v-if="qu1.type === 2" v-model="qu1.inputType">
+                      <a-checkbox :style="disBlock" v-for="(item, index) in qu1.options" :key="index" :value="item.questionOptionId" :name="qu1.questionTitleId+''" disabled>{{item.name}}</a-checkbox>
+                    </a-checkbox-group>
+                    <a-date-picker v-if="qu1.type === 6" :name="qu1.questionTitleId+''" :defaultValue="qu1.answers && qu1.answers.length && qu1.answers[0].questionOptionValue && moment(qu1.answers[0].questionOptionValue, 'YYYY-MM-DD')" disabled />
+                  </a-form-item>
+                </div>
+              </a-form>
+            </div>
+          </a-col>
+        </a-row>
+        <!-- </a-card> -->
+      </div>
+    </a-spin>
+  </div>
+</template>
+<script>
+  import moment from 'moment'
+  import { getWxQuestionDetail, questionReview } from '@/api/distract'
+  import { MyIcon } from '@/components/_util/util'
+  export default {
+    components: {
+      MyIcon
+    },
+    data() {
+      return {
+        baselineInfoStyle: {
+          overflow: "auto",
+          height: "100%",
+          boxShadow: 'rgba(204, 204, 204,0.8) 1px 0px 20px'
+        },
+        info: {},
+        isLoading: true,
+        form: this.$form.createForm(this),
+        question: {},
+        questionTask: {},
+        orgTree: [],
+        questionList: [],
+        disBlock: {
+          display: 'block',
+        },
+        questionTaskId: '',
+        showBtnState: '',
+        score: ''
+      }
+    },
+    created() {
+      this.info = JSON.parse(localStorage.getItem('questionInfo'))
+      this.questionTaskId = this.$route.params.id
+
+      const params = new FormData()
+      params.append('questionTaskId', this.questionTaskId)
+      params.append('createDate', this.info.createDate)
+      getWxQuestionDetail(params).then(res => {
+        this.isLoading = false
+        this.orgTree = res.data.questionList
+        this.questionList = this.initQuestionAnswers(res.data.topTitles)
+        this.question = res.data.question
+        this.showBtnState = res.data.questionTask && res.data.questionTask.status
+        this.score = res.data.questionTask && res.data.questionTask.score
+      })
+    },
+    methods: {
+      moment,
+
+      handleChange(id) {
+        if(this.questionTaskId == id) return
+        this.questionTaskId = id
+        this.isLoading = true
+        const params = new FormData()
+        params.append('questionTaskId', id)
+        getWxQuestionDetail(params).then(res => {
+          this.isLoading = false
+          this.questionList = this.initQuestionAnswers(res.data.topTitles)
+          this.question = res.data.question
+          this.showBtnState = res.data.questionTask && res.data.questionTask.status
+          this.score = res.data.questionTask && res.data.questionTask.score
+        })
+      },
+      save(id) {
+        const params = new FormData()
+        params.append('questionTaskId', this.questionTaskId)
+        params.append('status', id)
+        questionReview(params).then(res => {
+          this.$message.success(res.msg);
+          this.handleChange(this.questionTaskId)
+        })
+      },
+
+      initQuestionAnswers(list) {
+        _.each(list, function (a) {
+          if (a.childrens && a.childrens.length) {
+            _.each(a.childrens, function (b) {
+              if (b.type === 1 && b.answers && b.answers.length) {
+                b.inputType = b.answers[0].questionOptionId
+              }
+              if (b.type === 2) {
+                if (b.answers && b.answers.length) {
+                  b.inputType = _.map(b.answers, function (v) { return v.questionOptionId })
+                } else {
+                  b.inputType = []
+                }
+              }
+            })
+          }
+        })
+        return list
+      },
+    }
+  }
+</script>
+<style lang="less" scoped>
+  .page-header-index-wide {
+    .UserNameCard {
+      font-size: 20px;
+      .anticon {
+        font-size: 26px;
+        vertical-align: text-bottom;
+        position: relative;
+        left: -5px;
+      }
+    }
+    /deep/ .ant-spin-container {
+      height: 100%;
+      display: flex;
+    }
+    .menu {
+      list-style: none;
+      margin: 0;
+      padding: 0;
+      background: rgba(245, 251, 255);
+      &-item {
+        height: 40px;
+        line-height: 40px;
+        font-size: 14px;
+        padding-left: 50px;
+        padding-right: 20px;
+        cursor: pointer;
+        transition: 0.5s;
+        &:hover {
+          background-color: #e6f7ff;
+          color: #1890ff;
+        }
+      }
+    }
+    .active {
+      background-color: #1890ff !important;
+      color: #fff !important;
+    }
+    .head-bar {
+      height: 70px;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      background-color: #f7ffff;
+      border: 2px solid #079ce9;
+      box-shadow: 4px 4px 0px #b9b4ac;
+      margin: 10px 20px;
+      padding: 0 15px;
+      /deep/ .ant-btn {
+        height: 35px;
+        line-height: 35px;
+      }
+      .question-title {
+        font-size: 30px;
+        color: #3398dc;
+        font-weight: bold;
+        margin-left: 15px;
+      }
+      .head-icon {
+        width: 50px;
+        height: 50px;
+        background-image: url('../../assets/head-icon.png');
+        background-size: 100% 100%;
+      }
+    }
+
+    .ant-row.ant-form-item:hover {
+      background-color: #e6f7ff;
+    }
+
+    /deep/ .ant-card-wider-padding .ant-card-body {
+      padding: 10px 15px;
+    }
+
+    .fr {
+      float: right;
+    }
+
+    .btn {
+      margin-right: 10px;
+    }
+
+    .baselineForm {
+      flex: 1;
+      overflow: auto;
+      padding: 40px 20px;
+
+      /deep/ .ant-radio-disabled + span {
+        color: inherit;
+      }
+
+      /deep/.ant-checkbox-disabled + span {
+        color: inherit;
+      }
+
+      .question-des {
+        font-size: 16px;
+        margin-bottom: 25px;
+      }
+
+      .question-t {
+        display: flex;
+        line-height: 40px;
+        font-size: 18px;
+        font-weight: 700;
+        border-bottom: 2px solid #3398dc;
+        padding-bottom: 5px;
+        .question-icon {
+          width: 40px;
+          height: 40px;
+          background-image: url('../../assets/question-icon.png');
+          background-size: 100% 100%;
+          margin-right: 10px;
+        }
+      }
+
+      .question-tip {
+        height: 50px;
+        display: flex;
+        align-items: center;
+        .tip-icon {
+          width: 20px;
+          height: 20px;
+          background-image: url('../../assets/tip-icon.png');
+          background-size: 100% 100%;
+          margin-right: 5px;
+        }
+      }
+
+      .ant-form-item {
+        margin-bottom: 0px;
+        border-bottom: 1px solid #eee;
+      }
+
+      /deep/ .ant-form-item-label {
+        text-align: left;
+        display: block;
+        background-color: #f7f8f8;
+        color: #231815;
+        font-size: 16px;
+        font-weight: bold;
+        padding-left: 15px;
+        border-top: 1px solid #eee;
+      }
+
+      /deep/ .ant-form-item-control-wrapper {
+        padding: 5px 0;
+        padding-left: 20px;
+        label {
+          margin: 5px 0;
+        }
+      }
+    }
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/wx/questionReview.vue b/src/views/wx/questionReview.vue
new file mode 100644
index 0000000000..d1f26f787d
--- /dev/null
+++ b/src/views/wx/questionReview.vue
@@ -0,0 +1,257 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索患者姓名、身份证号" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch(3)">全部问卷</p>
+                    <p @click="tableSearch(1)">待审阅问卷</p>
+                    <p @click="tableSearch(2)">已审阅问卷</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="入组编号">
+                        <a-input v-model.trim="queryParam.fileBasisCode" />
+                      </a-form-item>
+                      <a-form-item label="姓名">
+                        <a-input v-model.trim="queryParam.patientName" />
+                      </a-form-item>
+                      <a-form-item label="身份证号">
+                        <a-input v-model.trim="queryParam.card" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="questionTaskId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <template slot="patientName" slot-scope="text,record">
+        <p>{{modifyName(text)}}</p>
+      </template>
+      <template slot="status" slot-scope="text">
+        <a-badge :status="text | visitTypeFilter" :text="text | visitFilter" />
+      </template>
+      <template slot="operation" slot-scope="text, record">
+          <a @click="handleClick(record)">审阅</a>
+      </template>
+    </s-table>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getWxQuestionList } from '@/api/distract'
+import { STable } from '@/components'
+import $ from 'jquery'
+
+const visitMap = {
+  3: {
+    status: 'error',
+    text: '驳回'
+  },
+  4: {
+    status: 'success',
+    text: '已审阅'
+  },
+  5: {
+    status: 'default',
+    text: '未审阅'
+  },
+};
+export default {
+  components: {
+    STable
+  },
+  data() {
+    return {
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      scroll: false,
+      loadData: parameter => {
+        return getWxQuestionList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      columns: [{
+          title: '入组编号',
+          dataIndex: 'fileBasisCode',
+          width: '150px'
+        },
+        {
+          title: '问卷名称',
+          dataIndex: 'questionName',
+          width: '120px'
+        },
+        {
+          title: '微信号',
+          dataIndex: 'wxCode',
+          width: '120px'
+        },
+        {
+          title: '姓名',
+          dataIndex: 'name',
+          width: '100px',
+          scopedSlots: { customRender: 'patientName' }
+        },
+        {
+          title: '填写日期',
+          dataIndex: 'realExecuteTime',
+          customRender: realExecuteTime => moment(realExecuteTime).format('YYYY-MM-DD'),
+          width: '120px'
+        },
+        {
+          title: '推送日期',
+          dataIndex: 'createDate',
+          width: '120px'
+        },
+        {
+          title: '类型',
+          dataIndex: 'visitType',
+          width: '120px'
+        },
+        {
+          title: '审阅状态',
+          dataIndex: 'status',
+          scopedSlots: { customRender: 'status' },
+          width: '100px'
+        },
+        {
+          title: '操作',
+          dataIndex: 'operation',
+          scopedSlots: { customRender: 'operation' },
+          width: '100px'
+        }
+      ],
+    }
+  },
+  created() {
+    this.scroll = {
+      y: window.screen.height - 368 + 'px'
+    }
+  },
+  mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  },
+  filters: {
+    visitFilter(type) {
+      return visitMap[type].text;
+    },
+    visitTypeFilter(type) {
+      return visitMap[type].status;
+    }
+  },
+  methods: {
+    modifyName(name) {
+      return name.replace(/(.)(.*)/, (_, $1, $2) => $1 + '*'.repeat($2.length))
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    clearForm() {
+      this.queryParam = {}
+    },
+    tableSearch(type) {
+      this.queryParam.queryType = type
+      this.$refs.table.refresh();
+      this.advanced = false
+    },
+    handleClick(record) {
+      const params = {
+        name: record.name,
+        card: record.card,
+        createDate: record.createDate
+      }
+      localStorage.setItem('questionInfo', JSON.stringify(params))
+      this.$router.push({ path: `/wx/questionDetail/${record.questionTaskId}`})
+    },
+    refreshTable() {
+      this.advanced = false
+      this.$refs.table.refresh()
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/wx/ticketRegister.vue b/src/views/wx/ticketRegister.vue
new file mode 100644
index 0000000000..4e850f27f9
--- /dev/null
+++ b/src/views/wx/ticketRegister.vue
@@ -0,0 +1,230 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索姓名、身份证号" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch(0)">待注销活动券</p>
+                    <p @click="tableSearch()">全部活动券</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="入组编号">
+                        <a-input v-model.trim="queryParam.fileBasisCode" />
+                      </a-form-item>
+                      <a-form-item label="姓名">
+                        <a-input v-model.trim="queryParam.patientName" />
+                      </a-form-item>
+                      <a-form-item label="身份证号">
+                        <a-input v-model.trim="queryParam.card" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="ticketId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <template slot="patientName" slot-scope="text,record">
+        <p>{{modifyName(text)}}</p>
+      </template>
+      <template slot="executeStatus" slot-scope="text">
+        <a-badge :status="text == 0 ? 'success' : 'error'" :text="text == 0 ? '未注销' : '已注销'" />
+      </template>
+      <template slot="operation" slot-scope="text, record">
+        <span v-if="record.executeStatus == 1">注销</span>
+        <a v-else @click="handleLogout(record)">注销</a>
+      </template>
+    </s-table>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getTicketDataList, logoutTicket } from '@/api/ticket'
+import { STable } from '@/components'
+import $ from 'jquery'
+
+export default {
+  components: {
+    STable
+  },
+  data() {
+    return {
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      scroll: false,
+      loadData: parameter => {
+        return getTicketDataList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      columns: [{
+          title: '入组编号',
+          dataIndex: 'fileBasisCode',
+          width: '120px'
+        },
+        {
+          title: '微信号',
+          dataIndex: 'wxCode',
+          width: '120px'
+        },
+        {
+          title: '姓名',
+          dataIndex: 'patientNanme',
+          width: '100px',
+          scopedSlots: { customRender: 'patientName' }
+        },
+        {
+          title: '活动券编号',
+          dataIndex: 'code',
+          width: '150px'
+        },
+        {
+          title: '发放时间',
+          dataIndex: 'grantDate',
+          customRender: grantDate => moment(grantDate).format('YYYY-MM-DD'),
+          width: '120px'
+        },
+        {
+          title: '注销状态',
+          dataIndex: 'executeStatus',
+          scopedSlots: { customRender: 'executeStatus' },
+          width: '100px'
+        },
+        {
+          title: '操作',
+          dataIndex: 'operation',
+          scopedSlots: { customRender: 'operation' },
+          width: '150px'
+        }
+      ],
+    }
+  },
+  created() {
+    this.scroll = {
+      y: window.screen.height - 368 + 'px'
+    }
+  },
+  methods: {
+    modifyName(name) {
+      return name.replace(/(.)(.*)/, (_, $1, $2) => $1 + '*'.repeat($2.length))
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    clearForm() {
+      this.queryParam = {}
+    },
+    tableSearch(type) {
+      this.queryParam.executeStatus = type
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    handleLogout(record) {
+      let that = this
+      this.$confirm({
+        title: '确定要注销该活动券吗?',
+        onOk() {
+          const params = new FormData();
+          params.append('ticketId', record.ticketId)
+          logoutTicket(params).then(res => {
+            that.$refs.table.refresh()
+          })
+        },
+        onCancel() {},
+      });
+    },
+    refreshTable() {
+      this.advanced = false
+      this.$refs.table.refresh()
+    }
+  },
+  mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/wx/userBind.vue b/src/views/wx/userBind.vue
new file mode 100644
index 0000000000..b7c90e7a7a
--- /dev/null
+++ b/src/views/wx/userBind.vue
@@ -0,0 +1,234 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索患者姓名、身份证号" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch(3)">全部绑定用户</p>
+                    <p @click="tableSearch(1)">待绑定用户</p>
+                    <p @click="tableSearch(2)">已绑定用户</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="患者编号">
+                        <a-input v-model.trim="queryParam.code" />
+                      </a-form-item>
+                      <a-form-item label="姓名">
+                        <a-input v-model.trim="queryParam.name" />
+                      </a-form-item>
+                      <a-form-item label="身份证号">
+                        <a-input v-model.trim="queryParam.card" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right;margin-bottom: 0;margin-top: 15px;">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px;" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table ref="table" :scroll="scroll" size="small" rowKey="wxPatientId" :columns="columns" :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" showPagination="auto">
+      <template slot="patientName" slot-scope="text,record">
+        <p>{{modifyName(text)}}</p>
+      </template>
+      <span slot="bindStatus" slot-scope="text">
+        <a-badge :status="text == 1 ? 'default' : text == 2 ? 'success' : 'error'" :text="text == 1 ? '未绑定': text == 2 ? '已绑定' : '忽略'" />
+      </span>
+      <span slot="operation" slot-scope="text, record">
+        <template>
+          <a v-if="record.bindStatus == 2">绑定</a>
+          <a v-else @click="handleReview(record)">绑定</a>
+        </template>
+      </span>
+    </s-table>
+    <user-detail ref="userDetail" @ok="handleOk"></user-detail>
+  </a-card>
+</template>
+<script>
+import moment from 'moment'
+import { getWxBingDataList } from '@/api/distract'
+import { STable } from '@/components'
+import UserDetail from './modules/UserDetail'
+import $ from 'jquery'
+
+export default {
+  components: {
+    STable,
+    UserDetail
+  },
+  data() {
+    return {
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {},
+      scroll: false,
+      loadData: parameter => {
+        return getWxBingDataList(Object.assign(parameter, this.queryParam)).then(res => {
+          return res
+        })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      columns: [{
+          title: '患者编号',
+          dataIndex: 'code',
+          width: '120px'
+        },
+        {
+          title: '患者姓名',
+          dataIndex: 'name',
+          width: '120px',
+          scopedSlots: { customRender: 'patientName' }
+        },
+        {
+          title: '微信号',
+          dataIndex: 'wxCode',
+          width: '120px'
+        },
+        {
+          title: '微信昵称',
+          dataIndex: 'wxName',
+          width: '100px'
+        },
+        {
+          title: '手机号码',
+          dataIndex: 'telephone',
+          width: '120px'
+        },
+        {
+          title: '注册时间',
+          dataIndex: 'registeredDate',
+          customRender: registeredDate => moment(registeredDate).format('YYYY-MM-DD'),
+          width: '120px'
+        },
+        {
+          title: '绑定状态',
+          dataIndex: 'bindStatus',
+          scopedSlots: { customRender: 'bindStatus' },
+          width: '100px'
+        },
+        {
+          title: '操作',
+          dataIndex: 'operation',
+          scopedSlots: { customRender: 'operation' },
+          width: '100px'
+        }
+      ],
+    }
+  },
+  created() {
+    this.scroll = {
+      y: window.screen.height - 368 + 'px'
+    }
+  },
+  mounted() {
+    var that = this
+    $(document).on('click', function(e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if ($(e.target).closest(".tableSearch").length == 0 && $(e.target).closest(".ant-calendar").length == 0 && $(e.target).closest('.ant-calendar-year-panel-table').length === 0 && $(e.target).closest('.ant-calendar-month-panel-table').length === 0) {
+        that.advanced = false
+      }
+    })
+  },
+  methods: {
+    modifyName(name) {
+      return name.replace(/(.)(.*)/, (_, $1, $2) => $1 + '*'.repeat($2.length))
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectedRows = selectedRows;
+    },
+    clearForm() {
+      this.queryParam = {}
+    },
+    tableSearch(type) {
+      this.queryParam.queryType = type
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    refreshTable() {
+      this.advanced = false
+      this.$refs.table.refresh()
+    },
+    handleReview(recode) {
+      recode.registeredDate = moment(recode.registeredDate).format('YYYY-MM-DD')
+      this.$refs.userDetail.show(recode)
+    },
+    handleOk() {
+      this.$refs.table.refresh()
+    }
+  },
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item>.ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/wx/userGroup.vue b/src/views/wx/userGroup.vue
new file mode 100644
index 0000000000..a02ef86ab2
--- /dev/null
+++ b/src/views/wx/userGroup.vue
@@ -0,0 +1,262 @@
+<template>
+  <a-card :bordered="false" :bodyStyle="bodyStyle">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="16">
+          <a-col :md="5" :sm="24">
+            <a-form-item>
+              <a-input v-model.trim="queryParam.keyWord" placeholder="搜索患者姓名、身份证号" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item>
+              <a-button type="primary" @click="refreshTable">查询</a-button>
+              <a @click="advanced = !advanced" style="margin-left: 8px" class="toggleAdvanced">
+                更多筛选
+                <a-icon :type="advanced ? 'up' : 'down'" />
+              </a>
+            </a-form-item>
+          </a-col>
+          <a-col v-if="advanced" class="tableSearch" :md="8">
+            <div>
+              <a-tabs defaultActiveKey="1">
+                <a-tab-pane tab="常用检索" key="1">
+                  <div class="commonRetrieval">
+                    <p @click="tableSearch()">全部用户</p>
+                    <p @click="tableSearch(1)">待入组用户</p>
+                    <p @click="tableSearch(0)">已入组用户</p>
+                  </div>
+                </a-tab-pane>
+                <a-tab-pane tab="自定义检索" key="2" forceRender>
+                  <a-card :bordered="false">
+                    <a-form>
+                      <a-form-item label="姓名">
+                        <a-input v-model.trim="queryParam.name" />
+                      </a-form-item>
+                      <a-form-item label="身份证号">
+                        <a-input v-model.trim="queryParam.card" />
+                      </a-form-item>
+                      <a-form-item style="text-align: right; margin-bottom: 0; margin-top: 15px">
+                        <a-button type="primary" @click="clearForm()">清空</a-button>
+                        <a-button type="primary" style="margin-left: 10px" @click="refreshTable">查询</a-button>
+                      </a-form-item>
+                    </a-form>
+                  </a-card>
+                </a-tab-pane>
+              </a-tabs>
+            </div>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <s-table
+      ref="table"
+      :scroll="scroll"
+      size="small"
+      rowKey="patientPendingId"
+      :columns="columns"
+      :data="loadData"
+      :alert="options.alert"
+      :rowSelection="options.rowSelection"
+      showPagination="auto"
+    >
+      <template slot="patientName" slot-scope="text, record">
+        <p>{{ modifyName(text) }}</p>
+      </template>
+      <template slot="patientCard" slot-scope="text, record">
+        <p>{{ modifyCard(text) }}</p>
+      </template>
+      <span slot="operation" slot-scope="text, record">
+        <template>
+          <a @click="handleReview(record)">入组</a>
+        </template>
+      </span>
+    </s-table>
+    <created-form ref="detailModal" @ok="handleOk"></created-form>
+  </a-card>
+</template>
+<script>
+// import moment from 'moment'
+import { getZKDataList } from '@/api/distract'
+import { STable } from '@/components'
+import CreatedForm from '@/views/list/modules/CreateForm'
+import $ from 'jquery'
+
+export default {
+  components: {
+    STable,
+    CreatedForm
+  },
+  data () {
+    return {
+      bodyStyle: {
+        padding: '10px',
+        paddingBottom: '0px'
+      },
+      // 高级搜索 展开/关闭
+      advanced: false,
+      // 查询参数
+      queryParam: {
+        status: 1
+      },
+      scroll: false,
+      dataEchoInfo: {},
+      loadData: (parameter) => {
+        return getZKDataList(Object.assign(parameter, this.queryParam)).then((res) => {
+          return res
+        })
+      },
+      form: this.$form.createForm(this),
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: {
+          show: false,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      columns: [
+        {
+          title: '患者姓名',
+          dataIndex: 'name',
+          width: '120px',
+          scopedSlots: { customRender: 'patientName' }
+        },
+        {
+          title: '身份证号',
+          dataIndex: 'card',
+          width: '180px',
+          scopedSlots: { customRender: 'patientCard' }
+        },
+        {
+          title: '手机号码',
+          dataIndex: 'telephone1',
+          width: '120px'
+        },
+        // {
+        //   title: '注册时间',
+        //   dataIndex: 'registeredDate',
+        //   customRender: (registeredDate) => moment(registeredDate).format('YYYY-MM-DD'),
+        //   width: '120px'
+        // },
+        {
+          title: '民族',
+          dataIndex: 'nationName',
+          width: '100px'
+        },
+        {
+          title: '职业',
+          dataIndex: 'workName',
+          width: '120px'
+        },
+        {
+          title: '文化程度',
+          dataIndex: 'censusName',
+          width: '120px'
+        },
+        {
+          title: '家庭年收入',
+          dataIndex: 'income',
+          width: '120px'
+        },
+        {
+          title: '医疗费用支付类型',
+          dataIndex: 'payTypeName',
+          width: '120px'
+        },
+        {
+          title: '操作',
+          dataIndex: 'operation',
+          scopedSlots: { customRender: 'operation' },
+          width: '100px'
+        }
+      ]
+    }
+  },
+  created () {
+    this.scroll = {
+      y: window.screen.height - 368 + 'px'
+    }
+  },
+  mounted () {
+    var that = this
+    $(document).on('click', function (e) {
+      if (e.target.className === 'toggleAdvanced') {
+        return
+      }
+      if (
+        $(e.target).closest('.tableSearch').length == 0 &&
+        $(e.target).closest('.ant-calendar').length == 0 &&
+        $(e.target).closest('.ant-calendar-year-panel-table').length === 0 &&
+        $(e.target).closest('.ant-calendar-month-panel-table').length === 0
+      ) {
+        that.advanced = false
+      }
+    })
+  },
+  methods: {
+    modifyName (name) {
+      return name.replace(/(.)(.*)/, (_, $1, $2) => $1 + '*'.repeat($2.length))
+    },
+    modifyCard (card) {
+      return card.replace(/^(.{8})(?:\d+)(.{4})$/, '$1******$2')
+    },
+    onSelectChange (selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    },
+    clearForm () {
+      this.queryParam = {}
+    },
+    tableSearch (type) {
+      this.queryParam.status = type
+      this.$refs.table.refresh()
+      this.advanced = false
+    },
+    refreshTable () {
+      this.advanced = false
+      this.$refs.table.refresh()
+    },
+    async handleReview (recode) {
+      this.$refs.detailModal.dataEcho(recode)
+    },
+    handleOk () {
+      this.$refs.table.refresh()
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+/deep/.table-page-search-wrapper .ant-form-inline .ant-form-item {
+  margin-bottom: 10px;
+}
+
+.tableSearch {
+  background: #ffffff;
+  position: absolute;
+  top: 52px;
+  box-shadow: 4px 4px 10px #ddd;
+  z-index: 100;
+
+  /deep/ .ant-card-body .ant-form-horizontal .ant-form-item > .ant-form-item-label {
+    width: 70px !important;
+  }
+
+  .commonRetrieval {
+    padding: 10px;
+
+    p {
+      &:hover {
+        cursor: pointer;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+</style>
diff --git a/vue.config.js b/vue.config.js
index cd0e920ee0..9ebb7a168e 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -1,125 +1,137 @@
-const path = require('path')
-const webpack = require('webpack')
-const ThemeColorReplacer = require('webpack-theme-color-replacer')
-const generate = require('@ant-design/colors/lib/generate').default
-
-function resolve (dir) {
-  return path.join(__dirname, dir)
-}
-
-// vue.config.js
-module.exports = {
-  configureWebpack: {
-    plugins: [
-      // Ignore all locale files of moment.js
-      new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
-      // 生成仅包含颜色的替换样式(主题色等)
-      // TODO 需要增加根据环境不开启主题需求
-      new ThemeColorReplacer({
-        fileName: 'css/theme-colors-[contenthash:8].css',
-        matchColors: getAntdSerials('#1890ff'), // 主色系列
-        // 改变样式选择器,解决样式覆盖问题
-        changeSelector (selector) {
-          switch (selector) {
-            case '.ant-calendar-today .ant-calendar-date':
-              return ':not(.ant-calendar-selected-date):not(.ant-calendar-selected-day)' + selector
-            case '.ant-btn:focus,.ant-btn:hover':
-              return '.ant-btn:focus:not(.ant-btn-primary),.ant-btn:hover:not(.ant-btn-primary)'
-            case '.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon':
-              return ':not(.ant-steps-item-process)' + selector
-            case '.ant-btn.active,.ant-btn:active':
-              return '.ant-btn.active:not(.ant-btn-primary),.ant-btn:active:not(.ant-btn-primary)'
-            case '.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-item-open,.ant-menu-horizontal>.ant-menu-item-selected,.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-submenu-active,.ant-menu-horizontal>.ant-menu-submenu-open,.ant-menu-horizontal>.ant-menu-submenu-selected,.ant-menu-horizontal>.ant-menu-submenu:hover':
-            case '.ant-menu-horizontal > .ant-menu-item-active,.ant-menu-horizontal > .ant-menu-item-open,.ant-menu-horizontal > .ant-menu-item-selected,.ant-menu-horizontal > .ant-menu-item:hover,.ant-menu-horizontal > .ant-menu-submenu-active,.ant-menu-horizontal > .ant-menu-submenu-open,.ant-menu-horizontal > .ant-menu-submenu-selected,.ant-menu-horizontal > .ant-menu-submenu:hover':
-              return '.ant-menu-horizontal > .ant-menu-item-active,.ant-menu-horizontal > .ant-menu-item-open,.ant-menu-horizontal > .ant-menu-item-selected,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item:hover,.ant-menu-horizontal > .ant-menu-submenu-active,.ant-menu-horizontal > .ant-menu-submenu-open,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-selected,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu:hover'
-            case '.ant-menu-horizontal > .ant-menu-item-selected > a':
-              return ':not(.ant-menu-horizontal)' + selector
-            case '.ant-menu-horizontal > .ant-menu-item > a:hover':
-              return ':not(.ant-menu-horizontal)' + selector
-            default :
-              return selector
-          }
-        }
-      })
-    ]
-  },
-
-  chainWebpack: (config) => {
-    config.resolve.alias
-      .set('@$', resolve('src'))
-
-    const svgRule = config.module.rule('svg')
-    svgRule.uses.clear()
-    svgRule
-      .oneOf('inline')
-      .resourceQuery(/inline/)
-      .use('vue-svg-icon-loader')
-      .loader('vue-svg-icon-loader')
-      .end()
-      .end()
-      .oneOf('external')
-      .use('file-loader')
-      .loader('file-loader')
-      .options({
-        name: 'assets/[name].[hash:8].[ext]'
-      })
-    /* svgRule.oneOf('inline')
-      .resourceQuery(/inline/)
-      .use('vue-svg-loader')
-      .loader('vue-svg-loader')
-      .end()
-      .end()
-      .oneOf('external')
-      .use('file-loader')
-      .loader('file-loader')
-      .options({
-        name: 'assets/[name].[hash:8].[ext]'
-      })
-    */
-  },
-
-  css: {
-    loaderOptions: {
-      less: {
-        modifyVars: {
-          /* less 变量覆盖,用于自定义 ant design 主题 */
-
-          /*
-          'primary-color': '#F5222D',
-          'link-color': '#F5222D',
-          'border-radius-base': '4px',
-          */
-        },
-        javascriptEnabled: true
-      }
-    }
-  },
-
-  devServer: {
-    // development server port 8000
-    port: 8000
-    // proxy: {
-    //   '/api': {
-    //     // target: 'https://mock.ihx.me/mock/5baf3052f7da7e07e04a5116/antd-pro',
-    //     target: 'https://mock.ihx.me/mock/5baf3052f7da7e07e04a5116/antd-pro',
-    //     ws: false,
-    //     changeOrigin: true
-    //   }
-    // }
-  },
-
-  // disable source map in production
-  productionSourceMap: false,
-  lintOnSave: undefined,
-  // babel-loader no-ignore node_modules/*
-  transpileDependencies: []
-}
-
-function getAntdSerials (color) {
-  // 淡化(即less的tint)
-  const lightens = new Array(9).fill().map((t, i) => {
-    return ThemeColorReplacer.varyColor.lighten(color, i / 10)
-  })
-  const colorPalettes = generate(color)
-  return lightens.concat(colorPalettes)
-}
+const path = require('path')
+const webpack = require('webpack')
+const ThemeColorReplacer = require('webpack-theme-color-replacer')
+const generate = require('@ant-design/colors/lib/generate').default
+
+function resolve (dir) {
+  return path.join(__dirname, dir)
+}
+
+// vue.config.js
+module.exports = {
+  configureWebpack: {
+    plugins: [
+      // Ignore all locale files of moment.js
+      new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
+      // 生成仅包含颜色的替换样式(主题色等)
+      // TODO 需要增加根据环境不开启主题需求
+      new ThemeColorReplacer({
+        fileName: 'css/theme-colors-[contenthash:8].css',
+        matchColors: getAntdSerials('#1890ff'), // 主色系列
+        // 改变样式选择器,解决样式覆盖问题
+        changeSelector (selector) {
+          switch (selector) {
+            case '.ant-calendar-today .ant-calendar-date':
+              return ':not(.ant-calendar-selected-date):not(.ant-calendar-selected-day)' + selector
+            case '.ant-btn:focus,.ant-btn:hover':
+              return '.ant-btn:focus:not(.ant-btn-primary),.ant-btn:hover:not(.ant-btn-primary)'
+            case '.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon':
+              return ':not(.ant-steps-item-process)' + selector
+            case '.ant-btn.active,.ant-btn:active':
+              return '.ant-btn.active:not(.ant-btn-primary),.ant-btn:active:not(.ant-btn-primary)'
+            case '.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-item-open,.ant-menu-horizontal>.ant-menu-item-selected,.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-submenu-active,.ant-menu-horizontal>.ant-menu-submenu-open,.ant-menu-horizontal>.ant-menu-submenu-selected,.ant-menu-horizontal>.ant-menu-submenu:hover':
+            case '.ant-menu-horizontal > .ant-menu-item-active,.ant-menu-horizontal > .ant-menu-item-open,.ant-menu-horizontal > .ant-menu-item-selected,.ant-menu-horizontal > .ant-menu-item:hover,.ant-menu-horizontal > .ant-menu-submenu-active,.ant-menu-horizontal > .ant-menu-submenu-open,.ant-menu-horizontal > .ant-menu-submenu-selected,.ant-menu-horizontal > .ant-menu-submenu:hover':
+              return '.ant-menu-horizontal > .ant-menu-item-active,.ant-menu-horizontal > .ant-menu-item-open,.ant-menu-horizontal > .ant-menu-item-selected,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item:hover,.ant-menu-horizontal > .ant-menu-submenu-active,.ant-menu-horizontal > .ant-menu-submenu-open,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-selected,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu:hover'
+            case '.ant-menu-horizontal > .ant-menu-item-selected > a':
+              return ':not(.ant-menu-horizontal)' + selector
+            case '.ant-menu-horizontal > .ant-menu-item > a:hover':
+              return ':not(.ant-menu-horizontal)' + selector
+            default :
+              return selector
+          }
+        }
+      }),
+      new webpack.ProvidePlugin({
+      jQuery: "jquery",
+      $: "jquery"
+    })
+    ]
+  },
+
+  chainWebpack: (config) => {
+    config.resolve.alias
+      .set('@$', resolve('src'))
+
+    const svgRule = config.module.rule('svg')
+    svgRule.uses.clear()
+    svgRule
+      .oneOf('inline')
+      .resourceQuery(/inline/)
+      .use('vue-svg-icon-loader')
+      .loader('vue-svg-icon-loader')
+      .end()
+      .end()
+      .oneOf('external')
+      .use('file-loader')
+      .loader('file-loader')
+      .options({
+        name: 'assets/[name].[hash:8].[ext]'
+      })
+    /* svgRule.oneOf('inline')
+      .resourceQuery(/inline/)
+      .use('vue-svg-loader')
+      .loader('vue-svg-loader')
+      .end()
+      .end()
+      .oneOf('external')
+      .use('file-loader')
+      .loader('file-loader')
+      .options({
+        name: 'assets/[name].[hash:8].[ext]'
+      })
+    */
+  },
+
+  css: {
+    loaderOptions: {
+      less: {
+        modifyVars: {
+          /* less 变量覆盖,用于自定义 ant design 主题 */
+
+          /*
+          'primary-color': '#F5222D',
+          'link-color': '#F5222D',
+          'border-radius-base': '4px',
+          */
+        },
+        javascriptEnabled: true
+      }
+    }
+  },
+
+  devServer: {
+    // development server port 8000
+    port: 8000,
+    proxy: {
+      '/api': {
+        // target: 'http://172.16.1.11:9997/',
+        // target: 'http://172.16.2.124:9997/', // 袁朋槐
+        // target: 'http://172.16.1.21:9997/',//测试
+        target: 'http://172.16.2.109:9997/',//宋建文
+        // target: 'http://172.16.2.135:9997/',//赵翔
+        // target: 'http://localhost:9997/',
+        // target: 'http://61.132.50.162:9997/',
+        ws: false,
+        changeOrigin: true,
+        pathRewrite: {
+          '^/api': ''
+        }
+      }
+    }
+  },
+
+  // disable source map in production
+  productionSourceMap: false,
+  lintOnSave: undefined,
+  // babel-loader no-ignore node_modules/*
+  transpileDependencies: []
+}
+
+function getAntdSerials (color) {
+  // 淡化(即less的tint)
+  const lightens = new Array(9).fill().map((t, i) => {
+    return ThemeColorReplacer.varyColor.lighten(color, i / 10)
+  })
+  const colorPalettes = generate(color)
+  return lightens.concat(colorPalettes)
+}
diff --git a/yarn.lock b/yarn.lock
index f90dccd32f..738512132d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1,11432 +1,11460 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@ant-design/colors@^3.1.0":
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/@ant-design/colors/-/colors-3.1.0.tgz#b7e2cc61a4e86d3d109494034acfb1222dacaa3c"
-  integrity sha512-Td7g1P53sNFyT4Gya6836e70TrhoVZ+HjZs6mpWIHrxl4/VqsjjOyzj/8ktOuw0lCx+BfYu9UO1CiJ0MoYYfhg==
-  dependencies:
-    tinycolor2 "^1.4.1"
-
-"@ant-design/icons-vue@^1.0.1":
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/@ant-design/icons-vue/-/icons-vue-1.0.1.tgz#343579219c04190831c9ca3826aec7361bb8b4d4"
-  integrity sha512-WRlfa3t9/e2wwVw9FPRgJ/pan4Ttzd+JvgounFsXdpuyDm0q6djAwhjj7W/ZxWWU3XkArbcaXTMSslnn25804w==
-  dependencies:
-    ant-design-palettes "^1.1.3"
-    babel-runtime "^6.26.0"
-
-"@ant-design/icons@^1.1.15":
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-1.2.1.tgz#8e19301b1433ec67d6bbd0e892782e2ade561ff9"
-  integrity sha512-gQx3nH6m1xvebOWh5xibhzVK02aoqHY7JUXUS4doAidSDRWsj5iwKC8Gq9DemDZ4T+bW6xO7jJZN1UsbvcW7Uw==
-
-"@antv/adjust@~0.1.0":
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/@antv/adjust/-/adjust-0.1.1.tgz#e263ab0e1a1941a648842fc086cf65a7e3b75e98"
-  integrity sha512-9FaMOyBlM4AgoRL0b5o0VhEKAYkexBNUrxV8XmpHU/9NBPJONBOB/NZUlQDqxtLItrt91tCfbAuMQmF529UX2Q==
-  dependencies:
-    "@antv/util" "~1.3.1"
-
-"@antv/attr@~0.1.2":
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/@antv/attr/-/attr-0.1.2.tgz#2eeb122fcaaf851a2d8749abc7c60519d3f77e37"
-  integrity sha512-QXjP+T2I+pJQcwZx1oCA4tipG43vgeCeKcGGKahlcxb71OBAzjJZm1QbF4frKXcnOqRkxVXtCr70X9TRair3Ew==
-  dependencies:
-    "@antv/util" "~1.3.1"
-
-"@antv/component@~0.3.1":
-  version "0.3.1"
-  resolved "https://registry.yarnpkg.com/@antv/component/-/component-0.3.1.tgz#25eb53e3ed3a0f413896be2f83e7e704bfb6b097"
-  integrity sha512-NH5CQNttfnCjQEGwEEYGS/2gD3L50gCcMV94PYVyvwmn8NoqNDNeF5ZHe9oUNB4DRZIoo1wvGF8M8HJ7ItFLJQ==
-  dependencies:
-    "@antv/attr" "~0.1.2"
-    "@antv/g" "~3.3.5"
-    "@antv/util" "~1.3.1"
-    wolfy87-eventemitter "~5.1.0"
-
-"@antv/coord@~0.1.0":
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/@antv/coord/-/coord-0.1.0.tgz#48a80ae36d07552f96657e7f8095227c63f0c0a9"
-  integrity sha512-W1R8h3Jfb3AfMBVfCreFPMVetgEYuwHBIGn0+d3EgYXe2ckOF8XWjkpGF1fZhOMHREMr+Gt27NGiQh8yBdLUgg==
-  dependencies:
-    "@antv/util" "~1.3.1"
-
-"@antv/data-set@^0.10.1":
-  version "0.10.2"
-  resolved "https://registry.yarnpkg.com/@antv/data-set/-/data-set-0.10.2.tgz#584a9574e7e0853847cb658d51b9f7345a00032f"
-  integrity sha512-FFWG5tiTiFiUrLDRwulraU5XfOdDjkYOlZna+AMT9FJw406D/gfS8eXM9YibscBH28M/+KLAVO8xEwuD1sc3bw==
-  dependencies:
-    "@antv/hierarchy" "~0.4.0"
-    "@antv/util" "~1.3.1"
-    d3-array "~1.2.0"
-    d3-composite-projections "~1.2.0"
-    d3-dsv "~1.0.5"
-    d3-geo "~1.6.4"
-    d3-geo-projection "~2.1.2"
-    d3-hexjson "~1.0.1"
-    d3-hierarchy "~1.1.5"
-    d3-sankey "~0.7.1"
-    d3-voronoi "~1.1.2"
-    dagre "~0.8.2"
-    point-at-length "~1.0.2"
-    regression "~2.0.0"
-    simple-statistics "~6.1.0"
-    topojson-client "~3.0.0"
-    wolfy87-eventemitter "~5.1.0"
-
-"@antv/g2-brush@^0.0.2":
-  version "0.0.2"
-  resolved "https://registry.yarnpkg.com/@antv/g2-brush/-/g2-brush-0.0.2.tgz#0b65f3ebbf82690202913d0b6759ab2900faa841"
-  integrity sha512-7O9szwem19nmEgReXhFB8kVLRaz8J5MHvrzDSDY36YaBOaHSWRGHnvYt2KkkPqgWtHtLY1srssk4X/UmP5govA==
-
-"@antv/g2-plugin-slider@^2.1.0":
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/@antv/g2-plugin-slider/-/g2-plugin-slider-2.1.1.tgz#c20c5f1cf085bea478f8ab1fc84837e45c46a065"
-  integrity sha512-nB678VEGG3FkrvkDDFADAKjLQIeXzITEYqey5oeOpbf0vT5jOa55lQDyJDZ79cK8PmU/Hz6VPeSb3CNQBA+/FQ==
-
-"@antv/g2@^3.4.0":
-  version "3.4.10"
-  resolved "https://registry.yarnpkg.com/@antv/g2/-/g2-3.4.10.tgz#72607fa3fb261a2a935762c78c8e568297f523cf"
-  integrity sha512-4IltW4S8IV+KcMeGltAgKKr6vAjYAKj+WLTkZAYbzmXEcBsmt4Ss6QcoTrBk/y5AK9dE8Bz1JT+8CgEqMHC2tg==
-  dependencies:
-    "@antv/adjust" "~0.1.0"
-    "@antv/attr" "~0.1.2"
-    "@antv/component" "~0.3.1"
-    "@antv/coord" "~0.1.0"
-    "@antv/g" "~3.3.5"
-    "@antv/scale" "~0.1.0"
-    "@antv/util" "~1.3.1"
-    venn.js "~0.2.20"
-    wolfy87-eventemitter "~5.1.0"
-
-"@antv/g@~3.3.5":
-  version "3.3.5"
-  resolved "https://registry.yarnpkg.com/@antv/g/-/g-3.3.5.tgz#9959baad1b85199614e591c9926879afb1fbb943"
-  integrity sha512-VCfxmQ5ntIf4QHku6w7TnOWHVkfIzOkXVXx99WLYPau8HgLuM4iD9y7isG5T7VpRBAmV+Ow3RJHqL3vHFY2Low==
-  dependencies:
-    "@antv/gl-matrix" "~2.7.1"
-    "@antv/util" "~1.3.1"
-    d3-ease "~1.0.3"
-    d3-interpolate "~1.1.5"
-    d3-timer "~1.0.6"
-    wolfy87-eventemitter "~5.1.0"
-
-"@antv/gl-matrix@^2.7.1", "@antv/gl-matrix@~2.7.1":
-  version "2.7.1"
-  resolved "https://registry.yarnpkg.com/@antv/gl-matrix/-/gl-matrix-2.7.1.tgz#acb8e37f7ab3df01345aba4372d7942be42eba14"
-  integrity sha512-oOWcVNlpELIKi9x+Mm1Vwbz8pXfkbJKykoCIOJ/dNK79hSIANbpXJ5d3Rra9/wZqK6MC961B7sybFhPlLraT3Q==
-
-"@antv/hierarchy@~0.4.0":
-  version "0.4.0"
-  resolved "https://registry.yarnpkg.com/@antv/hierarchy/-/hierarchy-0.4.0.tgz#712b5b4477ee0b8b8db174c682b5356b0411aab6"
-  integrity sha512-ols+m+Z8QA4895SWMTOSjVImOX4tEbWQTwJ0NE+WATc0WLSKs6D9y2yaR+ZWt6P60BMGVIKS6lIfabO3CwGgnQ==
-  dependencies:
-    "@antv/util" "~1.3.1"
-
-"@antv/scale@~0.1.0":
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/@antv/scale/-/scale-0.1.0.tgz#2b5459a100f97aac04781376d53904ccab18aab7"
-  integrity sha512-xQTWhoSYbIGSrNUBOuQvbYk1GnUruaG7az/HIcoA+5pb5WTa2HsW4Rf/mtTkkPVd6YFZJmPwht6lEuuhkCYEPg==
-  dependencies:
-    "@antv/util" "~1.3.1"
-    fecha "~2.3.3"
-
-"@antv/util@~1.3.1":
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/@antv/util/-/util-1.3.1.tgz#30a34b201ff9126ec0d58c72c8166a9c3e644ccd"
-  integrity sha512-cbUta0hIJrKEaW3eKoGarz3Ita+9qUPF2YzTj8A6wds/nNiy20G26ztIWHU+5ThLc13B1n5Ik52LbaCaeg9enA==
-  dependencies:
-    "@antv/gl-matrix" "^2.7.1"
-
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35":
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
-  integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
-  dependencies:
-    "@babel/highlight" "^7.0.0"
-
-"@babel/core@^7.0.0":
-  version "7.4.5"
-  resolved "https://registry.npmjs.org/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a"
-  integrity sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==
-  dependencies:
-    "@babel/code-frame" "^7.0.0"
-    "@babel/generator" "^7.4.4"
-    "@babel/helpers" "^7.4.4"
-    "@babel/parser" "^7.4.5"
-    "@babel/template" "^7.4.4"
-    "@babel/traverse" "^7.4.5"
-    "@babel/types" "^7.4.4"
-    convert-source-map "^1.1.0"
-    debug "^4.1.0"
-    json5 "^2.1.0"
-    lodash "^4.17.11"
-    resolve "^1.3.2"
-    semver "^5.4.1"
-    source-map "^0.5.0"
-
-"@babel/core@^7.1.2":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b"
-  integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==
-  dependencies:
-    "@babel/code-frame" "^7.0.0"
-    "@babel/generator" "^7.3.4"
-    "@babel/helpers" "^7.2.0"
-    "@babel/parser" "^7.3.4"
-    "@babel/template" "^7.2.2"
-    "@babel/traverse" "^7.3.4"
-    "@babel/types" "^7.3.4"
-    convert-source-map "^1.1.0"
-    debug "^4.1.0"
-    json5 "^2.1.0"
-    lodash "^4.17.11"
-    resolve "^1.3.2"
-    semver "^5.4.1"
-    source-map "^0.5.0"
-
-"@babel/generator@^7.3.4", "@babel/generator@^7.4.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041"
-  integrity sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==
-  dependencies:
-    "@babel/types" "^7.4.4"
-    jsesc "^2.5.1"
-    lodash "^4.17.11"
-    source-map "^0.5.0"
-    trim-right "^1.0.1"
-
-"@babel/helper-annotate-as-pure@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
-  integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==
-  dependencies:
-    "@babel/types" "^7.0.0"
-
-"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0":
-  version "7.1.0"
-  resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f"
-  integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==
-  dependencies:
-    "@babel/helper-explode-assignable-expression" "^7.1.0"
-    "@babel/types" "^7.0.0"
-
-"@babel/helper-call-delegate@^7.4.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43"
-  integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==
-  dependencies:
-    "@babel/helper-hoist-variables" "^7.4.4"
-    "@babel/traverse" "^7.4.4"
-    "@babel/types" "^7.4.4"
-
-"@babel/helper-create-class-features-plugin@^7.4.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz#fc3d690af6554cc9efc607364a82d48f58736dba"
-  integrity sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA==
-  dependencies:
-    "@babel/helper-function-name" "^7.1.0"
-    "@babel/helper-member-expression-to-functions" "^7.0.0"
-    "@babel/helper-optimise-call-expression" "^7.0.0"
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-replace-supers" "^7.4.4"
-    "@babel/helper-split-export-declaration" "^7.4.4"
-
-"@babel/helper-define-map@^7.4.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz#6969d1f570b46bdc900d1eba8e5d59c48ba2c12a"
-  integrity sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==
-  dependencies:
-    "@babel/helper-function-name" "^7.1.0"
-    "@babel/types" "^7.4.4"
-    lodash "^4.17.11"
-
-"@babel/helper-explode-assignable-expression@^7.1.0":
-  version "7.1.0"
-  resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6"
-  integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==
-  dependencies:
-    "@babel/traverse" "^7.1.0"
-    "@babel/types" "^7.0.0"
-
-"@babel/helper-function-name@^7.1.0":
-  version "7.1.0"
-  resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53"
-  integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==
-  dependencies:
-    "@babel/helper-get-function-arity" "^7.0.0"
-    "@babel/template" "^7.1.0"
-    "@babel/types" "^7.0.0"
-
-"@babel/helper-get-function-arity@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
-  integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==
-  dependencies:
-    "@babel/types" "^7.0.0"
-
-"@babel/helper-hoist-variables@^7.4.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a"
-  integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==
-  dependencies:
-    "@babel/types" "^7.4.4"
-
-"@babel/helper-member-expression-to-functions@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f"
-  integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==
-  dependencies:
-    "@babel/types" "^7.0.0"
-
-"@babel/helper-module-imports@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d"
-  integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==
-  dependencies:
-    "@babel/types" "^7.0.0"
-
-"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz#96115ea42a2f139e619e98ed46df6019b94414b8"
-  integrity sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==
-  dependencies:
-    "@babel/helper-module-imports" "^7.0.0"
-    "@babel/helper-simple-access" "^7.1.0"
-    "@babel/helper-split-export-declaration" "^7.4.4"
-    "@babel/template" "^7.4.4"
-    "@babel/types" "^7.4.4"
-    lodash "^4.17.11"
-
-"@babel/helper-optimise-call-expression@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5"
-  integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==
-  dependencies:
-    "@babel/types" "^7.0.0"
-
-"@babel/helper-plugin-utils@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
-  integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==
-
-"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz#a47e02bc91fb259d2e6727c2a30013e3ac13c4a2"
-  integrity sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==
-  dependencies:
-    lodash "^4.17.11"
-
-"@babel/helper-remap-async-to-generator@^7.1.0":
-  version "7.1.0"
-  resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f"
-  integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==
-  dependencies:
-    "@babel/helper-annotate-as-pure" "^7.0.0"
-    "@babel/helper-wrap-function" "^7.1.0"
-    "@babel/template" "^7.1.0"
-    "@babel/traverse" "^7.1.0"
-    "@babel/types" "^7.0.0"
-
-"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz#aee41783ebe4f2d3ab3ae775e1cc6f1a90cefa27"
-  integrity sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==
-  dependencies:
-    "@babel/helper-member-expression-to-functions" "^7.0.0"
-    "@babel/helper-optimise-call-expression" "^7.0.0"
-    "@babel/traverse" "^7.4.4"
-    "@babel/types" "^7.4.4"
-
-"@babel/helper-simple-access@^7.1.0":
-  version "7.1.0"
-  resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c"
-  integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==
-  dependencies:
-    "@babel/template" "^7.1.0"
-    "@babel/types" "^7.0.0"
-
-"@babel/helper-split-export-declaration@^7.0.0", "@babel/helper-split-export-declaration@^7.4.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677"
-  integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==
-  dependencies:
-    "@babel/types" "^7.4.4"
-
-"@babel/helper-wrap-function@^7.1.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa"
-  integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==
-  dependencies:
-    "@babel/helper-function-name" "^7.1.0"
-    "@babel/template" "^7.1.0"
-    "@babel/traverse" "^7.1.0"
-    "@babel/types" "^7.2.0"
-
-"@babel/helpers@^7.2.0", "@babel/helpers@^7.4.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5"
-  integrity sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==
-  dependencies:
-    "@babel/template" "^7.4.4"
-    "@babel/traverse" "^7.4.4"
-    "@babel/types" "^7.4.4"
-
-"@babel/highlight@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
-  integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==
-  dependencies:
-    chalk "^2.0.0"
-    esutils "^2.0.2"
-    js-tokens "^4.0.0"
-
-"@babel/parser@^7.0.0":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.4.tgz#a43357e4bbf4b92a437fb9e465c192848287f27c"
-  integrity sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==
-
-"@babel/parser@^7.3.4", "@babel/parser@^7.4.4", "@babel/parser@^7.4.5":
-  version "7.4.5"
-  resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz#04af8d5d5a2b044a2a1bffacc1e5e6673544e872"
-  integrity sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==
-
-"@babel/plugin-proposal-async-generator-functions@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e"
-  integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-remap-async-to-generator" "^7.1.0"
-    "@babel/plugin-syntax-async-generators" "^7.2.0"
-
-"@babel/plugin-proposal-class-properties@^7.0.0":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz#93a6486eed86d53452ab9bab35e368e9461198ce"
-  integrity sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg==
-  dependencies:
-    "@babel/helper-create-class-features-plugin" "^7.4.4"
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-proposal-decorators@^7.1.0":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz#de9b2a1a8ab0196f378e2a82f10b6e2a36f21cc0"
-  integrity sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw==
-  dependencies:
-    "@babel/helper-create-class-features-plugin" "^7.4.4"
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/plugin-syntax-decorators" "^7.2.0"
-
-"@babel/plugin-proposal-json-strings@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317"
-  integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/plugin-syntax-json-strings" "^7.2.0"
-
-"@babel/plugin-proposal-object-rest-spread@^7.3.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz#1ef173fcf24b3e2df92a678f027673b55e7e3005"
-  integrity sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
-
-"@babel/plugin-proposal-optional-catch-binding@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5"
-  integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
-
-"@babel/plugin-proposal-unicode-property-regex@^7.2.0":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78"
-  integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-regex" "^7.4.4"
-    regexpu-core "^4.5.4"
-
-"@babel/plugin-syntax-async-generators@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f"
-  integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-syntax-decorators@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b"
-  integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-syntax-dynamic-import@^7.0.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612"
-  integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-syntax-json-strings@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470"
-  integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7"
-  integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-syntax-object-rest-spread@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e"
-  integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-syntax-optional-catch-binding@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c"
-  integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-arrow-functions@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550"
-  integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-async-to-generator@^7.3.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz#a3f1d01f2f21cadab20b33a82133116f14fb5894"
-  integrity sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==
-  dependencies:
-    "@babel/helper-module-imports" "^7.0.0"
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-remap-async-to-generator" "^7.1.0"
-
-"@babel/plugin-transform-block-scoped-functions@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190"
-  integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-block-scoping@^7.3.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz#c13279fabf6b916661531841a23c4b7dae29646d"
-  integrity sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-    lodash "^4.17.11"
-
-"@babel/plugin-transform-classes@^7.3.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz#0ce4094cdafd709721076d3b9c38ad31ca715eb6"
-  integrity sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==
-  dependencies:
-    "@babel/helper-annotate-as-pure" "^7.0.0"
-    "@babel/helper-define-map" "^7.4.4"
-    "@babel/helper-function-name" "^7.1.0"
-    "@babel/helper-optimise-call-expression" "^7.0.0"
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-replace-supers" "^7.4.4"
-    "@babel/helper-split-export-declaration" "^7.4.4"
-    globals "^11.1.0"
-
-"@babel/plugin-transform-computed-properties@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da"
-  integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-destructuring@^7.2.0":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz#9d964717829cc9e4b601fc82a26a71a4d8faf20f"
-  integrity sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-dotall-regex@^7.2.0":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3"
-  integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-regex" "^7.4.4"
-    regexpu-core "^4.5.4"
-
-"@babel/plugin-transform-duplicate-keys@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3"
-  integrity sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-exponentiation-operator@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008"
-  integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==
-  dependencies:
-    "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0"
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-for-of@^7.2.0":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556"
-  integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-function-name@^7.2.0":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad"
-  integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==
-  dependencies:
-    "@babel/helper-function-name" "^7.1.0"
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-literals@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1"
-  integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-modules-amd@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6"
-  integrity sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==
-  dependencies:
-    "@babel/helper-module-transforms" "^7.1.0"
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-modules-commonjs@^7.2.0":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz#0bef4713d30f1d78c2e59b3d6db40e60192cac1e"
-  integrity sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==
-  dependencies:
-    "@babel/helper-module-transforms" "^7.4.4"
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-simple-access" "^7.1.0"
-
-"@babel/plugin-transform-modules-systemjs@^7.3.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz#dc83c5665b07d6c2a7b224c00ac63659ea36a405"
-  integrity sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==
-  dependencies:
-    "@babel/helper-hoist-variables" "^7.4.4"
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-modules-umd@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae"
-  integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==
-  dependencies:
-    "@babel/helper-module-transforms" "^7.1.0"
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-named-capturing-groups-regex@^7.3.0":
-  version "7.4.5"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106"
-  integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==
-  dependencies:
-    regexp-tree "^0.1.6"
-
-"@babel/plugin-transform-new-target@^7.0.0":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5"
-  integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-object-super@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598"
-  integrity sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-replace-supers" "^7.1.0"
-
-"@babel/plugin-transform-parameters@^7.2.0":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16"
-  integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==
-  dependencies:
-    "@babel/helper-call-delegate" "^7.4.4"
-    "@babel/helper-get-function-arity" "^7.0.0"
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-regenerator@^7.3.4":
-  version "7.4.5"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f"
-  integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==
-  dependencies:
-    regenerator-transform "^0.14.0"
-
-"@babel/plugin-transform-runtime@^7.1.0":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.3.4.tgz#57805ac8c1798d102ecd75c03b024a5b3ea9b431"
-  integrity sha512-PaoARuztAdd5MgeVjAxnIDAIUet5KpogqaefQvPOmPYCxYoaPhautxDh3aO8a4xHsKgT/b9gSxR0BKK1MIewPA==
-  dependencies:
-    "@babel/helper-module-imports" "^7.0.0"
-    "@babel/helper-plugin-utils" "^7.0.0"
-    resolve "^1.8.1"
-    semver "^5.5.1"
-
-"@babel/plugin-transform-runtime@^7.4.0":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz#a50f5d16e9c3a4ac18a1a9f9803c107c380bce08"
-  integrity sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q==
-  dependencies:
-    "@babel/helper-module-imports" "^7.0.0"
-    "@babel/helper-plugin-utils" "^7.0.0"
-    resolve "^1.8.1"
-    semver "^5.5.1"
-
-"@babel/plugin-transform-shorthand-properties@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0"
-  integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-spread@^7.2.0":
-  version "7.2.2"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406"
-  integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-sticky-regex@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1"
-  integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-regex" "^7.0.0"
-
-"@babel/plugin-transform-template-literals@^7.2.0":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0"
-  integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==
-  dependencies:
-    "@babel/helper-annotate-as-pure" "^7.0.0"
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-typeof-symbol@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2"
-  integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-unicode-regex@^7.2.0":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f"
-  integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-regex" "^7.4.4"
-    regexpu-core "^4.5.4"
-
-"@babel/polyfill@^7.2.5":
-  version "7.2.5"
-  resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.2.5.tgz#6c54b964f71ad27edddc567d065e57e87ed7fa7d"
-  integrity sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug==
-  dependencies:
-    core-js "^2.5.7"
-    regenerator-runtime "^0.12.0"
-
-"@babel/preset-env@^7.0.0 < 7.4.0", "@babel/preset-env@^7.1.0":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.4.tgz#887cf38b6d23c82f19b5135298bdb160062e33e1"
-  integrity sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==
-  dependencies:
-    "@babel/helper-module-imports" "^7.0.0"
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/plugin-proposal-async-generator-functions" "^7.2.0"
-    "@babel/plugin-proposal-json-strings" "^7.2.0"
-    "@babel/plugin-proposal-object-rest-spread" "^7.3.4"
-    "@babel/plugin-proposal-optional-catch-binding" "^7.2.0"
-    "@babel/plugin-proposal-unicode-property-regex" "^7.2.0"
-    "@babel/plugin-syntax-async-generators" "^7.2.0"
-    "@babel/plugin-syntax-json-strings" "^7.2.0"
-    "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
-    "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
-    "@babel/plugin-transform-arrow-functions" "^7.2.0"
-    "@babel/plugin-transform-async-to-generator" "^7.3.4"
-    "@babel/plugin-transform-block-scoped-functions" "^7.2.0"
-    "@babel/plugin-transform-block-scoping" "^7.3.4"
-    "@babel/plugin-transform-classes" "^7.3.4"
-    "@babel/plugin-transform-computed-properties" "^7.2.0"
-    "@babel/plugin-transform-destructuring" "^7.2.0"
-    "@babel/plugin-transform-dotall-regex" "^7.2.0"
-    "@babel/plugin-transform-duplicate-keys" "^7.2.0"
-    "@babel/plugin-transform-exponentiation-operator" "^7.2.0"
-    "@babel/plugin-transform-for-of" "^7.2.0"
-    "@babel/plugin-transform-function-name" "^7.2.0"
-    "@babel/plugin-transform-literals" "^7.2.0"
-    "@babel/plugin-transform-modules-amd" "^7.2.0"
-    "@babel/plugin-transform-modules-commonjs" "^7.2.0"
-    "@babel/plugin-transform-modules-systemjs" "^7.3.4"
-    "@babel/plugin-transform-modules-umd" "^7.2.0"
-    "@babel/plugin-transform-named-capturing-groups-regex" "^7.3.0"
-    "@babel/plugin-transform-new-target" "^7.0.0"
-    "@babel/plugin-transform-object-super" "^7.2.0"
-    "@babel/plugin-transform-parameters" "^7.2.0"
-    "@babel/plugin-transform-regenerator" "^7.3.4"
-    "@babel/plugin-transform-shorthand-properties" "^7.2.0"
-    "@babel/plugin-transform-spread" "^7.2.0"
-    "@babel/plugin-transform-sticky-regex" "^7.2.0"
-    "@babel/plugin-transform-template-literals" "^7.2.0"
-    "@babel/plugin-transform-typeof-symbol" "^7.2.0"
-    "@babel/plugin-transform-unicode-regex" "^7.2.0"
-    browserslist "^4.3.4"
-    invariant "^2.2.2"
-    js-levenshtein "^1.1.3"
-    semver "^5.3.0"
-
-"@babel/runtime-corejs2@^7.2.0":
-  version "7.4.5"
-  resolved "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.4.5.tgz#3d892f0560df21bafb384dd7727e33853e95d3c9"
-  integrity sha512-5yLuwzvIDecKwYMzJtiarky4Fb5643H3Ao5jwX0HrMR5oM5mn2iHH9wSZonxwNK0oAjAFUQAiOd4jT7/9Y2jMQ==
-  dependencies:
-    core-js "^2.6.5"
-    regenerator-runtime "^0.13.2"
-
-"@babel/runtime@^7.0.0":
-  version "7.4.5"
-  resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12"
-  integrity sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==
-  dependencies:
-    regenerator-runtime "^0.13.2"
-
-"@babel/template@^7.1.0", "@babel/template@^7.2.2", "@babel/template@^7.4.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237"
-  integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==
-  dependencies:
-    "@babel/code-frame" "^7.0.0"
-    "@babel/parser" "^7.4.4"
-    "@babel/types" "^7.4.4"
-
-"@babel/traverse@^7.0.0":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.3.4.tgz#1330aab72234f8dea091b08c4f8b9d05c7119e06"
-  integrity sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==
-  dependencies:
-    "@babel/code-frame" "^7.0.0"
-    "@babel/generator" "^7.3.4"
-    "@babel/helper-function-name" "^7.1.0"
-    "@babel/helper-split-export-declaration" "^7.0.0"
-    "@babel/parser" "^7.3.4"
-    "@babel/types" "^7.3.4"
-    debug "^4.1.0"
-    globals "^11.1.0"
-    lodash "^4.17.11"
-
-"@babel/traverse@^7.1.0", "@babel/traverse@^7.3.4", "@babel/traverse@^7.4.4", "@babel/traverse@^7.4.5":
-  version "7.4.5"
-  resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz#4e92d1728fd2f1897dafdd321efbff92156c3216"
-  integrity sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==
-  dependencies:
-    "@babel/code-frame" "^7.0.0"
-    "@babel/generator" "^7.4.4"
-    "@babel/helper-function-name" "^7.1.0"
-    "@babel/helper-split-export-declaration" "^7.4.4"
-    "@babel/parser" "^7.4.5"
-    "@babel/types" "^7.4.4"
-    debug "^4.1.0"
-    globals "^11.1.0"
-    lodash "^4.17.11"
-
-"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.4", "@babel/types@^7.4.4":
-  version "7.4.4"
-  resolved "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0"
-  integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==
-  dependencies:
-    esutils "^2.0.2"
-    lodash "^4.17.11"
-    to-fast-properties "^2.0.0"
-
-"@hapi/address@2.x.x":
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/@hapi/address/-/address-2.0.0.tgz#9f05469c88cb2fd3dcd624776b54ee95c312126a"
-  integrity sha512-mV6T0IYqb0xL1UALPFplXYQmR0twnXG0M6jUswpquqT2sD12BOiCiLy3EvMp/Fy7s3DZElC4/aPjEjo2jeZpvw==
-
-"@hapi/hoek@6.x.x":
-  version "6.2.4"
-  resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-6.2.4.tgz#4b95fbaccbfba90185690890bdf1a2fbbda10595"
-  integrity sha512-HOJ20Kc93DkDVvjwHyHawPwPkX44sIrbXazAUDiUXaY2R9JwQGo2PhFfnQtdrsIe4igjG2fPgMra7NYw7qhy0A==
-
-"@hapi/joi@^15.0.1":
-  version "15.0.3"
-  resolved "https://registry.npmjs.org/@hapi/joi/-/joi-15.0.3.tgz#e94568fd859e5e945126d5675e7dd218484638a7"
-  integrity sha512-z6CesJ2YBwgVCi+ci8SI8zixoj8bGFn/vZb9MBPbSyoxsS2PnWYjHcyTM17VLK6tx64YVK38SDIh10hJypB+ig==
-  dependencies:
-    "@hapi/address" "2.x.x"
-    "@hapi/hoek" "6.x.x"
-    "@hapi/topo" "3.x.x"
-
-"@hapi/topo@3.x.x":
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.0.tgz#5c47cd9637c2953db185aa957a27bcb2a8b7a6f8"
-  integrity sha512-gZDI/eXOIk8kP2PkUKjWu9RW8GGVd2Hkgjxyr/S7Z+JF+0mr7bAlbw+DkTRxnD580o8Kqxlnba9wvqp5aOHBww==
-  dependencies:
-    "@hapi/hoek" "6.x.x"
-
-"@intervolga/optimize-cssnano-plugin@^1.0.5":
-  version "1.0.6"
-  resolved "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz#be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8"
-  integrity sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==
-  dependencies:
-    cssnano "^4.0.0"
-    cssnano-preset-default "^4.0.0"
-    postcss "^7.0.0"
-
-"@mrmlnc/readdir-enhanced@^2.2.1":
-  version "2.2.1"
-  resolved "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
-  integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==
-  dependencies:
-    call-me-maybe "^1.0.1"
-    glob-to-regexp "^0.3.0"
-
-"@nodelib/fs.stat@^1.1.2":
-  version "1.1.3"
-  resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
-  integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
-
-"@soda/friendly-errors-webpack-plugin@^1.7.1":
-  version "1.7.1"
-  resolved "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz#706f64bcb4a8b9642b48ae3ace444c70334d615d"
-  integrity sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ==
-  dependencies:
-    chalk "^1.1.3"
-    error-stack-parser "^2.0.0"
-    string-width "^2.0.0"
-
-"@types/anymatch@*":
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
-  integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==
-
-"@types/d3-format@*":
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-1.3.1.tgz#35bf88264bd6bcda39251165bb827f67879c4384"
-  integrity sha512-KAWvReOKMDreaAwOjdfQMm0HjcUMlQG47GwqdVKgmm20vTd2pucj0a70c3gUSHrnsmo6H2AMrkBsZU2UhJLq8A==
-
-"@types/events@*":
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
-  integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
-
-"@types/glob@^7.1.1":
-  version "7.1.1"
-  resolved "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
-  integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==
-  dependencies:
-    "@types/events" "*"
-    "@types/minimatch" "*"
-    "@types/node" "*"
-
-"@types/loader-utils@1.1.3":
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/@types/loader-utils/-/loader-utils-1.1.3.tgz#82b9163f2ead596c68a8c03e450fbd6e089df401"
-  integrity sha512-euKGFr2oCB3ASBwG39CYJMR3N9T0nanVqXdiH7Zu/Nqddt6SmFRxytq/i2w9LQYNQekEtGBz+pE3qG6fQTNvRg==
-  dependencies:
-    "@types/node" "*"
-    "@types/webpack" "*"
-
-"@types/lodash@*":
-  version "4.14.121"
-  resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.121.tgz#9327e20d49b95fc2bf983fc2f045b2c6effc80b9"
-  integrity sha512-ORj7IBWj13iYufXt/VXrCNMbUuCTJfhzme5kx9U/UtcIPdJYuvPDUAlHlbNhz/8lKCLy9XGIZnGrqXOtQbPGoQ==
-
-"@types/minimatch@*":
-  version "3.0.3"
-  resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
-  integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
-
-"@types/node@*":
-  version "12.0.2"
-  resolved "https://registry.npmjs.org/@types/node/-/node-12.0.2.tgz#3452a24edf9fea138b48fad4a0a028a683da1e40"
-  integrity sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA==
-
-"@types/node@8.9":
-  version "8.9.5"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-8.9.5.tgz#162b864bc70be077e6db212b322754917929e976"
-  integrity sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ==
-
-"@types/node@^8.0.53":
-  version "8.10.40"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.40.tgz#4314888d5cd537945d73e9ce165c04cc550144a4"
-  integrity sha512-RRSjdwz63kS4u7edIwJUn8NqKLLQ6LyqF/X4+4jp38MBT3Vwetewi2N4dgJEshLbDwNgOJXNYoOwzVZUSSLhkQ==
-
-"@types/normalize-package-data@^2.4.0":
-  version "2.4.0"
-  resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
-  integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
-
-"@types/q@^1.5.1":
-  version "1.5.2"
-  resolved "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
-  integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==
-
-"@types/strip-bom@^3.0.0":
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2"
-  integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=
-
-"@types/strip-json-comments@0.0.30":
-  version "0.0.30"
-  resolved "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1"
-  integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==
-
-"@types/tapable@*":
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.4.tgz#b4ffc7dc97b498c969b360a41eee247f82616370"
-  integrity sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ==
-
-"@types/uglify-js@*":
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.4.tgz#96beae23df6f561862a830b4288a49e86baac082"
-  integrity sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ==
-  dependencies:
-    source-map "^0.6.1"
-
-"@types/webpack@*":
-  version "4.4.25"
-  resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.4.25.tgz#c8a1eb968a33a3e6da641f529c5add0d44d34809"
-  integrity sha512-YaYVbSK1bC3xiAWFLSgDQyVHdCTNq5cLlcx633basmrwSoUxJiv4SZ0SoT1uoF15zWx98afOcCbqA1YHeCdRYA==
-  dependencies:
-    "@types/anymatch" "*"
-    "@types/node" "*"
-    "@types/tapable" "*"
-    "@types/uglify-js" "*"
-    source-map "^0.6.0"
-
-"@vue/babel-helper-vue-jsx-merge-props@^1.0.0":
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz#048fe579958da408fb7a8b2a3ec050b50a661040"
-  integrity sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw==
-
-"@vue/babel-plugin-transform-vue-jsx@^1.0.0":
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.0.0.tgz#ebcbf39c312c94114c8c4f407ee4f6c97aa45432"
-  integrity sha512-U+JNwVQSmaLKjO3lzCUC3cNXxprgezV1N+jOdqbP4xWNaqtWUCJnkjTVcgECM18A/AinDKPcUUeoyhU7yxUxXQ==
-  dependencies:
-    "@babel/helper-module-imports" "^7.0.0"
-    "@babel/plugin-syntax-jsx" "^7.2.0"
-    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0"
-    html-tags "^2.0.0"
-    lodash.kebabcase "^4.1.1"
-    svg-tags "^1.0.0"
-
-"@vue/babel-preset-app@^3.8.0":
-  version "3.8.0"
-  resolved "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-3.8.0.tgz#c889627c6a30418b2fb89caccd9065c4acae0829"
-  integrity sha512-A2NBzIVdtNq52foc+P+yQ/7rSm2q2oPpn2FJVW4hFgaWVOL+HaOLCjWDEQyEeMbRZvyOVHMuom097u3p2H2Rfw==
-  dependencies:
-    "@babel/helper-module-imports" "^7.0.0"
-    "@babel/plugin-proposal-class-properties" "^7.0.0"
-    "@babel/plugin-proposal-decorators" "^7.1.0"
-    "@babel/plugin-syntax-dynamic-import" "^7.0.0"
-    "@babel/plugin-syntax-jsx" "^7.0.0"
-    "@babel/plugin-transform-runtime" "^7.4.0"
-    "@babel/preset-env" "^7.0.0 < 7.4.0"
-    "@babel/runtime" "^7.0.0"
-    "@babel/runtime-corejs2" "^7.2.0"
-    "@vue/babel-preset-jsx" "^1.0.0"
-    babel-plugin-dynamic-import-node "^2.2.0"
-    babel-plugin-module-resolver "3.2.0"
-    core-js "^2.6.5"
-
-"@vue/babel-preset-jsx@^1.0.0":
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.0.0.tgz#e515cd453a5a8ea6b0f30b2bb92f266d8ab4e9f5"
-  integrity sha512-5CbDu/QHS+TtQNw5aYAffiMxBBB2Eo9+RJpS8X+6FJbdG5Rvc4TVipEqkrg0pJviWadNg7TEy0Uz4o7VNXeIZw==
-  dependencies:
-    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0"
-    "@vue/babel-plugin-transform-vue-jsx" "^1.0.0"
-    "@vue/babel-sugar-functional-vue" "^1.0.0"
-    "@vue/babel-sugar-inject-h" "^1.0.0"
-    "@vue/babel-sugar-v-model" "^1.0.0"
-    "@vue/babel-sugar-v-on" "^1.0.0"
-
-"@vue/babel-sugar-functional-vue@^1.0.0":
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.0.0.tgz#17e2c4ca27b74b244da3b923240ec91d10048cb3"
-  integrity sha512-XE/jNaaorTuhWayCz+QClk5AB9OV5HzrwbzEC6sIUY0J60A28ONQKeTwxfidW42egOkqNH/UU6eE3KLfmiDj0Q==
-  dependencies:
-    "@babel/plugin-syntax-jsx" "^7.2.0"
-
-"@vue/babel-sugar-inject-h@^1.0.0":
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.0.0.tgz#e5efb6c5b5b7988dc03831af6d133bf7bcde6347"
-  integrity sha512-NxWU+DqtbZgfGvd25GPoFMj+rvyQ8ZA1pHj8vIeqRij+vx3sXoKkObjA9ulZunvWw5F6uG9xYy4ytpxab/X+Hg==
-  dependencies:
-    "@babel/plugin-syntax-jsx" "^7.2.0"
-
-"@vue/babel-sugar-v-model@^1.0.0":
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.0.0.tgz#f4da56aa67f65a349bd2c269a95e72e601af4613"
-  integrity sha512-Pfg2Al0io66P1eO6zUbRIgpyKCU2qTnumiE0lao/wA/uNdb7Dx5Tfd1W6tO5SsByETPnEs8i8+gawRIXX40rFw==
-  dependencies:
-    "@babel/plugin-syntax-jsx" "^7.2.0"
-    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0"
-    "@vue/babel-plugin-transform-vue-jsx" "^1.0.0"
-    camelcase "^5.0.0"
-    html-tags "^2.0.0"
-    svg-tags "^1.0.0"
-
-"@vue/babel-sugar-v-on@^1.0.0":
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.0.0.tgz#a633ee8fe205763e865b011246981b7f89668033"
-  integrity sha512-2aqJaDLKdSSGlxZU+GjFERaSNUaa6DQreV+V/K4W/6Lxj8520/r1lChWEa/zuAoPD2Vhy0D2QrqqO+I0D6CkKw==
-  dependencies:
-    "@babel/plugin-syntax-jsx" "^7.2.0"
-    "@vue/babel-plugin-transform-vue-jsx" "^1.0.0"
-    camelcase "^5.0.0"
-
-"@vue/cli-overlay@^3.8.0":
-  version "3.8.0"
-  resolved "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.8.0.tgz#e4e8e2fa92b06fc282916df9c924f1dba50eeabb"
-  integrity sha512-4hY/+r9OwpMb7BPFnQGKftMC8CrfbV00REEFOij52+L4swQw+m879+5zX3Z0xHfPftw6JyaqJB0rmQ0ILI6Ovw==
-
-"@vue/cli-plugin-babel@^3.7.0":
-  version "3.8.0"
-  resolved "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-3.8.0.tgz#a7ce6ef9c6680e7953c609d859451dd937c7284e"
-  integrity sha512-VLWvpgDM+HN2FZu1x+r9pisombDTK1k+RPNPeslnwjGjrUXmKNAamXL1ZIsPwsj6k6PpWPN4jetBIMqcBzBu6Q==
-  dependencies:
-    "@babel/core" "^7.0.0"
-    "@vue/babel-preset-app" "^3.8.0"
-    "@vue/cli-shared-utils" "^3.8.0"
-    babel-loader "^8.0.5"
-    webpack ">=4 < 4.29"
-
-"@vue/cli-plugin-eslint@^3.7.0":
-  version "3.8.0"
-  resolved "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.8.0.tgz#0402dfd3864b0224bceb264df89a4209000bb98c"
-  integrity sha512-18LDJmjH0DDw9T4+RbrSVk4xkF8t8RDRsEPJLPurno1YVJodIkQ6lqVu82faVgtvPyCoqiaicoTq/iwi1avoLQ==
-  dependencies:
-    "@vue/cli-shared-utils" "^3.8.0"
-    babel-eslint "^10.0.1"
-    eslint-loader "^2.1.2"
-    globby "^9.2.0"
-    webpack ">=4 < 4.29"
-  optionalDependencies:
-    eslint "^4.19.1"
-    eslint-plugin-vue "^4.7.1"
-
-"@vue/cli-plugin-unit-jest@^3.7.0":
-  version "3.8.0"
-  resolved "https://registry.npmjs.org/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-3.8.0.tgz#13cd3b4f5d1c9e0ef1982cbaea19b73f7df947d6"
-  integrity sha512-8kvoh6NZYY7FjuqRorqo47VTi62a3u69+oAxqBiIOkc28OGaju/FrL0Vm95vRB8tMkU6EPXKVRtCjPz8R2QeZA==
-  dependencies:
-    "@vue/cli-shared-utils" "^3.8.0"
-    babel-jest "^23.6.0"
-    babel-plugin-transform-es2015-modules-commonjs "^6.26.2"
-    jest "^23.6.0"
-    jest-serializer-vue "^2.0.2"
-    jest-transform-stub "^2.0.0"
-    jest-watch-typeahead "0.2.1"
-    vue-jest "^3.0.4"
-
-"@vue/cli-service@^3.7.0":
-  version "3.8.0"
-  resolved "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.8.0.tgz#47eaa169a7bd96522c1a0df89214f1afee843cd6"
-  integrity sha512-ipJF4RHjyLyLC4oLx+JM1Jk6tiIG0KjCFAqfOscQ44K4CdyS03oFMAUR+SZYy/UXKccMnoeY6Ld4YrGXSytQsg==
-  dependencies:
-    "@intervolga/optimize-cssnano-plugin" "^1.0.5"
-    "@soda/friendly-errors-webpack-plugin" "^1.7.1"
-    "@vue/cli-overlay" "^3.8.0"
-    "@vue/cli-shared-utils" "^3.8.0"
-    "@vue/component-compiler-utils" "^2.6.0"
-    "@vue/preload-webpack-plugin" "^1.1.0"
-    "@vue/web-component-wrapper" "^1.2.0"
-    acorn "^6.1.1"
-    acorn-walk "^6.1.1"
-    address "^1.0.3"
-    autoprefixer "^9.5.1"
-    browserslist "^4.5.4"
-    cache-loader "^2.0.1"
-    case-sensitive-paths-webpack-plugin "^2.2.0"
-    chalk "^2.4.2"
-    cli-highlight "^2.1.0"
-    clipboardy "^2.0.0"
-    cliui "^5.0.0"
-    copy-webpack-plugin "^4.6.0"
-    css-loader "^1.0.1"
-    cssnano "^4.1.10"
-    current-script-polyfill "^1.0.0"
-    debug "^4.1.1"
-    dotenv "^7.0.0"
-    dotenv-expand "^5.1.0"
-    escape-string-regexp "^1.0.5"
-    file-loader "^3.0.1"
-    fs-extra "^7.0.1"
-    globby "^9.2.0"
-    hash-sum "^1.0.2"
-    html-webpack-plugin "^3.2.0"
-    launch-editor-middleware "^2.2.1"
-    lodash.defaultsdeep "^4.6.0"
-    lodash.mapvalues "^4.6.0"
-    lodash.transform "^4.6.0"
-    mini-css-extract-plugin "^0.6.0"
-    minimist "^1.2.0"
-    ora "^3.4.0"
-    portfinder "^1.0.20"
-    postcss-loader "^3.0.0"
-    read-pkg "^5.0.0"
-    semver "^6.0.0"
-    slash "^2.0.0"
-    source-map-url "^0.4.0"
-    ssri "^6.0.1"
-    string.prototype.padend "^3.0.0"
-    terser-webpack-plugin "^1.2.3"
-    thread-loader "^2.1.2"
-    url-loader "^1.1.2"
-    vue-loader "^15.7.0"
-    webpack ">=4 < 4.29"
-    webpack-bundle-analyzer "^3.3.0"
-    webpack-chain "^4.11.0"
-    webpack-dev-server "^3.4.1"
-    webpack-merge "^4.2.1"
-    yorkie "^2.0.0"
-
-"@vue/cli-shared-utils@^3.8.0":
-  version "3.8.0"
-  resolved "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.8.0.tgz#e7e728164eb92bd9e205fcd08dae896ee79cba5a"
-  integrity sha512-wn1L8pmQnotfftHOYm0VeXs2+cQTySd73uhWXwyO6pT0ehjqlY5c2RTipClmFF3Q+YCYjwlNpsV650F3l1tV8w==
-  dependencies:
-    "@hapi/joi" "^15.0.1"
-    chalk "^2.4.1"
-    execa "^1.0.0"
-    launch-editor "^2.2.1"
-    lru-cache "^5.1.1"
-    node-ipc "^9.1.1"
-    open "^6.3.0"
-    ora "^3.4.0"
-    request "^2.87.0"
-    request-promise-native "^1.0.7"
-    semver "^6.0.0"
-    string.prototype.padstart "^3.0.0"
-
-"@vue/component-compiler-utils@^2.5.1", "@vue/component-compiler-utils@^2.6.0":
-  version "2.6.0"
-  resolved "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz#aa46d2a6f7647440b0b8932434d22f12371e543b"
-  integrity sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw==
-  dependencies:
-    consolidate "^0.15.1"
-    hash-sum "^1.0.2"
-    lru-cache "^4.1.2"
-    merge-source-map "^1.1.0"
-    postcss "^7.0.14"
-    postcss-selector-parser "^5.0.0"
-    prettier "1.16.3"
-    source-map "~0.6.1"
-    vue-template-es2015-compiler "^1.9.0"
-
-"@vue/eslint-config-standard@^4.0.0":
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/@vue/eslint-config-standard/-/eslint-config-standard-4.0.0.tgz#6be447ee674e3b0f733c584098fd9a22e6d76fcd"
-  integrity sha512-bQghq1cw1BuMRHNhr3tRpAJx1tpGy0QtajQX873kLtA9YVuOIoXR7nAWnTN09bBHnSUh2N288vMsqPi2fI4Hzg==
-  dependencies:
-    eslint-config-standard "^12.0.0"
-    eslint-plugin-import "^2.14.0"
-    eslint-plugin-node "^8.0.0"
-    eslint-plugin-promise "^4.0.1"
-    eslint-plugin-standard "^4.0.0"
-
-"@vue/preload-webpack-plugin@^1.1.0":
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.0.tgz#d768dba004261c029b53a77c5ea2d5f9ee4f3cce"
-  integrity sha512-rcn2KhSHESBFMPj5vc5X2pI9bcBNQQixvJXhD5gZ4rN2iym/uH2qfDSQfUS5+qwiz0a85TCkeUs6w6jxFDudbw==
-
-"@vue/test-utils@^1.0.0-beta.20":
-  version "1.0.0-beta.29"
-  resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.0.0-beta.29.tgz#c942cf25e891cf081b6a03332b4ae1ef430726f0"
-  integrity sha512-yX4sxEIHh4M9yAbLA/ikpEnGKMNBCnoX98xE1RwxfhQVcn0MaXNSj1Qmac+ZydTj6VBSEVukchBogXBTwc+9iA==
-  dependencies:
-    dom-event-types "^1.0.0"
-    lodash "^4.17.4"
-
-"@vue/web-component-wrapper@^1.2.0":
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz#bb0e46f1585a7e289b4ee6067dcc5a6ae62f1dd1"
-  integrity sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw==
-
-"@webassemblyjs/ast@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz#b988582cafbb2b095e8b556526f30c90d057cace"
-  integrity sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==
-  dependencies:
-    "@webassemblyjs/helper-module-context" "1.7.11"
-    "@webassemblyjs/helper-wasm-bytecode" "1.7.11"
-    "@webassemblyjs/wast-parser" "1.7.11"
-
-"@webassemblyjs/ast@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.3.tgz#63a741bd715a6b6783f2ea5c6ab707516aa215eb"
-  integrity sha512-xy3m06+Iu4D32+6soz6zLnwznigXJRuFNTovBX2M4GqVqLb0dnyWLbPnpcXvUSdEN+9DVyDeaq2jyH1eIL2LZQ==
-  dependencies:
-    "@webassemblyjs/helper-module-context" "1.8.3"
-    "@webassemblyjs/helper-wasm-bytecode" "1.8.3"
-    "@webassemblyjs/wast-parser" "1.8.3"
-
-"@webassemblyjs/floating-point-hex-parser@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz#a69f0af6502eb9a3c045555b1a6129d3d3f2e313"
-  integrity sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==
-
-"@webassemblyjs/floating-point-hex-parser@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.3.tgz#f198a2d203b3c50846a064f5addd6a133ef9bc0e"
-  integrity sha512-vq1TISG4sts4f0lDwMUM0f3kpe0on+G3YyV5P0IySHFeaLKRYZ++n2fCFfG4TcCMYkqFeTUYFxm75L3ddlk2xA==
-
-"@webassemblyjs/helper-api-error@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz#c7b6bb8105f84039511a2b39ce494f193818a32a"
-  integrity sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==
-
-"@webassemblyjs/helper-api-error@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.3.tgz#3b708f6926accd64dcbaa7ba5b63db5660ff4f66"
-  integrity sha512-BmWEynI4FnZbjk8CaYZXwcv9a6gIiu+rllRRouQUo73hglanXD3AGFJE7Q4JZCoVE0p5/jeX6kf5eKa3D4JxwQ==
-
-"@webassemblyjs/helper-buffer@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz#3122d48dcc6c9456ed982debe16c8f37101df39b"
-  integrity sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==
-
-"@webassemblyjs/helper-buffer@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.3.tgz#f3150a23ffaba68621e1f094c8a14bebfd53dd48"
-  integrity sha512-iVIMhWnNHoFB94+/2l7LpswfCsXeMRnWfExKtqsZ/E2NxZyUx9nTeKK/MEMKTQNEpyfznIUX06OchBHQ+VKi/Q==
-
-"@webassemblyjs/helper-code-frame@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz#cf8f106e746662a0da29bdef635fcd3d1248364b"
-  integrity sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==
-  dependencies:
-    "@webassemblyjs/wast-printer" "1.7.11"
-
-"@webassemblyjs/helper-code-frame@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.3.tgz#f43ac605789b519d95784ef350fd2968aebdd3ef"
-  integrity sha512-K1UxoJML7GKr1QXR+BG7eXqQkvu+eEeTjlSl5wUFQ6W6vaOc5OwSxTcb3oE9x/3+w4NHhrIKD4JXXCZmLdL2cg==
-  dependencies:
-    "@webassemblyjs/wast-printer" "1.8.3"
-
-"@webassemblyjs/helper-fsm@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz#df38882a624080d03f7503f93e3f17ac5ac01181"
-  integrity sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==
-
-"@webassemblyjs/helper-fsm@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.3.tgz#46aaa03f41082a916850ebcb97e9fc198ef36a9c"
-  integrity sha512-387zipfrGyO77/qm7/SDUiZBjQ5KGk4qkrVIyuoubmRNIiqn3g+6ijY8BhnlGqsCCQX5bYKOnttJobT5xoyviA==
-
-"@webassemblyjs/helper-module-context@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz#d874d722e51e62ac202476935d649c802fa0e209"
-  integrity sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==
-
-"@webassemblyjs/helper-module-context@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.3.tgz#150da405d90c8ea81ae0b0e1965b7b64e585634f"
-  integrity sha512-lPLFdQfaRssfnGEJit5Sk785kbBPPPK4ZS6rR5W/8hlUO/5v3F+rN8XuUcMj/Ny9iZiyKhhuinWGTUuYL4VKeQ==
-  dependencies:
-    "@webassemblyjs/ast" "1.8.3"
-    mamacro "^0.0.3"
-
-"@webassemblyjs/helper-wasm-bytecode@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz#dd9a1e817f1c2eb105b4cf1013093cb9f3c9cb06"
-  integrity sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==
-
-"@webassemblyjs/helper-wasm-bytecode@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.3.tgz#12f55bbafbbc7ddf9d8059a072cb7b0c17987901"
-  integrity sha512-R1nJW7bjyJLjsJQR5t3K/9LJ0QWuZezl8fGa49DZq4IVaejgvkbNlKEQxLYTC579zgT4IIIVHb5JA59uBPHXyw==
-
-"@webassemblyjs/helper-wasm-section@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz#9c9ac41ecf9fbcfffc96f6d2675e2de33811e68a"
-  integrity sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==
-  dependencies:
-    "@webassemblyjs/ast" "1.7.11"
-    "@webassemblyjs/helper-buffer" "1.7.11"
-    "@webassemblyjs/helper-wasm-bytecode" "1.7.11"
-    "@webassemblyjs/wasm-gen" "1.7.11"
-
-"@webassemblyjs/helper-wasm-section@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.3.tgz#9e79456d9719e116f4f8998ee62ab54ba69a6cf3"
-  integrity sha512-P6F7D61SJY73Yz+fs49Q3+OzlYAZP86OfSpaSY448KzUy65NdfzDmo2NPVte+Rw4562MxEAacvq/mnDuvRWOcg==
-  dependencies:
-    "@webassemblyjs/ast" "1.8.3"
-    "@webassemblyjs/helper-buffer" "1.8.3"
-    "@webassemblyjs/helper-wasm-bytecode" "1.8.3"
-    "@webassemblyjs/wasm-gen" "1.8.3"
-
-"@webassemblyjs/ieee754@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz#c95839eb63757a31880aaec7b6512d4191ac640b"
-  integrity sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==
-  dependencies:
-    "@xtuc/ieee754" "^1.2.0"
-
-"@webassemblyjs/ieee754@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.3.tgz#0a89355b1f6c9d08d0605c2acbc2a6fe3141f5b4"
-  integrity sha512-UD4HuLU99hjIvWz1pD68b52qsepWQlYCxDYVFJQfHh3BHyeAyAlBJ+QzLR1nnS5J6hAzjki3I3AoJeobNNSZlg==
-  dependencies:
-    "@xtuc/ieee754" "^1.2.0"
-
-"@webassemblyjs/leb128@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz#d7267a1ee9c4594fd3f7e37298818ec65687db63"
-  integrity sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==
-  dependencies:
-    "@xtuc/long" "4.2.1"
-
-"@webassemblyjs/leb128@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.3.tgz#b7fd9d7c039e34e375c4473bd4dc89ce8228b920"
-  integrity sha512-XXd3s1BmkC1gpGABuCRLqCGOD6D2L+Ma2BpwpjrQEHeQATKWAQtxAyU9Z14/z8Ryx6IG+L4/NDkIGHrccEhRUg==
-  dependencies:
-    "@xtuc/long" "4.2.2"
-
-"@webassemblyjs/utf8@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz#06d7218ea9fdc94a6793aa92208160db3d26ee82"
-  integrity sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==
-
-"@webassemblyjs/utf8@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.3.tgz#75712db52cfdda868731569ddfe11046f1f1e7a2"
-  integrity sha512-Wv/WH9Zo5h5ZMyfCNpUrjFsLZ3X1amdfEuwdb7MLdG3cPAjRS6yc6ElULlpjLiiBTuzvmLhr3ENsuGyJ3wyCgg==
-
-"@webassemblyjs/wasm-edit@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz#8c74ca474d4f951d01dbae9bd70814ee22a82005"
-  integrity sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==
-  dependencies:
-    "@webassemblyjs/ast" "1.7.11"
-    "@webassemblyjs/helper-buffer" "1.7.11"
-    "@webassemblyjs/helper-wasm-bytecode" "1.7.11"
-    "@webassemblyjs/helper-wasm-section" "1.7.11"
-    "@webassemblyjs/wasm-gen" "1.7.11"
-    "@webassemblyjs/wasm-opt" "1.7.11"
-    "@webassemblyjs/wasm-parser" "1.7.11"
-    "@webassemblyjs/wast-printer" "1.7.11"
-
-"@webassemblyjs/wasm-edit@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.3.tgz#23c3c6206b096f9f6aa49623a5310a102ef0fb87"
-  integrity sha512-nB19eUx3Yhi1Vvv3yev5r+bqQixZprMtaoCs1brg9Efyl8Hto3tGaUoZ0Yb4Umn/gQCyoEGFfUxPLp1/8+Jvnw==
-  dependencies:
-    "@webassemblyjs/ast" "1.8.3"
-    "@webassemblyjs/helper-buffer" "1.8.3"
-    "@webassemblyjs/helper-wasm-bytecode" "1.8.3"
-    "@webassemblyjs/helper-wasm-section" "1.8.3"
-    "@webassemblyjs/wasm-gen" "1.8.3"
-    "@webassemblyjs/wasm-opt" "1.8.3"
-    "@webassemblyjs/wasm-parser" "1.8.3"
-    "@webassemblyjs/wast-printer" "1.8.3"
-
-"@webassemblyjs/wasm-gen@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz#9bbba942f22375686a6fb759afcd7ac9c45da1a8"
-  integrity sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==
-  dependencies:
-    "@webassemblyjs/ast" "1.7.11"
-    "@webassemblyjs/helper-wasm-bytecode" "1.7.11"
-    "@webassemblyjs/ieee754" "1.7.11"
-    "@webassemblyjs/leb128" "1.7.11"
-    "@webassemblyjs/utf8" "1.7.11"
-
-"@webassemblyjs/wasm-gen@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.3.tgz#1a433b8ab97e074e6ac2e25fcbc8cb6125400813"
-  integrity sha512-sDNmu2nLBJZ/huSzlJvd9IK8B1EjCsOl7VeMV9VJPmxKYgTJ47lbkSP+KAXMgZWGcArxmcrznqm7FrAPQ7vVGg==
-  dependencies:
-    "@webassemblyjs/ast" "1.8.3"
-    "@webassemblyjs/helper-wasm-bytecode" "1.8.3"
-    "@webassemblyjs/ieee754" "1.8.3"
-    "@webassemblyjs/leb128" "1.8.3"
-    "@webassemblyjs/utf8" "1.8.3"
-
-"@webassemblyjs/wasm-opt@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz#b331e8e7cef8f8e2f007d42c3a36a0580a7d6ca7"
-  integrity sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==
-  dependencies:
-    "@webassemblyjs/ast" "1.7.11"
-    "@webassemblyjs/helper-buffer" "1.7.11"
-    "@webassemblyjs/wasm-gen" "1.7.11"
-    "@webassemblyjs/wasm-parser" "1.7.11"
-
-"@webassemblyjs/wasm-opt@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.3.tgz#54754bcf88f88e92b909416a91125301cc81419c"
-  integrity sha512-j8lmQVFR+FR4/645VNgV4R/Jz8i50eaPAj93GZyd3EIJondVshE/D9pivpSDIXyaZt+IkCodlzOoZUE4LnQbeA==
-  dependencies:
-    "@webassemblyjs/ast" "1.8.3"
-    "@webassemblyjs/helper-buffer" "1.8.3"
-    "@webassemblyjs/wasm-gen" "1.8.3"
-    "@webassemblyjs/wasm-parser" "1.8.3"
-
-"@webassemblyjs/wasm-parser@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz#6e3d20fa6a3519f6b084ef9391ad58211efb0a1a"
-  integrity sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==
-  dependencies:
-    "@webassemblyjs/ast" "1.7.11"
-    "@webassemblyjs/helper-api-error" "1.7.11"
-    "@webassemblyjs/helper-wasm-bytecode" "1.7.11"
-    "@webassemblyjs/ieee754" "1.7.11"
-    "@webassemblyjs/leb128" "1.7.11"
-    "@webassemblyjs/utf8" "1.7.11"
-
-"@webassemblyjs/wasm-parser@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.3.tgz#d12ed19d1b8e8667a7bee040d2245aaaf215340b"
-  integrity sha512-NBI3SNNtRoy4T/KBsRZCAWUzE9lI94RH2nneLwa1KKIrt/2zzcTavWg6oY05ArCbb/PZDk3OUi63CD1RYtN65w==
-  dependencies:
-    "@webassemblyjs/ast" "1.8.3"
-    "@webassemblyjs/helper-api-error" "1.8.3"
-    "@webassemblyjs/helper-wasm-bytecode" "1.8.3"
-    "@webassemblyjs/ieee754" "1.8.3"
-    "@webassemblyjs/leb128" "1.8.3"
-    "@webassemblyjs/utf8" "1.8.3"
-
-"@webassemblyjs/wast-parser@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz#25bd117562ca8c002720ff8116ef9072d9ca869c"
-  integrity sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==
-  dependencies:
-    "@webassemblyjs/ast" "1.7.11"
-    "@webassemblyjs/floating-point-hex-parser" "1.7.11"
-    "@webassemblyjs/helper-api-error" "1.7.11"
-    "@webassemblyjs/helper-code-frame" "1.7.11"
-    "@webassemblyjs/helper-fsm" "1.7.11"
-    "@xtuc/long" "4.2.1"
-
-"@webassemblyjs/wast-parser@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.3.tgz#44aa123e145503e995045dc3e5e2770069da117b"
-  integrity sha512-gZPst4CNcmGtKC1eYQmgCx6gwQvxk4h/nPjfPBbRoD+Raw3Hs+BS3yhrfgyRKtlYP+BJ8LcY9iFODEQofl2qbg==
-  dependencies:
-    "@webassemblyjs/ast" "1.8.3"
-    "@webassemblyjs/floating-point-hex-parser" "1.8.3"
-    "@webassemblyjs/helper-api-error" "1.8.3"
-    "@webassemblyjs/helper-code-frame" "1.8.3"
-    "@webassemblyjs/helper-fsm" "1.8.3"
-    "@xtuc/long" "4.2.2"
-
-"@webassemblyjs/wast-printer@1.7.11":
-  version "1.7.11"
-  resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz#c4245b6de242cb50a2cc950174fdbf65c78d7813"
-  integrity sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==
-  dependencies:
-    "@webassemblyjs/ast" "1.7.11"
-    "@webassemblyjs/wast-parser" "1.7.11"
-    "@xtuc/long" "4.2.1"
-
-"@webassemblyjs/wast-printer@1.8.3":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.3.tgz#b1177780b266b1305f2eeba87c4d6aa732352060"
-  integrity sha512-DTA6kpXuHK4PHu16yAD9QVuT1WZQRT7079oIFFmFSjqjLWGXS909I/7kiLTn931mcj7wGsaUNungjwNQ2lGQ3Q==
-  dependencies:
-    "@webassemblyjs/ast" "1.8.3"
-    "@webassemblyjs/wast-parser" "1.8.3"
-    "@xtuc/long" "4.2.2"
-
-"@xtuc/ieee754@^1.2.0":
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
-  integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
-
-"@xtuc/long@4.2.1":
-  version "4.2.1"
-  resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8"
-  integrity sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==
-
-"@xtuc/long@4.2.2":
-  version "4.2.2"
-  resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
-  integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
-
-abab@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f"
-  integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==
-
-abbrev@1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
-  integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-
-abs-svg-path@~0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf"
-  integrity sha1-32Acjo0roQ1KdtYl4japo5wnI78=
-
-accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
-  version "1.3.7"
-  resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
-  integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
-  dependencies:
-    mime-types "~2.1.24"
-    negotiator "0.6.2"
-
-acorn-dynamic-import@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278"
-  integrity sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==
-  dependencies:
-    acorn "^5.0.0"
-
-acorn-dynamic-import@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948"
-  integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==
-
-acorn-globals@^4.1.0:
-  version "4.3.2"
-  resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz#4e2c2313a597fd589720395f6354b41cd5ec8006"
-  integrity sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==
-  dependencies:
-    acorn "^6.0.1"
-    acorn-walk "^6.0.1"
-
-acorn-jsx@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
-  integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=
-  dependencies:
-    acorn "^3.0.4"
-
-acorn-jsx@^5.0.0:
-  version "5.0.1"
-  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e"
-  integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==
-
-acorn-walk@^6.0.1, acorn-walk@^6.1.1:
-  version "6.1.1"
-  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913"
-  integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==
-
-acorn@^3.0.4:
-  version "3.3.0"
-  resolved "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
-  integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
-
-acorn@^5.0.0, acorn@^5.5.0, acorn@^5.5.3, acorn@^5.6.2:
-  version "5.7.3"
-  resolved "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
-  integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
-
-acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.5, acorn@^6.0.7, acorn@^6.1.1:
-  version "6.1.1"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f"
-  integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==
-
-add-dom-event-listener@^1.0.2:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz#6a92db3a0dd0abc254e095c0f1dc14acbbaae310"
-  integrity sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==
-  dependencies:
-    object-assign "4.x"
-
-address@^1.0.3:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/address/-/address-1.1.0.tgz#ef8e047847fcd2c5b6f50c16965f924fd99fe709"
-  integrity sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ==
-
-ajv-errors@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
-  integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
-
-ajv-keywords@^2.1.0:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
-  integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=
-
-ajv-keywords@^3.1.0:
-  version "3.4.0"
-  resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d"
-  integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==
-
-ajv@^5.2.3, ajv@^5.3.0:
-  version "5.5.2"
-  resolved "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
-  integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=
-  dependencies:
-    co "^4.6.0"
-    fast-deep-equal "^1.0.0"
-    fast-json-stable-stringify "^2.0.0"
-    json-schema-traverse "^0.3.0"
-
-ajv@^6.1.0, ajv@^6.5.5:
-  version "6.10.0"
-  resolved "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1"
-  integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==
-  dependencies:
-    fast-deep-equal "^2.0.1"
-    fast-json-stable-stringify "^2.0.0"
-    json-schema-traverse "^0.4.1"
-    uri-js "^4.2.2"
-
-ajv@^6.9.1:
-  version "6.9.2"
-  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.9.2.tgz#4927adb83e7f48e5a32b45729744c71ec39c9c7b"
-  integrity sha512-4UFy0/LgDo7Oa/+wOAlj44tp9K78u38E5/359eSrqEp1Z5PdVfimCcs7SluXMP755RUQu6d2b4AvF0R1C9RZjg==
-  dependencies:
-    fast-deep-equal "^2.0.1"
-    fast-json-stable-stringify "^2.0.0"
-    json-schema-traverse "^0.4.1"
-    uri-js "^4.2.2"
-
-align-text@^0.1.1, align-text@^0.1.3:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
-  integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
-  dependencies:
-    kind-of "^3.0.2"
-    longest "^1.0.1"
-    repeat-string "^1.5.2"
-
-alphanum-sort@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
-  integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
-
-amdefine@>=0.0.4:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
-  integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
-
-ansi-colors@^3.0.0:
-  version "3.2.4"
-  resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
-  integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
-
-ansi-escapes@^1.1.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
-  integrity sha1-06ioOzGapneTZisT52HHkRQiMG4=
-
-ansi-escapes@^3.0.0, ansi-escapes@^3.2.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
-  integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
-
-ansi-html@0.0.7:
-  version "0.0.7"
-  resolved "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
-  integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4=
-
-ansi-regex@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
-  integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
-
-ansi-regex@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
-  integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
-
-ansi-regex@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
-  integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
-
-ansi-styles@^2.2.1:
-  version "2.2.1"
-  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
-  integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
-
-ansi-styles@^3.2.0, ansi-styles@^3.2.1:
-  version "3.2.1"
-  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
-  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
-  dependencies:
-    color-convert "^1.9.0"
-
-ant-design-palettes@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/ant-design-palettes/-/ant-design-palettes-1.1.3.tgz#84119b1a4d86363adc52a38d587e65336a0a27dd"
-  integrity sha512-UpkkTp8egEN21KZNvY7sTcabLlkHvLvS71EVPk4CYi77Z9AaGGCaVn7i72tbOgWDrQp2wjIg8WgMbKBdK7GtWA==
-  dependencies:
-    tinycolor2 "^1.4.1"
-
-ant-design-vue@~1.3.9:
-  version "1.3.9"
-  resolved "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-1.3.9.tgz#089b197be755b633196660a5ba97b6c8752c0cf5"
-  integrity sha512-Zw/5+4FyJI9PeOGW2uJ21/aaHAsyhAL+umNR2qHkKeTrmP2OJ6FXm00VNFTKeDdzSqAw8weiPfYT/0wJt1rqWw==
-  dependencies:
-    "@ant-design/icons" "^1.1.15"
-    "@ant-design/icons-vue" "^1.0.1"
-    add-dom-event-listener "^1.0.2"
-    array-tree-filter "^2.1.0"
-    async-validator "^1.8.2"
-    babel-helper-vue-jsx-merge-props "^2.0.3"
-    babel-runtime "6.x"
-    classnames "^2.2.5"
-    component-classes "^1.2.6"
-    dom-align "^1.7.0"
-    dom-closest "^0.2.0"
-    dom-scroll-into-view "^1.2.1"
-    enquire.js "^2.1.6"
-    intersperse "^1.0.0"
-    is-negative-zero "^2.0.0"
-    ismobilejs "^0.5.1"
-    json2mq "^0.2.0"
-    lodash "^4.17.5"
-    moment "^2.21.0"
-    mutationobserver-shim "^0.3.2"
-    omit.js "^1.0.0"
-    raf "^3.4.0"
-    resize-observer-polyfill "^1.5.1"
-    shallow-equal "^1.0.0"
-    shallowequal "^1.0.2"
-    vue-ref "^1.0.4"
-    warning "^3.0.0"
-
-any-promise@^1.0.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
-  integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
-
-anymatch@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
-  integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
-  dependencies:
-    micromatch "^3.1.4"
-    normalize-path "^2.1.1"
-
-append-transform@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991"
-  integrity sha1-126/jKlNJ24keja61EpLdKthGZE=
-  dependencies:
-    default-require-extensions "^1.0.0"
-
-aproba@^1.0.3, aproba@^1.1.1:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
-  integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
-
-arch@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e"
-  integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==
-
-are-we-there-yet@~1.1.2:
-  version "1.1.5"
-  resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
-  integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
-  dependencies:
-    delegates "^1.0.0"
-    readable-stream "^2.0.6"
-
-argparse@^1.0.7:
-  version "1.0.10"
-  resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
-  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
-  dependencies:
-    sprintf-js "~1.0.2"
-
-arr-diff@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
-  integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
-  dependencies:
-    arr-flatten "^1.0.1"
-
-arr-diff@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
-  integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
-
-arr-flatten@^1.0.1, arr-flatten@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
-  integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
-
-arr-union@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
-  integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
-
-array-equal@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
-  integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=
-
-array-filter@~0.0.0:
-  version "0.0.1"
-  resolved "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
-  integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw=
-
-array-flatten@1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
-  integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
-
-array-flatten@^2.1.0:
-  version "2.1.2"
-  resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
-  integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
-
-array-map@~0.0.0:
-  version "0.0.0"
-  resolved "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
-  integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=
-
-array-reduce@~0.0.0:
-  version "0.0.0"
-  resolved "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
-  integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=
-
-array-tree-filter@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190"
-  integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==
-
-array-union@^1.0.1, array-union@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
-  integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
-  dependencies:
-    array-uniq "^1.0.1"
-
-array-uniq@^1.0.1:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
-  integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
-
-array-unique@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
-  integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
-
-array-unique@^0.3.2:
-  version "0.3.2"
-  resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
-  integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
-
-arrify@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
-  integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
-
-asap@~2.0.3:
-  version "2.0.6"
-  resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
-  integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
-
-asn1.js@^4.0.0:
-  version "4.10.1"
-  resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
-  integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
-  dependencies:
-    bn.js "^4.0.0"
-    inherits "^2.0.1"
-    minimalistic-assert "^1.0.0"
-
-asn1@~0.2.3:
-  version "0.2.4"
-  resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
-  integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
-  dependencies:
-    safer-buffer "~2.1.0"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
-  integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
-
-assert@^1.1.1:
-  version "1.5.0"
-  resolved "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
-  integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
-  dependencies:
-    object-assign "^4.1.1"
-    util "0.10.3"
-
-assign-symbols@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
-  integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
-
-astral-regex@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
-  integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
-
-async-each@^1.0.1:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
-  integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
-
-async-limiter@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
-  integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
-
-async-validator@^1.8.2:
-  version "1.10.1"
-  resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-1.10.1.tgz#41e9b0b9f8e719e6edf946372f018a958c2e70f3"
-  integrity sha512-VLiLKZuJc8VIeAMC3YobVsZov8XPNhbwyIkKjhPW5cFnhZXH+HHJpkE270YMD/6zJIOJXUN/Cq0t3fR7XPwaDQ==
-  dependencies:
-    babel-runtime "6.x"
-
-async@^1.5.2:
-  version "1.5.2"
-  resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
-  integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
-
-async@^2.1.4:
-  version "2.6.2"
-  resolved "https://registry.npmjs.org/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381"
-  integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==
-  dependencies:
-    lodash "^4.17.11"
-
-asynckit@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-  integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
-
-atob@^2.1.1:
-  version "2.1.2"
-  resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
-  integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
-
-autoprefixer@^9.5.1:
-  version "9.5.1"
-  resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.1.tgz#243b1267b67e7e947f28919d786b50d3bb0fb357"
-  integrity sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==
-  dependencies:
-    browserslist "^4.5.4"
-    caniuse-lite "^1.0.30000957"
-    normalize-range "^0.1.2"
-    num2fraction "^1.2.2"
-    postcss "^7.0.14"
-    postcss-value-parser "^3.3.1"
-
-aws-sign2@~0.7.0:
-  version "0.7.0"
-  resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
-  integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
-
-aws4@^1.8.0:
-  version "1.8.0"
-  resolved "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
-  integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
-
-axios@^0.19.0:
-  version "0.19.0"
-  resolved "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8"
-  integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==
-  dependencies:
-    follow-redirects "1.5.10"
-    is-buffer "^2.0.2"
-
-babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
-  integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
-  dependencies:
-    chalk "^1.1.3"
-    esutils "^2.0.2"
-    js-tokens "^3.0.2"
-
-babel-core@7.0.0-bridge.0:
-  version "7.0.0-bridge.0"
-  resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
-  integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==
-
-babel-core@^6.0.0, babel-core@^6.26.0:
-  version "6.26.3"
-  resolved "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
-  integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==
-  dependencies:
-    babel-code-frame "^6.26.0"
-    babel-generator "^6.26.0"
-    babel-helpers "^6.24.1"
-    babel-messages "^6.23.0"
-    babel-register "^6.26.0"
-    babel-runtime "^6.26.0"
-    babel-template "^6.26.0"
-    babel-traverse "^6.26.0"
-    babel-types "^6.26.0"
-    babylon "^6.18.0"
-    convert-source-map "^1.5.1"
-    debug "^2.6.9"
-    json5 "^0.5.1"
-    lodash "^4.17.4"
-    minimatch "^3.0.4"
-    path-is-absolute "^1.0.1"
-    private "^0.1.8"
-    slash "^1.0.0"
-    source-map "^0.5.7"
-
-babel-eslint@^10.0.1:
-  version "10.0.1"
-  resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed"
-  integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==
-  dependencies:
-    "@babel/code-frame" "^7.0.0"
-    "@babel/parser" "^7.0.0"
-    "@babel/traverse" "^7.0.0"
-    "@babel/types" "^7.0.0"
-    eslint-scope "3.7.1"
-    eslint-visitor-keys "^1.0.0"
-
-babel-generator@^6.18.0, babel-generator@^6.26.0:
-  version "6.26.1"
-  resolved "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
-  integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==
-  dependencies:
-    babel-messages "^6.23.0"
-    babel-runtime "^6.26.0"
-    babel-types "^6.26.0"
-    detect-indent "^4.0.0"
-    jsesc "^1.3.0"
-    lodash "^4.17.4"
-    source-map "^0.5.7"
-    trim-right "^1.0.1"
-
-babel-helper-vue-jsx-merge-props@^2.0.3:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6"
-  integrity sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==
-
-babel-helpers@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
-  integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=
-  dependencies:
-    babel-runtime "^6.22.0"
-    babel-template "^6.24.1"
-
-babel-jest@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1"
-  integrity sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==
-  dependencies:
-    babel-plugin-istanbul "^4.1.6"
-    babel-preset-jest "^23.2.0"
-
-babel-loader@^8.0.0-beta.0:
-  version "8.0.5"
-  resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.5.tgz#225322d7509c2157655840bba52e46b6c2f2fe33"
-  integrity sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==
-  dependencies:
-    find-cache-dir "^2.0.0"
-    loader-utils "^1.0.2"
-    mkdirp "^0.5.1"
-    util.promisify "^1.0.0"
-
-babel-loader@^8.0.5:
-  version "8.0.6"
-  resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb"
-  integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==
-  dependencies:
-    find-cache-dir "^2.0.0"
-    loader-utils "^1.0.2"
-    mkdirp "^0.5.1"
-    pify "^4.0.1"
-
-babel-messages@^6.23.0:
-  version "6.23.0"
-  resolved "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
-  integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
-  dependencies:
-    babel-runtime "^6.22.0"
-
-babel-plugin-dynamic-import-node@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz#c0adfb07d95f4a4495e9aaac6ec386c4d7c2524e"
-  integrity sha512-fP899ELUnTaBcIzmrW7nniyqqdYWrWuJUyPWHxFa/c7r7hS6KC8FscNfLlBNIoPSc55kYMGEEKjPjJGCLbE1qA==
-  dependencies:
-    object.assign "^4.1.0"
-
-babel-plugin-import@^1.11.0:
-  version "1.11.2"
-  resolved "https://registry.npmjs.org/babel-plugin-import/-/babel-plugin-import-1.11.2.tgz#7566459543656585382c60e99a9c751c6d09ff3d"
-  integrity sha512-Ja3LvQZEMqwxo3QkxRwq4pnl4F18kzd/eTbMFOP6MKtSecPajSXE22fZQcfBr5OQ/jWEwZY3PulIvrlDABNIEA==
-  dependencies:
-    "@babel/helper-module-imports" "^7.0.0"
-    "@babel/runtime" "^7.0.0"
-
-babel-plugin-istanbul@^4.1.6:
-  version "4.1.6"
-  resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45"
-  integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==
-  dependencies:
-    babel-plugin-syntax-object-rest-spread "^6.13.0"
-    find-up "^2.1.0"
-    istanbul-lib-instrument "^1.10.1"
-    test-exclude "^4.2.1"
-
-babel-plugin-jest-hoist@^23.2.0:
-  version "23.2.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167"
-  integrity sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=
-
-babel-plugin-module-resolver@3.2.0:
-  version "3.2.0"
-  resolved "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7"
-  integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==
-  dependencies:
-    find-babel-config "^1.1.0"
-    glob "^7.1.2"
-    pkg-up "^2.0.0"
-    reselect "^3.0.1"
-    resolve "^1.4.0"
-
-babel-plugin-syntax-object-rest-spread@^6.13.0:
-  version "6.13.0"
-  resolved "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
-  integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
-
-babel-plugin-transform-es2015-modules-commonjs@^6.26.0, babel-plugin-transform-es2015-modules-commonjs@^6.26.2:
-  version "6.26.2"
-  resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
-  integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==
-  dependencies:
-    babel-plugin-transform-strict-mode "^6.24.1"
-    babel-runtime "^6.26.0"
-    babel-template "^6.26.0"
-    babel-types "^6.26.0"
-
-babel-plugin-transform-runtime@^6.23.0:
-  version "6.23.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee"
-  integrity sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=
-  dependencies:
-    babel-runtime "^6.22.0"
-
-babel-plugin-transform-strict-mode@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
-  integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=
-  dependencies:
-    babel-runtime "^6.22.0"
-    babel-types "^6.24.1"
-
-babel-polyfill@6.23.0:
-  version "6.23.0"
-  resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d"
-  integrity sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=
-  dependencies:
-    babel-runtime "^6.22.0"
-    core-js "^2.4.0"
-    regenerator-runtime "^0.10.0"
-
-babel-preset-jest@^23.2.0:
-  version "23.2.0"
-  resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46"
-  integrity sha1-jsegOhOPABoaj7HoETZSvxpV2kY=
-  dependencies:
-    babel-plugin-jest-hoist "^23.2.0"
-    babel-plugin-syntax-object-rest-spread "^6.13.0"
-
-babel-register@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
-  integrity sha1-btAhFz4vy0htestFxgCahW9kcHE=
-  dependencies:
-    babel-core "^6.26.0"
-    babel-runtime "^6.26.0"
-    core-js "^2.5.0"
-    home-or-tmp "^2.0.0"
-    lodash "^4.17.4"
-    mkdirp "^0.5.1"
-    source-map-support "^0.4.15"
-
-babel-runtime@6.x, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
-  integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
-  dependencies:
-    core-js "^2.4.0"
-    regenerator-runtime "^0.11.0"
-
-babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
-  integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=
-  dependencies:
-    babel-runtime "^6.26.0"
-    babel-traverse "^6.26.0"
-    babel-types "^6.26.0"
-    babylon "^6.18.0"
-    lodash "^4.17.4"
-
-babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
-  integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
-  dependencies:
-    babel-code-frame "^6.26.0"
-    babel-messages "^6.23.0"
-    babel-runtime "^6.26.0"
-    babel-types "^6.26.0"
-    babylon "^6.18.0"
-    debug "^2.6.8"
-    globals "^9.18.0"
-    invariant "^2.2.2"
-    lodash "^4.17.4"
-
-babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
-  integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
-  dependencies:
-    babel-runtime "^6.26.0"
-    esutils "^2.0.2"
-    lodash "^4.17.4"
-    to-fast-properties "^1.0.3"
-
-babylon@^6.18.0:
-  version "6.18.0"
-  resolved "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
-  integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
-
-balanced-match@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
-  integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
-
-base64-js@^1.0.2:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
-  integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
-
-base@^0.11.1:
-  version "0.11.2"
-  resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
-  integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
-  dependencies:
-    cache-base "^1.0.1"
-    class-utils "^0.3.5"
-    component-emitter "^1.2.1"
-    define-property "^1.0.0"
-    isobject "^3.0.1"
-    mixin-deep "^1.2.0"
-    pascalcase "^0.1.1"
-
-batch@0.6.1:
-  version "0.6.1"
-  resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
-  integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
-
-bcrypt-pbkdf@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
-  integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
-  dependencies:
-    tweetnacl "^0.14.3"
-
-bfj@^6.1.1:
-  version "6.1.1"
-  resolved "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz#05a3b7784fbd72cfa3c22e56002ef99336516c48"
-  integrity sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==
-  dependencies:
-    bluebird "^3.5.1"
-    check-types "^7.3.0"
-    hoopy "^0.1.2"
-    tryer "^1.0.0"
-
-big.js@^3.1.3:
-  version "3.2.0"
-  resolved "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
-  integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==
-
-big.js@^5.2.2:
-  version "5.2.2"
-  resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
-  integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
-
-binary-extensions@^1.0.0:
-  version "1.13.1"
-  resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
-  integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
-
-bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.3:
-  version "3.5.4"
-  resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714"
-  integrity sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==
-
-bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
-  version "4.11.8"
-  resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
-  integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
-
-body-parser@1.19.0:
-  version "1.19.0"
-  resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
-  integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
-  dependencies:
-    bytes "3.1.0"
-    content-type "~1.0.4"
-    debug "2.6.9"
-    depd "~1.1.2"
-    http-errors "1.7.2"
-    iconv-lite "0.4.24"
-    on-finished "~2.3.0"
-    qs "6.7.0"
-    raw-body "2.4.0"
-    type-is "~1.6.17"
-
-bonjour@^3.5.0:
-  version "3.5.0"
-  resolved "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
-  integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU=
-  dependencies:
-    array-flatten "^2.1.0"
-    deep-equal "^1.0.1"
-    dns-equal "^1.0.0"
-    dns-txt "^2.0.2"
-    multicast-dns "^6.0.1"
-    multicast-dns-service-types "^1.1.0"
-
-boolbase@^1.0.0, boolbase@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
-  integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
-
-brace-expansion@^1.1.7:
-  version "1.1.11"
-  resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
-  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
-  dependencies:
-    balanced-match "^1.0.0"
-    concat-map "0.0.1"
-
-braces@^1.8.2:
-  version "1.8.5"
-  resolved "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
-  integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
-  dependencies:
-    expand-range "^1.8.1"
-    preserve "^0.2.0"
-    repeat-element "^1.1.2"
-
-braces@^2.3.1, braces@^2.3.2:
-  version "2.3.2"
-  resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
-  integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
-  dependencies:
-    arr-flatten "^1.1.0"
-    array-unique "^0.3.2"
-    extend-shallow "^2.0.1"
-    fill-range "^4.0.0"
-    isobject "^3.0.1"
-    repeat-element "^1.1.2"
-    snapdragon "^0.8.1"
-    snapdragon-node "^2.0.1"
-    split-string "^3.0.2"
-    to-regex "^3.0.1"
-
-brorand@^1.0.1:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
-  integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
-
-browser-process-hrtime@^0.1.2:
-  version "0.1.3"
-  resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4"
-  integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==
-
-browser-resolve@^1.11.3:
-  version "1.11.3"
-  resolved "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
-  integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
-  dependencies:
-    resolve "1.1.7"
-
-browserify-aes@^1.0.0, browserify-aes@^1.0.4:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
-  integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
-  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"
-
-browserify-cipher@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
-  integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
-  dependencies:
-    browserify-aes "^1.0.4"
-    browserify-des "^1.0.0"
-    evp_bytestokey "^1.0.0"
-
-browserify-des@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
-  integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
-  dependencies:
-    cipher-base "^1.0.1"
-    des.js "^1.0.0"
-    inherits "^2.0.1"
-    safe-buffer "^5.1.2"
-
-browserify-rsa@^4.0.0:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
-  integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
-  dependencies:
-    bn.js "^4.1.0"
-    randombytes "^2.0.1"
-
-browserify-sign@^4.0.0:
-  version "4.0.4"
-  resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
-  integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
-  dependencies:
-    bn.js "^4.1.1"
-    browserify-rsa "^4.0.0"
-    create-hash "^1.1.0"
-    create-hmac "^1.1.2"
-    elliptic "^6.0.0"
-    inherits "^2.0.1"
-    parse-asn1 "^5.0.0"
-
-browserify-zlib@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
-  integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
-  dependencies:
-    pako "~1.0.5"
-
-browserslist@^4.0.0, browserslist@^4.3.4, browserslist@^4.5.4:
-  version "4.6.0"
-  resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz#5274028c26f4d933d5b1323307c1d1da5084c9ff"
-  integrity sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==
-  dependencies:
-    caniuse-lite "^1.0.30000967"
-    electron-to-chromium "^1.3.133"
-    node-releases "^1.1.19"
-
-bser@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
-  integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=
-  dependencies:
-    node-int64 "^0.4.0"
-
-buffer-from@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
-  integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
-
-buffer-indexof@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
-  integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
-
-buffer-xor@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
-  integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
-
-buffer@^4.3.0:
-  version "4.9.1"
-  resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
-  integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
-  dependencies:
-    base64-js "^1.0.2"
-    ieee754 "^1.1.4"
-    isarray "^1.0.0"
-
-builtin-status-codes@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
-  integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
-
-bytes@3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
-  integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
-
-bytes@3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
-  integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
-
-cacache@^10.0.4:
-  version "10.0.4"
-  resolved "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460"
-  integrity sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==
-  dependencies:
-    bluebird "^3.5.1"
-    chownr "^1.0.1"
-    glob "^7.1.2"
-    graceful-fs "^4.1.11"
-    lru-cache "^4.1.1"
-    mississippi "^2.0.0"
-    mkdirp "^0.5.1"
-    move-concurrently "^1.0.1"
-    promise-inflight "^1.0.1"
-    rimraf "^2.6.2"
-    ssri "^5.2.4"
-    unique-filename "^1.1.0"
-    y18n "^4.0.0"
-
-cacache@^11.3.2:
-  version "11.3.2"
-  resolved "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa"
-  integrity sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==
-  dependencies:
-    bluebird "^3.5.3"
-    chownr "^1.1.1"
-    figgy-pudding "^3.5.1"
-    glob "^7.1.3"
-    graceful-fs "^4.1.15"
-    lru-cache "^5.1.1"
-    mississippi "^3.0.0"
-    mkdirp "^0.5.1"
-    move-concurrently "^1.0.1"
-    promise-inflight "^1.0.1"
-    rimraf "^2.6.2"
-    ssri "^6.0.1"
-    unique-filename "^1.1.1"
-    y18n "^4.0.0"
-
-cache-base@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
-  integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
-  dependencies:
-    collection-visit "^1.0.0"
-    component-emitter "^1.2.1"
-    get-value "^2.0.6"
-    has-value "^1.0.0"
-    isobject "^3.0.1"
-    set-value "^2.0.0"
-    to-object-path "^0.3.0"
-    union-value "^1.0.0"
-    unset-value "^1.0.0"
-
-cache-loader@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/cache-loader/-/cache-loader-2.0.1.tgz#5758f41a62d7c23941e3c3c7016e6faeb03acb07"
-  integrity sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ==
-  dependencies:
-    loader-utils "^1.1.0"
-    mkdirp "^0.5.1"
-    neo-async "^2.6.0"
-    normalize-path "^3.0.0"
-    schema-utils "^1.0.0"
-
-call-me-maybe@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
-  integrity sha1-JtII6onje1y95gJQoV8DHBak1ms=
-
-caller-callsite@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
-  integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
-  dependencies:
-    callsites "^2.0.0"
-
-caller-path@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
-  integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
-  dependencies:
-    callsites "^0.2.0"
-
-caller-path@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
-  integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
-  dependencies:
-    caller-callsite "^2.0.0"
-
-callsites@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
-  integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
-
-callsites@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
-  integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
-
-callsites@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3"
-  integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==
-
-camel-case@3.0.x:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
-  integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=
-  dependencies:
-    no-case "^2.2.0"
-    upper-case "^1.1.1"
-
-camelcase@^1.0.2:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
-  integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
-
-camelcase@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
-  integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
-
-camelcase@^5.0.0:
-  version "5.3.1"
-  resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
-  integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-
-caniuse-api@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
-  integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
-  dependencies:
-    browserslist "^4.0.0"
-    caniuse-lite "^1.0.0"
-    lodash.memoize "^4.1.2"
-    lodash.uniq "^4.5.0"
-
-caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000957, caniuse-lite@^1.0.30000967:
-  version "1.0.30000971"
-  resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000971.tgz#d1000e4546486a6977756547352bc96a4cfd2b13"
-  integrity sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g==
-
-capture-exit@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f"
-  integrity sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=
-  dependencies:
-    rsvp "^3.3.3"
-
-case-sensitive-paths-webpack-plugin@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz#3371ef6365ef9c25fa4b81c16ace0e9c7dc58c3e"
-  integrity sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g==
-
-caseless@~0.12.0:
-  version "0.12.0"
-  resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
-  integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
-
-center-align@^0.1.1:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
-  integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
-  dependencies:
-    align-text "^0.1.3"
-    lazy-cache "^1.0.3"
-
-chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
-  integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
-  dependencies:
-    ansi-styles "^2.2.1"
-    escape-string-regexp "^1.0.2"
-    has-ansi "^2.0.0"
-    strip-ansi "^3.0.0"
-    supports-color "^2.0.0"
-
-chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
-  version "2.4.2"
-  resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
-  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
-  dependencies:
-    ansi-styles "^3.2.1"
-    escape-string-regexp "^1.0.5"
-    supports-color "^5.3.0"
-
-chardet@^0.4.0:
-  version "0.4.2"
-  resolved "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
-  integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
-
-chardet@^0.7.0:
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
-  integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
-
-charenc@~0.0.1:
-  version "0.0.2"
-  resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
-  integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=
-
-check-types@^7.3.0:
-  version "7.4.0"
-  resolved "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4"
-  integrity sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==
-
-chokidar@^2.0.2, chokidar@^2.1.6:
-  version "2.1.6"
-  resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5"
-  integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==
-  dependencies:
-    anymatch "^2.0.0"
-    async-each "^1.0.1"
-    braces "^2.3.2"
-    glob-parent "^3.1.0"
-    inherits "^2.0.3"
-    is-binary-path "^1.0.0"
-    is-glob "^4.0.0"
-    normalize-path "^3.0.0"
-    path-is-absolute "^1.0.0"
-    readdirp "^2.2.1"
-    upath "^1.1.1"
-  optionalDependencies:
-    fsevents "^1.2.7"
-
-chownr@^1.0.1, chownr@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
-  integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
-
-chrome-trace-event@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48"
-  integrity sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==
-  dependencies:
-    tslib "^1.9.0"
-
-ci-info@^1.5.0:
-  version "1.6.0"
-  resolved "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497"
-  integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==
-
-cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
-  integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
-  dependencies:
-    inherits "^2.0.1"
-    safe-buffer "^5.0.1"
-
-circular-json@^0.3.1:
-  version "0.3.3"
-  resolved "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
-  integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
-
-class-utils@^0.3.5:
-  version "0.3.6"
-  resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
-  integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
-  dependencies:
-    arr-union "^3.1.0"
-    define-property "^0.2.5"
-    isobject "^3.0.0"
-    static-extend "^0.1.1"
-
-classnames@^2.2.5:
-  version "2.2.6"
-  resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
-  integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
-
-clean-css@4.2.x:
-  version "4.2.1"
-  resolved "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17"
-  integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==
-  dependencies:
-    source-map "~0.6.0"
-
-cli-cursor@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
-  integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
-  dependencies:
-    restore-cursor "^2.0.0"
-
-cli-highlight@^2.1.0:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.1.tgz#2180223d51618b112f4509cf96e4a6c750b07e97"
-  integrity sha512-0y0VlNmdD99GXZHYnvrQcmHxP8Bi6T00qucGgBgGv4kJ0RyDthNnnFPupHV7PYv/OXSVk+azFbOeaW6+vGmx9A==
-  dependencies:
-    chalk "^2.3.0"
-    highlight.js "^9.6.0"
-    mz "^2.4.0"
-    parse5 "^4.0.0"
-    yargs "^13.0.0"
-
-cli-spinners@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.1.0.tgz#22c34b4d51f573240885b201efda4e4ec9fff3c7"
-  integrity sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA==
-
-cli-width@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
-  integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
-
-clipboard@^2.0.0:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d"
-  integrity sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==
-  dependencies:
-    good-listener "^1.2.2"
-    select "^1.1.2"
-    tiny-emitter "^2.0.0"
-
-clipboardy@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/clipboardy/-/clipboardy-2.0.0.tgz#3fcee421fdeca4e6a62ce72b66f3eb0c42165acd"
-  integrity sha512-XbVjHMsss0giNUkp/tV/3eEAZe8i1fZTLzmPKqjE1RGIAWOTiF5D014f6R+g53ZAq0IK3cPrJXFvqE8eQjhFYQ==
-  dependencies:
-    arch "^2.1.1"
-    execa "^1.0.0"
-
-cliui@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
-  integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
-  dependencies:
-    center-align "^0.1.1"
-    right-align "^0.1.1"
-    wordwrap "0.0.2"
-
-cliui@^4.0.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
-  integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==
-  dependencies:
-    string-width "^2.1.1"
-    strip-ansi "^4.0.0"
-    wrap-ansi "^2.0.0"
-
-cliui@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
-  integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
-  dependencies:
-    string-width "^3.1.0"
-    strip-ansi "^5.2.0"
-    wrap-ansi "^5.1.0"
-
-clone@2.x, clone@^2.1.1, clone@^2.1.2:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
-  integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
-
-clone@^1.0.2:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
-  integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
-
-co@^4.6.0:
-  version "4.6.0"
-  resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
-  integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
-
-coa@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
-  integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==
-  dependencies:
-    "@types/q" "^1.5.1"
-    chalk "^2.4.1"
-    q "^1.1.2"
-
-code-point-at@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
-  integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
-
-collection-visit@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
-  integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
-  dependencies:
-    map-visit "^1.0.0"
-    object-visit "^1.0.0"
-
-color-convert@^1.9.0, color-convert@^1.9.1:
-  version "1.9.3"
-  resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
-  integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
-  dependencies:
-    color-name "1.1.3"
-
-color-name@1.1.3:
-  version "1.1.3"
-  resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
-  integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-
-color-name@^1.0.0:
-  version "1.1.4"
-  resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
-  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-
-color-string@^1.5.2:
-  version "1.5.3"
-  resolved "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
-  integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==
-  dependencies:
-    color-name "^1.0.0"
-    simple-swizzle "^0.2.2"
-
-color@^3.0.0:
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/color/-/color-3.1.1.tgz#7abf5c0d38e89378284e873c207ae2172dcc8a61"
-  integrity sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==
-  dependencies:
-    color-convert "^1.9.1"
-    color-string "^1.5.2"
-
-combined-stream@^1.0.6, combined-stream@~1.0.6:
-  version "1.0.8"
-  resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
-  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
-  dependencies:
-    delayed-stream "~1.0.0"
-
-commander@*, commander@^2.18.0, commander@^2.19.0, commander@~2.20.0:
-  version "2.20.0"
-  resolved "http://registry.npm.taobao.org/commander/download/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
-  integrity sha1-1YuytcHuj4ew00ACfp6U4iLFpCI=
-
-commander@2, commander@~2.19.0:
-  version "2.19.0"
-  resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
-  integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
-
-commander@2.17.x:
-  version "2.17.1"
-  resolved "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
-  integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
-
-commondir@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
-  integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
-
-component-classes@^1.2.6:
-  version "1.2.6"
-  resolved "https://registry.yarnpkg.com/component-classes/-/component-classes-1.2.6.tgz#c642394c3618a4d8b0b8919efccbbd930e5cd691"
-  integrity sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE=
-  dependencies:
-    component-indexof "0.0.3"
-
-component-emitter@^1.2.1:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
-  integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
-
-component-indexof@0.0.3:
-  version "0.0.3"
-  resolved "https://registry.yarnpkg.com/component-indexof/-/component-indexof-0.0.3.tgz#11d091312239eb8f32c8f25ae9cb002ffe8d3c24"
-  integrity sha1-EdCRMSI5648yyPJa6csAL/6NPCQ=
-
-compressible@~2.0.16:
-  version "2.0.17"
-  resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1"
-  integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==
-  dependencies:
-    mime-db ">= 1.40.0 < 2"
-
-compression@^1.7.4:
-  version "1.7.4"
-  resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
-  integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
-  dependencies:
-    accepts "~1.3.5"
-    bytes "3.0.0"
-    compressible "~2.0.16"
-    debug "2.6.9"
-    on-headers "~1.0.2"
-    safe-buffer "5.1.2"
-    vary "~1.1.2"
-
-concat-map@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-
-concat-stream@^1.5.0, concat-stream@^1.6.0:
-  version "1.6.2"
-  resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
-  integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
-  dependencies:
-    buffer-from "^1.0.0"
-    inherits "^2.0.3"
-    readable-stream "^2.2.2"
-    typedarray "^0.0.6"
-
-condense-newlines@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz#3de985553139475d32502c83b02f60684d24c55f"
-  integrity sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-whitespace "^0.3.0"
-    kind-of "^3.0.2"
-
-config-chain@^1.1.12:
-  version "1.1.12"
-  resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa"
-  integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==
-  dependencies:
-    ini "^1.3.4"
-    proto-list "~1.2.1"
-
-connect-history-api-fallback@^1.6.0:
-  version "1.6.0"
-  resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
-  integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
-
-console-browserify@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
-  integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
-  dependencies:
-    date-now "^0.1.4"
-
-console-control-strings@^1.0.0, console-control-strings@~1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
-  integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
-
-consolidate@^0.15.1:
-  version "0.15.1"
-  resolved "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7"
-  integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==
-  dependencies:
-    bluebird "^3.1.1"
-
-constants-browserify@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
-  integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
-
-contains-path@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
-  integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
-
-content-disposition@0.5.3:
-  version "0.5.3"
-  resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
-  integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
-  dependencies:
-    safe-buffer "5.1.2"
-
-content-type@~1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
-  integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
-
-contour_plot@^0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/contour_plot/-/contour_plot-0.0.1.tgz#475870f032b8e338412aa5fc507880f0bf495c77"
-  integrity sha1-R1hw8DK44zhBKqX8UHiA8L9JXHc=
-
-convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1:
-  version "1.6.0"
-  resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
-  integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
-  dependencies:
-    safe-buffer "~5.1.1"
-
-cookie-signature@1.0.6:
-  version "1.0.6"
-  resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
-  integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
-
-cookie@0.4.0:
-  version "0.4.0"
-  resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
-  integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
-
-copy-concurrently@^1.0.0:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
-  integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
-  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"
-
-copy-descriptor@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
-  integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
-
-copy-webpack-plugin@^4.6.0:
-  version "4.6.0"
-  resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz#e7f40dd8a68477d405dd1b7a854aae324b158bae"
-  integrity sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==
-  dependencies:
-    cacache "^10.0.4"
-    find-cache-dir "^1.0.0"
-    globby "^7.1.1"
-    is-glob "^4.0.0"
-    loader-utils "^1.1.0"
-    minimatch "^3.0.4"
-    p-limit "^1.0.0"
-    serialize-javascript "^1.4.0"
-
-core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7:
-  version "2.6.8"
-  resolved "https://registry.npmjs.org/core-js/-/core-js-2.6.8.tgz#dc3a1e633a04267944e0cb850d3880f340248139"
-  integrity sha512-RWlREFU74TEkdXzyl1bka66O3kYp8jeTXrvJZDzVVMH8AiHUSOFpL1yfhQJ+wHocAm1m+4971W1PPzfLuCv1vg==
-
-core-js@^2.6.5:
-  version "2.6.5"
-  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895"
-  integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==
-
-core-util-is@1.0.2, core-util-is@~1.0.0:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-  integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-cosmiconfig@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc"
-  integrity sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==
-  dependencies:
-    is-directory "^0.3.1"
-    js-yaml "^3.9.0"
-    parse-json "^4.0.0"
-    require-from-string "^2.0.1"
-
-cosmiconfig@^5.0.0:
-  version "5.2.1"
-  resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
-  integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
-  dependencies:
-    import-fresh "^2.0.0"
-    is-directory "^0.3.1"
-    js-yaml "^3.13.1"
-    parse-json "^4.0.0"
-
-create-ecdh@^4.0.0:
-  version "4.0.3"
-  resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
-  integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
-  dependencies:
-    bn.js "^4.1.0"
-    elliptic "^6.0.0"
-
-create-hash@^1.1.0, create-hash@^1.1.2:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
-  integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
-  dependencies:
-    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@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
-  version "1.1.7"
-  resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
-  integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
-  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"
-
-cross-spawn@^5.0.1, cross-spawn@^5.1.0:
-  version "5.1.0"
-  resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
-  integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
-  dependencies:
-    lru-cache "^4.0.1"
-    shebang-command "^1.2.0"
-    which "^1.2.9"
-
-cross-spawn@^6.0.0, cross-spawn@^6.0.5:
-  version "6.0.5"
-  resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
-  integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
-  dependencies:
-    nice-try "^1.0.4"
-    path-key "^2.0.1"
-    semver "^5.5.0"
-    shebang-command "^1.2.0"
-    which "^1.2.9"
-
-crypt@~0.0.1:
-  version "0.0.2"
-  resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
-  integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=
-
-crypto-browserify@^3.11.0:
-  version "3.12.0"
-  resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
-  integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
-  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"
-
-css-color-names@0.0.4, css-color-names@^0.0.4:
-  version "0.0.4"
-  resolved "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
-  integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
-
-css-declaration-sorter@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22"
-  integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==
-  dependencies:
-    postcss "^7.0.1"
-    timsort "^0.3.0"
-
-css-loader@^1.0.0, css-loader@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.1.tgz#6885bb5233b35ec47b006057da01cc640b6b79fe"
-  integrity sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==
-  dependencies:
-    babel-code-frame "^6.26.0"
-    css-selector-tokenizer "^0.7.0"
-    icss-utils "^2.1.0"
-    loader-utils "^1.0.2"
-    lodash "^4.17.11"
-    postcss "^6.0.23"
-    postcss-modules-extract-imports "^1.2.0"
-    postcss-modules-local-by-default "^1.2.0"
-    postcss-modules-scope "^1.1.0"
-    postcss-modules-values "^1.3.0"
-    postcss-value-parser "^3.3.0"
-    source-list-map "^2.0.0"
-
-css-select-base-adapter@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
-  integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==
-
-css-select@^1.1.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
-  integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
-  dependencies:
-    boolbase "~1.0.0"
-    css-what "2.1"
-    domutils "1.5.1"
-    nth-check "~1.0.1"
-
-css-select@^2.0.0:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz#ab4386cec9e1f668855564b17c3733b43b2a5ede"
-  integrity sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==
-  dependencies:
-    boolbase "^1.0.0"
-    css-what "^2.1.2"
-    domutils "^1.7.0"
-    nth-check "^1.0.2"
-
-css-selector-tokenizer@^0.7.0:
-  version "0.7.1"
-  resolved "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d"
-  integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==
-  dependencies:
-    cssesc "^0.1.0"
-    fastparse "^1.1.1"
-    regexpu-core "^1.0.0"
-
-css-tree@1.0.0-alpha.28:
-  version "1.0.0-alpha.28"
-  resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz#8e8968190d886c9477bc8d61e96f61af3f7ffa7f"
-  integrity sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==
-  dependencies:
-    mdn-data "~1.1.0"
-    source-map "^0.5.3"
-
-css-tree@1.0.0-alpha.29:
-  version "1.0.0-alpha.29"
-  resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39"
-  integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==
-  dependencies:
-    mdn-data "~1.1.0"
-    source-map "^0.5.3"
-
-css-unit-converter@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996"
-  integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=
-
-css-url-regex@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec"
-  integrity sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=
-
-css-what@2.1, css-what@^2.1.2:
-  version "2.1.3"
-  resolved "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
-  integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
-
-css@^2.1.0:
-  version "2.2.4"
-  resolved "https://registry.npmjs.org/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929"
-  integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==
-  dependencies:
-    inherits "^2.0.3"
-    source-map "^0.6.1"
-    source-map-resolve "^0.5.2"
-    urix "^0.1.0"
-
-cssesc@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
-  integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=
-
-cssesc@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703"
-  integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==
-
-cssnano-preset-default@^4.0.0, cssnano-preset-default@^4.0.7:
-  version "4.0.7"
-  resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76"
-  integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==
-  dependencies:
-    css-declaration-sorter "^4.0.1"
-    cssnano-util-raw-cache "^4.0.1"
-    postcss "^7.0.0"
-    postcss-calc "^7.0.1"
-    postcss-colormin "^4.0.3"
-    postcss-convert-values "^4.0.1"
-    postcss-discard-comments "^4.0.2"
-    postcss-discard-duplicates "^4.0.2"
-    postcss-discard-empty "^4.0.1"
-    postcss-discard-overridden "^4.0.1"
-    postcss-merge-longhand "^4.0.11"
-    postcss-merge-rules "^4.0.3"
-    postcss-minify-font-values "^4.0.2"
-    postcss-minify-gradients "^4.0.2"
-    postcss-minify-params "^4.0.2"
-    postcss-minify-selectors "^4.0.2"
-    postcss-normalize-charset "^4.0.1"
-    postcss-normalize-display-values "^4.0.2"
-    postcss-normalize-positions "^4.0.2"
-    postcss-normalize-repeat-style "^4.0.2"
-    postcss-normalize-string "^4.0.2"
-    postcss-normalize-timing-functions "^4.0.2"
-    postcss-normalize-unicode "^4.0.1"
-    postcss-normalize-url "^4.0.1"
-    postcss-normalize-whitespace "^4.0.2"
-    postcss-ordered-values "^4.1.2"
-    postcss-reduce-initial "^4.0.3"
-    postcss-reduce-transforms "^4.0.2"
-    postcss-svgo "^4.0.2"
-    postcss-unique-selectors "^4.0.1"
-
-cssnano-util-get-arguments@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f"
-  integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=
-
-cssnano-util-get-match@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d"
-  integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=
-
-cssnano-util-raw-cache@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282"
-  integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==
-  dependencies:
-    postcss "^7.0.0"
-
-cssnano-util-same-parent@^4.0.0:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3"
-  integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==
-
-cssnano@^4.0.0, cssnano@^4.1.10:
-  version "4.1.10"
-  resolved "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2"
-  integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==
-  dependencies:
-    cosmiconfig "^5.0.0"
-    cssnano-preset-default "^4.0.7"
-    is-resolvable "^1.0.0"
-    postcss "^7.0.0"
-
-csso@^3.5.1:
-  version "3.5.1"
-  resolved "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b"
-  integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==
-  dependencies:
-    css-tree "1.0.0-alpha.29"
-
-cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
-  version "0.3.6"
-  resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad"
-  integrity sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==
-
-cssstyle@^1.0.0:
-  version "1.2.2"
-  resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz#427ea4d585b18624f6fdbf9de7a2a1a3ba713077"
-  integrity sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==
-  dependencies:
-    cssom "0.3.x"
-
-current-script-polyfill@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz#f31cf7e4f3e218b0726e738ca92a02d3488ef615"
-  integrity sha1-8xz35PPiGLBybnOMqSoC00iO9hU=
-
-cyclist@~0.2.2:
-  version "0.2.2"
-  resolved "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
-  integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=
-
-d3-array@1, d3-array@~1.2.0:
-  version "1.2.4"
-  resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f"
-  integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==
-
-d3-collection@1:
-  version "1.0.7"
-  resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e"
-  integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==
-
-d3-color@1:
-  version "1.2.3"
-  resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.2.3.tgz#6c67bb2af6df3cc8d79efcc4d3a3e83e28c8048f"
-  integrity sha512-x37qq3ChOTLd26hnps36lexMRhNXEtVxZ4B25rL0DVdDsGQIJGB18S7y9XDwlDD6MD/ZBzITCf4JjGMM10TZkw==
-
-d3-composite-projections@~1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/d3-composite-projections/-/d3-composite-projections-1.2.0.tgz#fa0e6f1442f17d04643843a3a883c7d94e0c27c0"
-  integrity sha1-+g5vFELxfQRkOEOjqIPH2U4MJ8A=
-  dependencies:
-    d3-geo "1.2.4"
-    d3-path "^1.0.1"
-
-d3-dispatch@1:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.5.tgz#e25c10a186517cd6c82dd19ea018f07e01e39015"
-  integrity sha512-vwKx+lAqB1UuCeklr6Jh1bvC4SZgbSqbkGBLClItFBIYH4vqDJCA7qfoy14lXmJdnBOdxndAMxjCbImJYW7e6g==
-
-d3-dsv@~1.0.5:
-  version "1.0.10"
-  resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.0.10.tgz#4371c489a2a654a297aca16fcaf605a6f31a6f51"
-  integrity sha512-vqklfpxmtO2ZER3fq/B33R/BIz3A1PV0FaZRuFM8w6jLo7sUX1BZDh73fPlr0s327rzq4H6EN1q9U+eCBCSN8g==
-  dependencies:
-    commander "2"
-    iconv-lite "0.4"
-    rw "1"
-
-d3-ease@1, d3-ease@~1.0.3:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.5.tgz#8ce59276d81241b1b72042d6af2d40e76d936ffb"
-  integrity sha512-Ct1O//ly5y5lFM9YTdu+ygq7LleSgSE4oj7vUt9tPLHUi8VCV7QoizGpdWRWAwCO9LdYzIrQDg97+hGVdsSGPQ==
-
-d3-format@^1.3.0:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.3.2.tgz#6a96b5e31bcb98122a30863f7d92365c00603562"
-  integrity sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ==
-
-d3-geo-projection@~2.1.2:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/d3-geo-projection/-/d3-geo-projection-2.1.2.tgz#7df8e1e9d046d631c6509f7e531357d4adc24aa3"
-  integrity sha1-ffjh6dBG1jHGUJ9+UxNX1K3CSqM=
-  dependencies:
-    commander "2"
-    d3-array "1"
-    d3-geo "^1.1.0"
-
-d3-geo@1.2.4:
-  version "1.2.4"
-  resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.2.4.tgz#d179f3baa76e623ef1e0d83693db705b7c599006"
-  integrity sha1-0XnzuqduYj7x4Ng2k9twW3xZkAY=
-  dependencies:
-    d3-array "1"
-
-d3-geo@^1.1.0:
-  version "1.11.3"
-  resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.11.3.tgz#5bb08388f45e4b281491faa72d3abd43215dbd1c"
-  integrity sha512-n30yN9qSKREvV2fxcrhmHUdXP9TNH7ZZj3C/qnaoU0cVf/Ea85+yT7HY7i8ySPwkwjCNYtmKqQFTvLFngfkItQ==
-  dependencies:
-    d3-array "1"
-
-d3-geo@~1.6.4:
-  version "1.6.4"
-  resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.6.4.tgz#f20e1e461cb1845f5a8be55ab6f876542a7e3199"
-  integrity sha1-8g4eRhyxhF9ai+Vatvh2VCp+MZk=
-  dependencies:
-    d3-array "1"
-
-d3-hexjson@~1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/d3-hexjson/-/d3-hexjson-1.0.1.tgz#6a23111e8359f1e214f5d0afa379c02b2b67df0b"
-  integrity sha512-TeH4T0PSbDazMm3gHgc4ulO0PfrZpz0Uk3y5tCGz+NgC7HnX7KBdem7uAN+j9x3ZshTh7raN3V/bFhaLB2C8DA==
-  dependencies:
-    d3-array "1"
-
-d3-hierarchy@~1.1.5:
-  version "1.1.8"
-  resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz#7a6317bd3ed24e324641b6f1e76e978836b008cc"
-  integrity sha512-L+GHMSZNwTpiq4rt9GEsNcpLa4M96lXMR8M/nMG9p5hBE0jy6C+3hWtyZMenPQdwla249iJy7Nx0uKt3n+u9+w==
-
-d3-interpolate@1:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.3.2.tgz#417d3ebdeb4bc4efcc8fd4361c55e4040211fd68"
-  integrity sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w==
-  dependencies:
-    d3-color "1"
-
-d3-interpolate@~1.1.5:
-  version "1.1.6"
-  resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6"
-  integrity sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==
-  dependencies:
-    d3-color "1"
-
-d3-path@1, d3-path@^1.0.1:
-  version "1.0.7"
-  resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.7.tgz#8de7cd693a75ac0b5480d3abaccd94793e58aae8"
-  integrity sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA==
-
-d3-sankey@~0.7.1:
-  version "0.7.1"
-  resolved "https://registry.yarnpkg.com/d3-sankey/-/d3-sankey-0.7.1.tgz#d229832268fc69a7fec84803e96c2256a614c521"
-  integrity sha1-0imDImj8aaf+yEgD6WwiVqYUxSE=
-  dependencies:
-    d3-array "1"
-    d3-collection "1"
-    d3-shape "^1.2.0"
-
-d3-selection@^1.0.2, d3-selection@^1.1.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.0.tgz#ab9ac1e664cf967ebf1b479cc07e28ce9908c474"
-  integrity sha512-EYVwBxQGEjLCKF2pJ4+yrErskDnz5v403qvAid96cNdCMr8rmCYfY5RGzWz24mdIbxmDf6/4EAH+K9xperD5jg==
-
-d3-shape@^1.2.0:
-  version "1.3.4"
-  resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.4.tgz#358e76014645321eecc7c364e188f8ae3d2a07d4"
-  integrity sha512-izaz4fOpOnY3CD17hkZWNxbaN70sIGagLR/5jb6RS96Y+6VqX+q1BQf1av6QSBRdfULi3Gb8Js4CzG4+KAPjMg==
-  dependencies:
-    d3-path "1"
-
-d3-timer@1, d3-timer@~1.0.6:
-  version "1.0.9"
-  resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.9.tgz#f7bb8c0d597d792ff7131e1c24a36dd471a471ba"
-  integrity sha512-rT34J5HnQUHhcLvhSB9GjCkN0Ddd5Y8nCwDBG2u6wQEeYxT/Lf51fTFFkldeib/sE/J0clIe0pnCfs6g/lRbyg==
-
-d3-transition@^1.0.1:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.2.0.tgz#f538c0e21b2aa1f05f3e965f8567e81284b3b2b8"
-  integrity sha512-VJ7cmX/FPIPJYuaL2r1o1EMHLttvoIuZhhuAlRoOxDzogV8iQS6jYulDm3xEU3TqL80IZIhI551/ebmCMrkvhw==
-  dependencies:
-    d3-color "1"
-    d3-dispatch "1"
-    d3-ease "1"
-    d3-interpolate "1"
-    d3-selection "^1.1.0"
-    d3-timer "1"
-
-d3-voronoi@~1.1.2:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.4.tgz#dd3c78d7653d2bb359284ae478645d95944c8297"
-  integrity sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==
-
-dagre@~0.8.2:
-  version "0.8.4"
-  resolved "https://registry.yarnpkg.com/dagre/-/dagre-0.8.4.tgz#26b9fb8f7bdc60c6110a0458c375261836786061"
-  integrity sha512-Dj0csFDrWYKdavwROb9FccHfTC4fJbyF/oJdL9LNZJ8WUvl968P6PAKEriGqfbdArVJEmmfA+UyumgWEwcHU6A==
-  dependencies:
-    graphlib "^2.1.7"
-    lodash "^4.17.4"
-
-dashdash@^1.12.0:
-  version "1.14.1"
-  resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
-  integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
-  dependencies:
-    assert-plus "^1.0.0"
-
-data-urls@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe"
-  integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==
-  dependencies:
-    abab "^2.0.0"
-    whatwg-mimetype "^2.2.0"
-    whatwg-url "^7.0.0"
-
-date-now@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
-  integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
-
-de-indent@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
-  integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
-
-debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
-  version "2.6.9"
-  resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
-  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
-  dependencies:
-    ms "2.0.0"
-
-debug@=3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
-  integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
-  dependencies:
-    ms "2.0.0"
-
-debug@^3.1.0, debug@^3.2.5, debug@^3.2.6:
-  version "3.2.6"
-  resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
-  integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
-  dependencies:
-    ms "^2.1.1"
-
-debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
-  version "4.1.1"
-  resolved "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
-  integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
-  dependencies:
-    ms "^2.1.1"
-
-decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-  integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
-
-decode-uri-component@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
-  integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
-
-deep-equal@^1.0.1, deep-equal@~1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
-  integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
-
-deep-extend@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
-  integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-
-deep-is@~0.1.3:
-  version "0.1.3"
-  resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
-  integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
-
-deepmerge@^1.5.2:
-  version "1.5.2"
-  resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753"
-  integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==
-
-default-gateway@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
-  integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==
-  dependencies:
-    execa "^1.0.0"
-    ip-regex "^2.1.0"
-
-default-require-extensions@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"
-  integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=
-  dependencies:
-    strip-bom "^2.0.0"
-
-defaults@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
-  integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
-  dependencies:
-    clone "^1.0.2"
-
-define-properties@^1.1.2, define-properties@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
-  integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
-  dependencies:
-    object-keys "^1.0.12"
-
-define-property@^0.2.5:
-  version "0.2.5"
-  resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
-  integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
-  dependencies:
-    is-descriptor "^0.1.0"
-
-define-property@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
-  integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
-  dependencies:
-    is-descriptor "^1.0.0"
-
-define-property@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
-  integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
-  dependencies:
-    is-descriptor "^1.0.2"
-    isobject "^3.0.1"
-
-defined@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
-  integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
-
-del@^4.1.1:
-  version "4.1.1"
-  resolved "https://registry.npmjs.org/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
-  integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==
-  dependencies:
-    "@types/glob" "^7.1.1"
-    globby "^6.1.0"
-    is-path-cwd "^2.0.0"
-    is-path-in-cwd "^2.0.0"
-    p-map "^2.0.0"
-    pify "^4.0.1"
-    rimraf "^2.6.3"
-
-delayed-stream@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
-  integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
-
-delegate@^3.1.2:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
-  integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
-
-delegates@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-  integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
-
-depd@~1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
-  integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
-
-des.js@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
-  integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=
-  dependencies:
-    inherits "^2.0.1"
-    minimalistic-assert "^1.0.0"
-
-destroy@~1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
-  integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
-
-detect-indent@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
-  integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
-  dependencies:
-    repeating "^2.0.0"
-
-detect-libc@^1.0.2:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
-  integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
-
-detect-newline@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
-  integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
-
-detect-node@^2.0.4:
-  version "2.0.4"
-  resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
-  integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==
-
-diff@^3.2.0:
-  version "3.5.0"
-  resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
-  integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
-
-diffie-hellman@^5.0.0:
-  version "5.0.3"
-  resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
-  integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
-  dependencies:
-    bn.js "^4.1.0"
-    miller-rabin "^4.0.0"
-    randombytes "^2.0.0"
-
-dir-glob@^2.0.0, dir-glob@^2.2.2:
-  version "2.2.2"
-  resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4"
-  integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==
-  dependencies:
-    path-type "^3.0.0"
-
-dns-equal@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
-  integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
-
-dns-packet@^1.3.1:
-  version "1.3.1"
-  resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
-  integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==
-  dependencies:
-    ip "^1.1.0"
-    safe-buffer "^5.0.1"
-
-dns-txt@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
-  integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=
-  dependencies:
-    buffer-indexof "^1.0.0"
-
-doctrine@1.5.0:
-  version "1.5.0"
-  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
-  integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
-  dependencies:
-    esutils "^2.0.2"
-    isarray "^1.0.0"
-
-doctrine@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
-  integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
-  dependencies:
-    esutils "^2.0.2"
-
-doctrine@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
-  integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
-  dependencies:
-    esutils "^2.0.2"
-
-dom-align@^1.7.0:
-  version "1.8.0"
-  resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.8.0.tgz#c0e89b5b674c6e836cd248c52c2992135f093654"
-  integrity sha512-B85D4ef2Gj5lw0rK0KM2+D5/pH7yqNxg2mB+E8uzFaolpm7RQmsxEfjyEuNiF8UBBkffumYDeKRzTzc3LePP+w==
-
-dom-closest@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/dom-closest/-/dom-closest-0.2.0.tgz#ebd9f91d1bf22e8d6f477876bbcd3ec90216c0cf"
-  integrity sha1-69n5HRvyLo1vR3h2u80+yQIWwM8=
-  dependencies:
-    dom-matches ">=1.0.1"
-
-dom-converter@^0.2:
-  version "0.2.0"
-  resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
-  integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
-  dependencies:
-    utila "~0.4"
-
-dom-event-types@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/dom-event-types/-/dom-event-types-1.0.0.tgz#5830a0a29e1bf837fe50a70cd80a597232813cae"
-  integrity sha512-2G2Vwi2zXTHBGqXHsJ4+ak/iP0N8Ar+G8a7LiD2oup5o4sQWytwqqrZu/O6hIMV0KMID2PL69OhpshLO0n7UJQ==
-
-dom-matches@>=1.0.1:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/dom-matches/-/dom-matches-2.0.0.tgz#d2728b416a87533980eb089b848d253cf23a758c"
-  integrity sha1-0nKLQWqHUzmA6wibhI0lPPI6dYw=
-
-dom-scroll-into-view@^1.2.1:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz#e8f36732dd089b0201a88d7815dc3f88e6d66c7e"
-  integrity sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4=
-
-dom-serializer@0:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0"
-  integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==
-  dependencies:
-    domelementtype "^1.3.0"
-    entities "^1.1.1"
-
-domain-browser@^1.1.1:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
-  integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
-
-domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1:
-  version "1.3.1"
-  resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
-  integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
-
-domexception@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
-  integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==
-  dependencies:
-    webidl-conversions "^4.0.2"
-
-domhandler@^2.3.0:
-  version "2.4.2"
-  resolved "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
-  integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
-  dependencies:
-    domelementtype "1"
-
-domutils@1.5.1:
-  version "1.5.1"
-  resolved "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
-  integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
-  dependencies:
-    dom-serializer "0"
-    domelementtype "1"
-
-domutils@^1.5.1, domutils@^1.7.0:
-  version "1.7.0"
-  resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
-  integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
-  dependencies:
-    dom-serializer "0"
-    domelementtype "1"
-
-dot-prop@^4.1.1:
-  version "4.2.0"
-  resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
-  integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==
-  dependencies:
-    is-obj "^1.0.0"
-
-dotenv-expand@^5.1.0:
-  version "5.1.0"
-  resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0"
-  integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==
-
-dotenv@^7.0.0:
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c"
-  integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==
-
-duplexer@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
-  integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
-
-duplexify@^3.4.2, duplexify@^3.6.0:
-  version "3.7.1"
-  resolved "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
-  integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
-  dependencies:
-    end-of-stream "^1.0.0"
-    inherits "^2.0.1"
-    readable-stream "^2.0.0"
-    stream-shift "^1.0.0"
-
-easy-stack@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788"
-  integrity sha1-EskbMIWjfwuqM26UhurEv5Tj54g=
-
-ecc-jsbn@~0.1.1:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
-  integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
-  dependencies:
-    jsbn "~0.1.0"
-    safer-buffer "^2.1.0"
-
-editorconfig@^0.15.3:
-  version "0.15.3"
-  resolved "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5"
-  integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==
-  dependencies:
-    commander "^2.19.0"
-    lru-cache "^4.1.5"
-    semver "^5.6.0"
-    sigmund "^1.0.1"
-
-ee-first@1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
-  integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
-
-ejs@^2.6.1:
-  version "2.6.1"
-  resolved "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0"
-  integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==
-
-electron-to-chromium@^1.3.133:
-  version "1.3.137"
-  resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.137.tgz#ba7c88024984c038a5c5c434529aabcea7b42944"
-  integrity sha512-kGi32g42a8vS/WnYE7ELJyejRT7hbr3UeOOu0WeuYuQ29gCpg9Lrf6RdcTQVXSt/v0bjCfnlb/EWOOsiKpTmkw==
-
-elliptic@^6.0.0:
-  version "6.4.1"
-  resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a"
-  integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==
-  dependencies:
-    bn.js "^4.4.0"
-    brorand "^1.0.1"
-    hash.js "^1.0.0"
-    hmac-drbg "^1.0.0"
-    inherits "^2.0.1"
-    minimalistic-assert "^1.0.0"
-    minimalistic-crypto-utils "^1.0.0"
-
-emoji-regex@^7.0.1:
-  version "7.0.3"
-  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
-  integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
-
-emojis-list@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
-  integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
-
-encodeurl@~1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
-  integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
-
-encoding@^0.1.11:
-  version "0.1.12"
-  resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
-  integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
-  dependencies:
-    iconv-lite "~0.4.13"
-
-end-of-stream@^1.0.0, end-of-stream@^1.1.0:
-  version "1.4.1"
-  resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
-  integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
-  dependencies:
-    once "^1.4.0"
-
-enhanced-resolve@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
-  integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==
-  dependencies:
-    graceful-fs "^4.1.2"
-    memory-fs "^0.4.0"
-    tapable "^1.0.0"
-
-enquire.js@^2.1.6:
-  version "2.1.6"
-  resolved "https://registry.yarnpkg.com/enquire.js/-/enquire.js-2.1.6.tgz#3e8780c9b8b835084c3f60e166dbc3c2a3c89814"
-  integrity sha1-PoeAybi4NQhMP2DhZtvDwqPImBQ=
-
-entities@^1.1.1:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
-  integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
-
-errno@^0.1.1, errno@^0.1.3, errno@~0.1.7:
-  version "0.1.7"
-  resolved "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
-  integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
-  dependencies:
-    prr "~1.0.1"
-
-error-ex@^1.2.0, error-ex@^1.3.1:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
-  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
-  dependencies:
-    is-arrayish "^0.2.1"
-
-error-stack-parser@^2.0.0:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz#4ae8dbaa2bf90a8b450707b9149dcabca135520d"
-  integrity sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==
-  dependencies:
-    stackframe "^1.0.4"
-
-es-abstract@^1.12.0, es-abstract@^1.4.3, es-abstract@^1.5.0, es-abstract@^1.5.1:
-  version "1.13.0"
-  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
-  integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
-  dependencies:
-    es-to-primitive "^1.2.0"
-    function-bind "^1.1.1"
-    has "^1.0.3"
-    is-callable "^1.1.4"
-    is-regex "^1.0.4"
-    object-keys "^1.0.12"
-
-es-to-primitive@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
-  integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
-  dependencies:
-    is-callable "^1.1.4"
-    is-date-object "^1.0.1"
-    is-symbol "^1.0.2"
-
-escape-html@~1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
-  integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
-
-escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-  integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-
-escodegen@^1.9.1:
-  version "1.11.1"
-  resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510"
-  integrity sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==
-  dependencies:
-    esprima "^3.1.3"
-    estraverse "^4.2.0"
-    esutils "^2.0.2"
-    optionator "^0.8.1"
-  optionalDependencies:
-    source-map "~0.6.1"
-
-eslint-config-standard@^12.0.0:
-  version "12.0.0"
-  resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz#638b4c65db0bd5a41319f96bba1f15ddad2107d9"
-  integrity sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==
-
-eslint-import-resolver-node@^0.3.2:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
-  integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==
-  dependencies:
-    debug "^2.6.9"
-    resolve "^1.5.0"
-
-eslint-loader@^2.1.2:
-  version "2.1.2"
-  resolved "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.2.tgz#453542a1230d6ffac90e4e7cb9cadba9d851be68"
-  integrity sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg==
-  dependencies:
-    loader-fs-cache "^1.0.0"
-    loader-utils "^1.0.2"
-    object-assign "^4.0.1"
-    object-hash "^1.1.4"
-    rimraf "^2.6.1"
-
-eslint-module-utils@^2.3.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz#546178dab5e046c8b562bbb50705e2456d7bda49"
-  integrity sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==
-  dependencies:
-    debug "^2.6.8"
-    pkg-dir "^2.0.0"
-
-eslint-plugin-es@^1.3.1:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6"
-  integrity sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==
-  dependencies:
-    eslint-utils "^1.3.0"
-    regexpp "^2.0.1"
-
-eslint-plugin-html@^5.0.0:
-  version "5.0.3"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-5.0.3.tgz#3db133995e49a73596f6a473c16a1b83634deffd"
-  integrity sha512-46ruAnp3jVQP/5Bi5eEIOooscjUTPFU3vxCxHe/OG6ORdM7Xv5c25/Nz9fAbHklzCpiXuIiH4/mV/XBkm7MINw==
-  dependencies:
-    htmlparser2 "^3.10.0"
-
-eslint-plugin-import@^2.14.0:
-  version "2.16.0"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz#97ac3e75d0791c4fac0e15ef388510217be7f66f"
-  integrity sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==
-  dependencies:
-    contains-path "^0.1.0"
-    debug "^2.6.9"
-    doctrine "1.5.0"
-    eslint-import-resolver-node "^0.3.2"
-    eslint-module-utils "^2.3.0"
-    has "^1.0.3"
-    lodash "^4.17.11"
-    minimatch "^3.0.4"
-    read-pkg-up "^2.0.0"
-    resolve "^1.9.0"
-
-eslint-plugin-node@^8.0.0:
-  version "8.0.1"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz#55ae3560022863d141fa7a11799532340a685964"
-  integrity sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==
-  dependencies:
-    eslint-plugin-es "^1.3.1"
-    eslint-utils "^1.3.1"
-    ignore "^5.0.2"
-    minimatch "^3.0.4"
-    resolve "^1.8.1"
-    semver "^5.5.0"
-
-eslint-plugin-promise@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz#2d074b653f35a23d1ba89d8e976a985117d1c6a2"
-  integrity sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==
-
-eslint-plugin-standard@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz#f845b45109c99cd90e77796940a344546c8f6b5c"
-  integrity sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==
-
-eslint-plugin-vue@^4.7.1:
-  version "4.7.1"
-  resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz#c829b9fc62582c1897b5a0b94afd44ecca511e63"
-  integrity sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA==
-  dependencies:
-    vue-eslint-parser "^2.0.3"
-
-eslint-plugin-vue@^5.0.0:
-  version "5.2.2"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-5.2.2.tgz#86601823b7721b70bc92d54f1728cfc03b36283c"
-  integrity sha512-CtGWH7IB0DA6BZOwcV9w9q3Ri6Yuo8qMjx05SmOGJ6X6E0Yo3y9E/gQ5tuNxg2dEt30tRnBoFTbvtmW9iEoyHA==
-  dependencies:
-    vue-eslint-parser "^5.0.0"
-
-eslint-scope@3.7.1:
-  version "3.7.1"
-  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
-  integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=
-  dependencies:
-    esrecurse "^4.1.0"
-    estraverse "^4.1.1"
-
-eslint-scope@^3.7.1:
-  version "3.7.3"
-  resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535"
-  integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==
-  dependencies:
-    esrecurse "^4.1.0"
-    estraverse "^4.1.1"
-
-eslint-scope@^4.0.0:
-  version "4.0.3"
-  resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
-  integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
-  dependencies:
-    esrecurse "^4.1.0"
-    estraverse "^4.1.1"
-
-eslint-utils@^1.3.0, eslint-utils@^1.3.1:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512"
-  integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==
-
-eslint-visitor-keys@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
-  integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==
-
-eslint@^4.19.1:
-  version "4.19.1"
-  resolved "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300"
-  integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==
-  dependencies:
-    ajv "^5.3.0"
-    babel-code-frame "^6.22.0"
-    chalk "^2.1.0"
-    concat-stream "^1.6.0"
-    cross-spawn "^5.1.0"
-    debug "^3.1.0"
-    doctrine "^2.1.0"
-    eslint-scope "^3.7.1"
-    eslint-visitor-keys "^1.0.0"
-    espree "^3.5.4"
-    esquery "^1.0.0"
-    esutils "^2.0.2"
-    file-entry-cache "^2.0.0"
-    functional-red-black-tree "^1.0.1"
-    glob "^7.1.2"
-    globals "^11.0.1"
-    ignore "^3.3.3"
-    imurmurhash "^0.1.4"
-    inquirer "^3.0.6"
-    is-resolvable "^1.0.0"
-    js-yaml "^3.9.1"
-    json-stable-stringify-without-jsonify "^1.0.1"
-    levn "^0.3.0"
-    lodash "^4.17.4"
-    minimatch "^3.0.2"
-    mkdirp "^0.5.1"
-    natural-compare "^1.4.0"
-    optionator "^0.8.2"
-    path-is-inside "^1.0.2"
-    pluralize "^7.0.0"
-    progress "^2.0.0"
-    regexpp "^1.0.1"
-    require-uncached "^1.0.3"
-    semver "^5.3.0"
-    strip-ansi "^4.0.0"
-    strip-json-comments "~2.0.1"
-    table "4.0.2"
-    text-table "~0.2.0"
-
-eslint@^5.8.0:
-  version "5.14.1"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.14.1.tgz#490a28906be313685c55ccd43a39e8d22efc04ba"
-  integrity sha512-CyUMbmsjxedx8B0mr79mNOqetvkbij/zrXnFeK2zc3pGRn3/tibjiNAv/3UxFEyfMDjh+ZqTrJrEGBFiGfD5Og==
-  dependencies:
-    "@babel/code-frame" "^7.0.0"
-    ajv "^6.9.1"
-    chalk "^2.1.0"
-    cross-spawn "^6.0.5"
-    debug "^4.0.1"
-    doctrine "^3.0.0"
-    eslint-scope "^4.0.0"
-    eslint-utils "^1.3.1"
-    eslint-visitor-keys "^1.0.0"
-    espree "^5.0.1"
-    esquery "^1.0.1"
-    esutils "^2.0.2"
-    file-entry-cache "^5.0.1"
-    functional-red-black-tree "^1.0.1"
-    glob "^7.1.2"
-    globals "^11.7.0"
-    ignore "^4.0.6"
-    import-fresh "^3.0.0"
-    imurmurhash "^0.1.4"
-    inquirer "^6.2.2"
-    js-yaml "^3.12.0"
-    json-stable-stringify-without-jsonify "^1.0.1"
-    levn "^0.3.0"
-    lodash "^4.17.11"
-    minimatch "^3.0.4"
-    mkdirp "^0.5.1"
-    natural-compare "^1.4.0"
-    optionator "^0.8.2"
-    path-is-inside "^1.0.2"
-    progress "^2.0.0"
-    regexpp "^2.0.1"
-    semver "^5.5.1"
-    strip-ansi "^4.0.0"
-    strip-json-comments "^2.0.1"
-    table "^5.2.3"
-    text-table "^0.2.0"
-
-espree@^3.5.2, espree@^3.5.4:
-  version "3.5.4"
-  resolved "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
-  integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
-  dependencies:
-    acorn "^5.5.0"
-    acorn-jsx "^3.0.0"
-
-espree@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f"
-  integrity sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==
-  dependencies:
-    acorn "^6.0.2"
-    acorn-jsx "^5.0.0"
-    eslint-visitor-keys "^1.0.0"
-
-espree@^5.0.1:
-  version "5.0.1"
-  resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a"
-  integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==
-  dependencies:
-    acorn "^6.0.7"
-    acorn-jsx "^5.0.0"
-    eslint-visitor-keys "^1.0.0"
-
-esprima@^3.1.3:
-  version "3.1.3"
-  resolved "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
-  integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
-
-esprima@^4.0.0:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
-  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-
-esquery@^1.0.0, esquery@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
-  integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
-  dependencies:
-    estraverse "^4.0.0"
-
-esrecurse@^4.1.0:
-  version "4.2.1"
-  resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
-  integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
-  dependencies:
-    estraverse "^4.1.0"
-
-estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
-  integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
-
-esutils@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
-  integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
-
-etag@~1.8.1:
-  version "1.8.1"
-  resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
-  integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
-
-event-pubsub@4.3.0:
-  version "4.3.0"
-  resolved "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e"
-  integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==
-
-eventemitter3@^2.0.3:
-  version "2.0.3"
-  resolved "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba"
-  integrity sha1-teEHm1n7XhuidxwKmTvgYKWMmbo=
-
-eventemitter3@^3.0.0:
-  version "3.1.2"
-  resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
-  integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
-
-events@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88"
-  integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==
-
-eventsource@^1.0.7:
-  version "1.0.7"
-  resolved "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0"
-  integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==
-  dependencies:
-    original "^1.0.0"
-
-evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
-  integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
-  dependencies:
-    md5.js "^1.3.4"
-    safe-buffer "^5.1.1"
-
-exec-sh@^0.2.0:
-  version "0.2.2"
-  resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36"
-  integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==
-  dependencies:
-    merge "^1.2.0"
-
-execa@^0.7.0:
-  version "0.7.0"
-  resolved "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
-  integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
-  dependencies:
-    cross-spawn "^5.0.1"
-    get-stream "^3.0.0"
-    is-stream "^1.1.0"
-    npm-run-path "^2.0.0"
-    p-finally "^1.0.0"
-    signal-exit "^3.0.0"
-    strip-eof "^1.0.0"
-
-execa@^0.8.0:
-  version "0.8.0"
-  resolved "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da"
-  integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=
-  dependencies:
-    cross-spawn "^5.0.1"
-    get-stream "^3.0.0"
-    is-stream "^1.1.0"
-    npm-run-path "^2.0.0"
-    p-finally "^1.0.0"
-    signal-exit "^3.0.0"
-    strip-eof "^1.0.0"
-
-execa@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
-  integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
-  dependencies:
-    cross-spawn "^6.0.0"
-    get-stream "^4.0.0"
-    is-stream "^1.1.0"
-    npm-run-path "^2.0.0"
-    p-finally "^1.0.0"
-    signal-exit "^3.0.0"
-    strip-eof "^1.0.0"
-
-exit@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
-  integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
-
-expand-brackets@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
-  integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
-  dependencies:
-    is-posix-bracket "^0.1.0"
-
-expand-brackets@^2.1.4:
-  version "2.1.4"
-  resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
-  integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
-  dependencies:
-    debug "^2.3.3"
-    define-property "^0.2.5"
-    extend-shallow "^2.0.1"
-    posix-character-classes "^0.1.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-expand-range@^1.8.1:
-  version "1.8.2"
-  resolved "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
-  integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
-  dependencies:
-    fill-range "^2.1.0"
-
-expect@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98"
-  integrity sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==
-  dependencies:
-    ansi-styles "^3.2.0"
-    jest-diff "^23.6.0"
-    jest-get-type "^22.1.0"
-    jest-matcher-utils "^23.6.0"
-    jest-message-util "^23.4.0"
-    jest-regex-util "^23.3.0"
-
-express@^4.16.3, express@^4.17.0:
-  version "4.17.0"
-  resolved "https://registry.npmjs.org/express/-/express-4.17.0.tgz#288af62228a73f4c8ea2990ba3b791bb87cd4438"
-  integrity sha512-1Z7/t3Z5ZnBG252gKUPyItc4xdeaA0X934ca2ewckAsVsw9EG71i++ZHZPYnus8g/s5Bty8IMpSVEuRkmwwPRQ==
-  dependencies:
-    accepts "~1.3.7"
-    array-flatten "1.1.1"
-    body-parser "1.19.0"
-    content-disposition "0.5.3"
-    content-type "~1.0.4"
-    cookie "0.4.0"
-    cookie-signature "1.0.6"
-    debug "2.6.9"
-    depd "~1.1.2"
-    encodeurl "~1.0.2"
-    escape-html "~1.0.3"
-    etag "~1.8.1"
-    finalhandler "~1.1.2"
-    fresh "0.5.2"
-    merge-descriptors "1.0.1"
-    methods "~1.1.2"
-    on-finished "~2.3.0"
-    parseurl "~1.3.3"
-    path-to-regexp "0.1.7"
-    proxy-addr "~2.0.5"
-    qs "6.7.0"
-    range-parser "~1.2.1"
-    safe-buffer "5.1.2"
-    send "0.17.1"
-    serve-static "1.14.1"
-    setprototypeof "1.1.1"
-    statuses "~1.5.0"
-    type-is "~1.6.18"
-    utils-merge "1.0.1"
-    vary "~1.1.2"
-
-extend-shallow@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
-  integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
-  dependencies:
-    is-extendable "^0.1.0"
-
-extend-shallow@^3.0.0, extend-shallow@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
-  integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
-  dependencies:
-    assign-symbols "^1.0.0"
-    is-extendable "^1.0.1"
-
-extend@^3.0.1, extend@^3.0.2, extend@~3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
-  integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
-
-external-editor@^2.0.1, external-editor@^2.0.4:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
-  integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
-  dependencies:
-    chardet "^0.4.0"
-    iconv-lite "^0.4.17"
-    tmp "^0.0.33"
-
-external-editor@^3.0.3:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27"
-  integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==
-  dependencies:
-    chardet "^0.7.0"
-    iconv-lite "^0.4.24"
-    tmp "^0.0.33"
-
-extglob@^0.3.1:
-  version "0.3.2"
-  resolved "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
-  integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
-  dependencies:
-    is-extglob "^1.0.0"
-
-extglob@^2.0.4:
-  version "2.0.4"
-  resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
-  integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
-  dependencies:
-    array-unique "^0.3.2"
-    define-property "^1.0.0"
-    expand-brackets "^2.1.4"
-    extend-shallow "^2.0.1"
-    fragment-cache "^0.2.1"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-extract-from-css@^0.4.4:
-  version "0.4.4"
-  resolved "https://registry.npmjs.org/extract-from-css/-/extract-from-css-0.4.4.tgz#1ea7df2e7c7c6eb9922fa08e8adaea486f6f8f92"
-  integrity sha1-HqffLnx8brmSL6COitrqSG9vj5I=
-  dependencies:
-    css "^2.1.0"
-
-extsprintf@1.3.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
-  integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
-
-extsprintf@^1.2.0:
-  version "1.4.0"
-  resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
-  integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
-
-fast-deep-equal@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
-  integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=
-
-fast-deep-equal@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
-  integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
-
-fast-diff@1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154"
-  integrity sha1-S2LEK44D3j+EhGC2OQeZIGldAVQ=
-
-fast-glob@^2.2.6:
-  version "2.2.7"
-  resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d"
-  integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==
-  dependencies:
-    "@mrmlnc/readdir-enhanced" "^2.2.1"
-    "@nodelib/fs.stat" "^1.1.2"
-    glob-parent "^3.1.0"
-    is-glob "^4.0.0"
-    merge2 "^1.2.3"
-    micromatch "^3.1.10"
-
-fast-json-stable-stringify@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
-  integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
-
-fast-levenshtein@~2.0.4:
-  version "2.0.6"
-  resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
-  integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
-
-fastparse@^1.1.1:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9"
-  integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==
-
-faye-websocket@^0.10.0:
-  version "0.10.0"
-  resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
-  integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=
-  dependencies:
-    websocket-driver ">=0.5.1"
-
-faye-websocket@~0.11.1:
-  version "0.11.1"
-  resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38"
-  integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=
-  dependencies:
-    websocket-driver ">=0.5.1"
-
-fb-watchman@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
-  integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=
-  dependencies:
-    bser "^2.0.0"
-
-fecha@~2.3.3:
-  version "2.3.3"
-  resolved "https://registry.yarnpkg.com/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd"
-  integrity sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==
-
-figgy-pudding@^3.5.1:
-  version "3.5.1"
-  resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
-  integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
-
-figures@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
-  integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
-  dependencies:
-    escape-string-regexp "^1.0.5"
-
-file-entry-cache@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
-  integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
-  dependencies:
-    flat-cache "^1.2.1"
-    object-assign "^4.0.1"
-
-file-entry-cache@^5.0.1:
-  version "5.0.1"
-  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
-  integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
-  dependencies:
-    flat-cache "^2.0.1"
-
-file-loader@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa"
-  integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==
-  dependencies:
-    loader-utils "^1.0.2"
-    schema-utils "^1.0.0"
-
-filename-regex@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
-  integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=
-
-fileset@^2.0.2:
-  version "2.0.3"
-  resolved "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0"
-  integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=
-  dependencies:
-    glob "^7.0.3"
-    minimatch "^3.0.3"
-
-filesize@^3.6.1:
-  version "3.6.1"
-  resolved "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
-  integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==
-
-fill-range@^2.1.0:
-  version "2.2.4"
-  resolved "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
-  integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==
-  dependencies:
-    is-number "^2.1.0"
-    isobject "^2.0.0"
-    randomatic "^3.0.0"
-    repeat-element "^1.1.2"
-    repeat-string "^1.5.2"
-
-fill-range@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
-  integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-number "^3.0.0"
-    repeat-string "^1.6.1"
-    to-regex-range "^2.1.0"
-
-finalhandler@~1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
-  integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
-  dependencies:
-    debug "2.6.9"
-    encodeurl "~1.0.2"
-    escape-html "~1.0.3"
-    on-finished "~2.3.0"
-    parseurl "~1.3.3"
-    statuses "~1.5.0"
-    unpipe "~1.0.0"
-
-find-babel-config@^1.1.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2"
-  integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==
-  dependencies:
-    json5 "^0.5.1"
-    path-exists "^3.0.0"
-
-find-cache-dir@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
-  integrity sha1-yN765XyKUqinhPnjHFfHQumToLk=
-  dependencies:
-    commondir "^1.0.1"
-    mkdirp "^0.5.1"
-    pkg-dir "^1.0.0"
-
-find-cache-dir@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f"
-  integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=
-  dependencies:
-    commondir "^1.0.1"
-    make-dir "^1.0.0"
-    pkg-dir "^2.0.0"
-
-find-cache-dir@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
-  integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
-  dependencies:
-    commondir "^1.0.1"
-    make-dir "^2.0.0"
-    pkg-dir "^3.0.0"
-
-find-up@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
-  integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
-  dependencies:
-    path-exists "^2.0.0"
-    pinkie-promise "^2.0.0"
-
-find-up@^2.0.0, find-up@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
-  integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
-  dependencies:
-    locate-path "^2.0.0"
-
-find-up@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
-  integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
-  dependencies:
-    locate-path "^3.0.0"
-
-flat-cache@^1.2.1:
-  version "1.3.4"
-  resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
-  integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==
-  dependencies:
-    circular-json "^0.3.1"
-    graceful-fs "^4.1.2"
-    rimraf "~2.6.2"
-    write "^0.2.1"
-
-flat-cache@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
-  integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
-  dependencies:
-    flatted "^2.0.0"
-    rimraf "2.6.3"
-    write "1.0.3"
-
-flatted@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916"
-  integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==
-
-flush-write-stream@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
-  integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
-  dependencies:
-    inherits "^2.0.3"
-    readable-stream "^2.3.6"
-
-fmin@0.0.2:
-  version "0.0.2"
-  resolved "https://registry.yarnpkg.com/fmin/-/fmin-0.0.2.tgz#59bbb40d43ffdc1c94cd00a568c41f95f1973017"
-  integrity sha1-Wbu0DUP/3ByUzQClaMQflfGXMBc=
-  dependencies:
-    contour_plot "^0.0.1"
-    json2module "^0.0.3"
-    rollup "^0.25.8"
-    tape "^4.5.1"
-    uglify-js "^2.6.2"
-
-follow-redirects@1.5.10:
-  version "1.5.10"
-  resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
-  integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
-  dependencies:
-    debug "=3.1.0"
-
-follow-redirects@^1.0.0:
-  version "1.7.0"
-  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76"
-  integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==
-  dependencies:
-    debug "^3.2.6"
-
-for-each@~0.3.3:
-  version "0.3.3"
-  resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
-  integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
-  dependencies:
-    is-callable "^1.1.3"
-
-for-in@^1.0.1, for-in@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
-  integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
-
-for-own@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
-  integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
-  dependencies:
-    for-in "^1.0.1"
-
-forever-agent@~0.6.1:
-  version "0.6.1"
-  resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
-  integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
-
-form-data@~2.3.2:
-  version "2.3.3"
-  resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
-  integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
-  dependencies:
-    asynckit "^0.4.0"
-    combined-stream "^1.0.6"
-    mime-types "^2.1.12"
-
-forwarded@~0.1.2:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
-  integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
-
-fragment-cache@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
-  integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
-  dependencies:
-    map-cache "^0.2.2"
-
-fresh@0.5.2:
-  version "0.5.2"
-  resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
-  integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
-
-from2@^2.1.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
-  integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
-  dependencies:
-    inherits "^2.0.1"
-    readable-stream "^2.0.0"
-
-fs-extra@^7.0.1:
-  version "7.0.1"
-  resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
-  integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
-  dependencies:
-    graceful-fs "^4.1.2"
-    jsonfile "^4.0.0"
-    universalify "^0.1.0"
-
-fs-minipass@^1.2.5:
-  version "1.2.6"
-  resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07"
-  integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==
-  dependencies:
-    minipass "^2.2.1"
-
-fs-write-stream-atomic@^1.0.8:
-  version "1.0.10"
-  resolved "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
-  integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
-  dependencies:
-    graceful-fs "^4.1.2"
-    iferr "^0.1.5"
-    imurmurhash "^0.1.4"
-    readable-stream "1 || 2"
-
-fs.realpath@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-
-fsevents@^1.2.3, fsevents@^1.2.7:
-  version "1.2.9"
-  resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f"
-  integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==
-  dependencies:
-    nan "^2.12.1"
-    node-pre-gyp "^0.12.0"
-
-function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
-  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-
-functional-red-black-tree@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
-  integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
-
-gauge@~2.7.3:
-  version "2.7.4"
-  resolved "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
-  integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
-  dependencies:
-    aproba "^1.0.3"
-    console-control-strings "^1.0.0"
-    has-unicode "^2.0.0"
-    object-assign "^4.1.0"
-    signal-exit "^3.0.0"
-    string-width "^1.0.1"
-    strip-ansi "^3.0.1"
-    wide-align "^1.1.0"
-
-get-caller-file@^1.0.1:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
-  integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
-
-get-caller-file@^2.0.1:
-  version "2.0.5"
-  resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
-  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-
-get-stream@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
-  integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
-
-get-stream@^4.0.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
-  integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
-  dependencies:
-    pump "^3.0.0"
-
-get-value@^2.0.3, get-value@^2.0.6:
-  version "2.0.6"
-  resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
-  integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
-
-getpass@^0.1.1:
-  version "0.1.7"
-  resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
-  integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
-  dependencies:
-    assert-plus "^1.0.0"
-
-glob-base@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
-  integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
-  dependencies:
-    glob-parent "^2.0.0"
-    is-glob "^2.0.0"
-
-glob-parent@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
-  integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
-  dependencies:
-    is-glob "^2.0.0"
-
-glob-parent@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
-  integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
-  dependencies:
-    is-glob "^3.1.0"
-    path-dirname "^1.0.0"
-
-glob-to-regexp@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
-  integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
-
-glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
-  version "7.1.4"
-  resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
-  integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^3.0.4"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
-glob@~7.1.3:
-  version "7.1.3"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
-  integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^3.0.4"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
-globals@^11.0.1, globals@^11.1.0:
-  version "11.12.0"
-  resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
-  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-
-globals@^11.7.0:
-  version "11.11.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e"
-  integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==
-
-globals@^9.18.0:
-  version "9.18.0"
-  resolved "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
-  integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
-
-globby@^6.1.0:
-  version "6.1.0"
-  resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
-  integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
-  dependencies:
-    array-union "^1.0.1"
-    glob "^7.0.3"
-    object-assign "^4.0.1"
-    pify "^2.0.0"
-    pinkie-promise "^2.0.0"
-
-globby@^7.1.1:
-  version "7.1.1"
-  resolved "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680"
-  integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA=
-  dependencies:
-    array-union "^1.0.1"
-    dir-glob "^2.0.0"
-    glob "^7.1.2"
-    ignore "^3.3.5"
-    pify "^3.0.0"
-    slash "^1.0.0"
-
-globby@^9.2.0:
-  version "9.2.0"
-  resolved "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d"
-  integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==
-  dependencies:
-    "@types/glob" "^7.1.1"
-    array-union "^1.0.2"
-    dir-glob "^2.2.2"
-    fast-glob "^2.2.6"
-    glob "^7.1.3"
-    ignore "^4.0.3"
-    pify "^4.0.1"
-    slash "^2.0.0"
-
-good-listener@^1.2.2:
-  version "1.2.2"
-  resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50"
-  integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=
-  dependencies:
-    delegate "^3.1.2"
-
-graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
-  version "4.1.15"
-  resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
-  integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
-
-graphlib@^2.1.7:
-  version "2.1.7"
-  resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.7.tgz#b6a69f9f44bd9de3963ce6804a2fc9e73d86aecc"
-  integrity sha512-TyI9jIy2J4j0qgPmOOrHTCtpPqJGN/aurBwc6ZT+bRii+di1I+Wv3obRhVrmBEXet+qkMaEX67dXrwsd3QQM6w==
-  dependencies:
-    lodash "^4.17.5"
-
-growly@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
-  integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
-
-gzip-size@^5.0.0:
-  version "5.1.1"
-  resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274"
-  integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==
-  dependencies:
-    duplexer "^0.1.1"
-    pify "^4.0.1"
-
-handle-thing@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754"
-  integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==
-
-handlebars@^4.0.3:
-  version "4.1.2"
-  resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67"
-  integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==
-  dependencies:
-    neo-async "^2.6.0"
-    optimist "^0.6.1"
-    source-map "^0.6.1"
-  optionalDependencies:
-    uglify-js "^3.1.4"
-
-har-schema@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
-  integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
-
-har-validator@~5.1.0:
-  version "5.1.3"
-  resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
-  integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
-  dependencies:
-    ajv "^6.5.5"
-    har-schema "^2.0.0"
-
-has-ansi@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
-  integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
-  dependencies:
-    ansi-regex "^2.0.0"
-
-has-flag@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
-  integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
-
-has-flag@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
-  integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-
-has-symbols@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
-  integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
-
-has-unicode@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
-  integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
-
-has-value@^0.3.1:
-  version "0.3.1"
-  resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
-  integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
-  dependencies:
-    get-value "^2.0.3"
-    has-values "^0.1.4"
-    isobject "^2.0.0"
-
-has-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
-  integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
-  dependencies:
-    get-value "^2.0.6"
-    has-values "^1.0.0"
-    isobject "^3.0.0"
-
-has-values@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
-  integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
-
-has-values@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
-  integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
-  dependencies:
-    is-number "^3.0.0"
-    kind-of "^4.0.0"
-
-has@^1.0.0, has@^1.0.1, has@^1.0.3, has@~1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
-  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
-  dependencies:
-    function-bind "^1.1.1"
-
-hash-base@^3.0.0:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
-  integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
-  dependencies:
-    inherits "^2.0.1"
-    safe-buffer "^5.0.1"
-
-hash-sum@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04"
-  integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=
-
-hash.js@^1.0.0, hash.js@^1.0.3:
-  version "1.1.7"
-  resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
-  integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
-  dependencies:
-    inherits "^2.0.3"
-    minimalistic-assert "^1.0.1"
-
-he@1.2.x, he@^1.1.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
-  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
-
-hex-color-regex@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
-  integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
-
-highlight.js@^9.6.0:
-  version "9.15.6"
-  resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.6.tgz#72d4d8d779ec066af9a17cb14360c3def0aa57c4"
-  integrity sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==
-
-hmac-drbg@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
-  integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
-  dependencies:
-    hash.js "^1.0.3"
-    minimalistic-assert "^1.0.0"
-    minimalistic-crypto-utils "^1.0.1"
-
-home-or-tmp@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
-  integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
-  dependencies:
-    os-homedir "^1.0.0"
-    os-tmpdir "^1.0.1"
-
-hoopy@^0.1.2:
-  version "0.1.4"
-  resolved "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d"
-  integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==
-
-hosted-git-info@^2.1.4:
-  version "2.7.1"
-  resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
-  integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==
-
-hpack.js@^2.1.6:
-  version "2.1.6"
-  resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
-  integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=
-  dependencies:
-    inherits "^2.0.1"
-    obuf "^1.0.0"
-    readable-stream "^2.0.1"
-    wbuf "^1.1.0"
-
-hsl-regex@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e"
-  integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=
-
-hsla-regex@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"
-  integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg=
-
-html-comment-regex@^1.1.0:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
-  integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
-
-html-encoding-sniffer@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
-  integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==
-  dependencies:
-    whatwg-encoding "^1.0.1"
-
-html-entities@^1.2.1:
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
-  integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=
-
-html-minifier@^3.2.3:
-  version "3.5.21"
-  resolved "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c"
-  integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==
-  dependencies:
-    camel-case "3.0.x"
-    clean-css "4.2.x"
-    commander "2.17.x"
-    he "1.2.x"
-    param-case "2.1.x"
-    relateurl "0.2.x"
-    uglify-js "3.4.x"
-
-html-tags@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b"
-  integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=
-
-html-webpack-plugin@^3.2.0:
-  version "3.2.0"
-  resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b"
-  integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s=
-  dependencies:
-    html-minifier "^3.2.3"
-    loader-utils "^0.2.16"
-    lodash "^4.17.3"
-    pretty-error "^2.0.2"
-    tapable "^1.0.0"
-    toposort "^1.0.0"
-    util.promisify "1.0.0"
-
-htmlparser2@^3.10.0, htmlparser2@^3.3.0:
-  version "3.10.1"
-  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
-  integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
-  dependencies:
-    domelementtype "^1.3.1"
-    domhandler "^2.3.0"
-    domutils "^1.5.1"
-    entities "^1.1.1"
-    inherits "^2.0.1"
-    readable-stream "^3.1.1"
-
-http-deceiver@^1.2.7:
-  version "1.2.7"
-  resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
-  integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=
-
-http-errors@1.7.2, http-errors@~1.7.2:
-  version "1.7.2"
-  resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
-  integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
-  dependencies:
-    depd "~1.1.2"
-    inherits "2.0.3"
-    setprototypeof "1.1.1"
-    statuses ">= 1.5.0 < 2"
-    toidentifier "1.0.0"
-
-http-errors@~1.6.2:
-  version "1.6.3"
-  resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
-  integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
-  dependencies:
-    depd "~1.1.2"
-    inherits "2.0.3"
-    setprototypeof "1.1.0"
-    statuses ">= 1.4.0 < 2"
-
-http-parser-js@>=0.4.0:
-  version "0.5.0"
-  resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8"
-  integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==
-
-http-proxy-middleware@^0.19.1:
-  version "0.19.1"
-  resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
-  integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==
-  dependencies:
-    http-proxy "^1.17.0"
-    is-glob "^4.0.0"
-    lodash "^4.17.11"
-    micromatch "^3.1.10"
-
-http-proxy@^1.17.0:
-  version "1.17.0"
-  resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a"
-  integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==
-  dependencies:
-    eventemitter3 "^3.0.0"
-    follow-redirects "^1.0.0"
-    requires-port "^1.0.0"
-
-http-signature@~1.2.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
-  integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
-  dependencies:
-    assert-plus "^1.0.0"
-    jsprim "^1.2.2"
-    sshpk "^1.7.0"
-
-https-browserify@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
-  integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
-
-iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
-  version "0.4.24"
-  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
-  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
-  dependencies:
-    safer-buffer ">= 2.1.2 < 3"
-
-icss-replace-symbols@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
-  integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
-
-icss-utils@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962"
-  integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=
-  dependencies:
-    postcss "^6.0.1"
-
-ieee754@^1.1.4:
-  version "1.1.13"
-  resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
-  integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
-
-iferr@^0.1.5:
-  version "0.1.5"
-  resolved "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
-  integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
-
-ignore-walk@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
-  integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==
-  dependencies:
-    minimatch "^3.0.4"
-
-ignore@^3.3.3, ignore@^3.3.5:
-  version "3.3.10"
-  resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
-  integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
-
-ignore@^4.0.3, ignore@^4.0.6:
-  version "4.0.6"
-  resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
-  integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
-
-ignore@^5.0.2:
-  version "5.0.5"
-  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.0.5.tgz#c663c548d6ce186fb33616a8ccb5d46e56bdbbf9"
-  integrity sha512-kOC8IUb8HSDMVcYrDVezCxpJkzSQWTAzf3olpKM6o9rM5zpojx23O0Fl8Wr4+qJ6ZbPEHqf1fdwev/DS7v7pmA==
-
-image-size@~0.5.0:
-  version "0.5.5"
-  resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
-  integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=
-
-import-cwd@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
-  integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=
-  dependencies:
-    import-from "^2.1.0"
-
-import-fresh@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
-  integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
-  dependencies:
-    caller-path "^2.0.0"
-    resolve-from "^3.0.0"
-
-import-fresh@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390"
-  integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==
-  dependencies:
-    parent-module "^1.0.0"
-    resolve-from "^4.0.0"
-
-import-from@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
-  integrity sha1-M1238qev/VOqpHHUuAId7ja387E=
-  dependencies:
-    resolve-from "^3.0.0"
-
-import-local@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"
-  integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==
-  dependencies:
-    pkg-dir "^2.0.0"
-    resolve-cwd "^2.0.0"
-
-import-local@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
-  integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
-  dependencies:
-    pkg-dir "^3.0.0"
-    resolve-cwd "^2.0.0"
-
-imurmurhash@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
-  integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
-
-indexes-of@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
-  integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
-
-indexof@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
-  integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
-
-inflight@^1.0.4:
-  version "1.0.6"
-  resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
-  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
-  dependencies:
-    once "^1.3.0"
-    wrappy "1"
-
-inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
-  version "2.0.3"
-  resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-  integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-
-inherits@2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
-  integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
-
-ini@^1.3.4, ini@~1.3.0:
-  version "1.3.5"
-  resolved "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
-  integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
-
-inquirer@3.0.6:
-  version "3.0.6"
-  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347"
-  integrity sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=
-  dependencies:
-    ansi-escapes "^1.1.0"
-    chalk "^1.0.0"
-    cli-cursor "^2.1.0"
-    cli-width "^2.0.0"
-    external-editor "^2.0.1"
-    figures "^2.0.0"
-    lodash "^4.3.0"
-    mute-stream "0.0.7"
-    run-async "^2.2.0"
-    rx "^4.1.0"
-    string-width "^2.0.0"
-    strip-ansi "^3.0.0"
-    through "^2.3.6"
-
-inquirer@^3.0.6:
-  version "3.3.0"
-  resolved "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
-  integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==
-  dependencies:
-    ansi-escapes "^3.0.0"
-    chalk "^2.0.0"
-    cli-cursor "^2.1.0"
-    cli-width "^2.0.0"
-    external-editor "^2.0.4"
-    figures "^2.0.0"
-    lodash "^4.3.0"
-    mute-stream "0.0.7"
-    run-async "^2.2.0"
-    rx-lite "^4.0.8"
-    rx-lite-aggregates "^4.0.8"
-    string-width "^2.1.0"
-    strip-ansi "^4.0.0"
-    through "^2.3.6"
-
-inquirer@^6.2.2:
-  version "6.2.2"
-  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406"
-  integrity sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==
-  dependencies:
-    ansi-escapes "^3.2.0"
-    chalk "^2.4.2"
-    cli-cursor "^2.1.0"
-    cli-width "^2.0.0"
-    external-editor "^3.0.3"
-    figures "^2.0.0"
-    lodash "^4.17.11"
-    mute-stream "0.0.7"
-    run-async "^2.2.0"
-    rxjs "^6.4.0"
-    string-width "^2.1.0"
-    strip-ansi "^5.0.0"
-    through "^2.3.6"
-
-internal-ip@^4.3.0:
-  version "4.3.0"
-  resolved "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
-  integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==
-  dependencies:
-    default-gateway "^4.2.0"
-    ipaddr.js "^1.9.0"
-
-intersperse@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/intersperse/-/intersperse-1.0.0.tgz#f2561fb1cfef9f5277cc3347a22886b4351a5181"
-  integrity sha1-8lYfsc/vn1J3zDNHoiiGtDUaUYE=
-
-invariant@^2.2.2, invariant@^2.2.4:
-  version "2.2.4"
-  resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
-  integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
-  dependencies:
-    loose-envify "^1.0.0"
-
-invert-kv@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
-  integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
-
-invert-kv@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
-  integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
-
-ip-regex@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
-  integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
-
-ip@^1.1.0, ip@^1.1.5:
-  version "1.1.5"
-  resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
-  integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
-
-ipaddr.js@1.9.0, ipaddr.js@^1.9.0:
-  version "1.9.0"
-  resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65"
-  integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==
-
-is-absolute-url@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
-  integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
-
-is-accessor-descriptor@^0.1.6:
-  version "0.1.6"
-  resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
-  integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
-  dependencies:
-    kind-of "^3.0.2"
-
-is-accessor-descriptor@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
-  integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
-  dependencies:
-    kind-of "^6.0.0"
-
-is-arrayish@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
-  integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
-
-is-arrayish@^0.3.1:
-  version "0.3.2"
-  resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
-  integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
-
-is-binary-path@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
-  integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
-  dependencies:
-    binary-extensions "^1.0.0"
-
-is-buffer@^1.1.5, is-buffer@~1.1.1:
-  version "1.1.6"
-  resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
-  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-
-is-buffer@^2.0.2:
-  version "2.0.3"
-  resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725"
-  integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==
-
-is-callable@^1.1.3, is-callable@^1.1.4:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
-  integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
-
-is-ci@^1.0.10:
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
-  integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==
-  dependencies:
-    ci-info "^1.5.0"
-
-is-color-stop@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
-  integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=
-  dependencies:
-    css-color-names "^0.0.4"
-    hex-color-regex "^1.1.0"
-    hsl-regex "^1.0.0"
-    hsla-regex "^1.0.0"
-    rgb-regex "^1.0.1"
-    rgba-regex "^1.0.0"
-
-is-data-descriptor@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
-  integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
-  dependencies:
-    kind-of "^3.0.2"
-
-is-data-descriptor@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
-  integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
-  dependencies:
-    kind-of "^6.0.0"
-
-is-date-object@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
-  integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
-
-is-descriptor@^0.1.0:
-  version "0.1.6"
-  resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
-  integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
-  dependencies:
-    is-accessor-descriptor "^0.1.6"
-    is-data-descriptor "^0.1.4"
-    kind-of "^5.0.0"
-
-is-descriptor@^1.0.0, is-descriptor@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
-  integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
-  dependencies:
-    is-accessor-descriptor "^1.0.0"
-    is-data-descriptor "^1.0.0"
-    kind-of "^6.0.2"
-
-is-directory@^0.3.1:
-  version "0.3.1"
-  resolved "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
-  integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
-
-is-dotfile@^1.0.0:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
-  integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=
-
-is-equal-shallow@^0.1.3:
-  version "0.1.3"
-  resolved "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
-  integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
-  dependencies:
-    is-primitive "^2.0.0"
-
-is-extendable@^0.1.0, is-extendable@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
-  integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
-
-is-extendable@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
-  integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
-  dependencies:
-    is-plain-object "^2.0.4"
-
-is-extglob@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
-  integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
-
-is-extglob@^2.1.0, is-extglob@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
-  integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
-
-is-finite@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
-  integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
-  dependencies:
-    number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
-  integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
-  dependencies:
-    number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
-  integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
-
-is-generator-fn@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a"
-  integrity sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=
-
-is-glob@^2.0.0, is-glob@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
-  integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
-  dependencies:
-    is-extglob "^1.0.0"
-
-is-glob@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
-  integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
-  dependencies:
-    is-extglob "^2.1.0"
-
-is-glob@^4.0.0:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
-  integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
-  dependencies:
-    is-extglob "^2.1.1"
-
-is-negative-zero@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461"
-  integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=
-
-is-number@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
-  integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
-  dependencies:
-    kind-of "^3.0.2"
-
-is-number@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
-  integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
-  dependencies:
-    kind-of "^3.0.2"
-
-is-number@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
-  integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
-
-is-obj@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
-  integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
-
-is-path-cwd@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz#2e0c7e463ff5b7a0eb60852d851a6809347a124c"
-  integrity sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==
-
-is-path-in-cwd@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
-  integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==
-  dependencies:
-    is-path-inside "^2.1.0"
-
-is-path-inside@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
-  integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==
-  dependencies:
-    path-is-inside "^1.0.2"
-
-is-plain-obj@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
-  integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
-
-is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
-  version "2.0.4"
-  resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
-  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
-  dependencies:
-    isobject "^3.0.1"
-
-is-posix-bracket@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
-  integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
-
-is-primitive@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
-  integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
-
-is-promise@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
-  integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
-
-is-regex@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
-  integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
-  dependencies:
-    has "^1.0.1"
-
-is-resolvable@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
-  integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
-
-is-stream@^1.0.1, is-stream@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
-  integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
-
-is-svg@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75"
-  integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==
-  dependencies:
-    html-comment-regex "^1.1.0"
-
-is-symbol@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
-  integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
-  dependencies:
-    has-symbols "^1.0.0"
-
-is-typedarray@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-  integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
-
-is-utf8@^0.2.0:
-  version "0.2.1"
-  resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
-  integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
-
-is-whitespace@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f"
-  integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38=
-
-is-windows@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
-  integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
-
-is-wsl@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
-  integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
-
-isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-
-isarray@~0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
-  integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
-
-isexe@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
-  integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
-
-ismobilejs@^0.5.1:
-  version "0.5.1"
-  resolved "https://registry.yarnpkg.com/ismobilejs/-/ismobilejs-0.5.1.tgz#0e3f825e29e32f84ad5ddbb60e9e04a894046488"
-  integrity sha512-QX4STsOcBYqlTjVGuAdP1MiRVxtiUbRHOKH0v7Gn1EvfUVIQnrSdgCM4zB4VCZuIejnb2NUMUx0Bwd3EIG6yyA==
-
-isobject@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
-  integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
-  dependencies:
-    isarray "1.0.0"
-
-isobject@^3.0.0, isobject@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
-  integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
-
-isstream@~0.1.2:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-  integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
-
-istanbul-api@^1.3.1:
-  version "1.3.7"
-  resolved "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa"
-  integrity sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==
-  dependencies:
-    async "^2.1.4"
-    fileset "^2.0.2"
-    istanbul-lib-coverage "^1.2.1"
-    istanbul-lib-hook "^1.2.2"
-    istanbul-lib-instrument "^1.10.2"
-    istanbul-lib-report "^1.1.5"
-    istanbul-lib-source-maps "^1.2.6"
-    istanbul-reports "^1.5.1"
-    js-yaml "^3.7.0"
-    mkdirp "^0.5.1"
-    once "^1.4.0"
-
-istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1:
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0"
-  integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==
-
-istanbul-lib-hook@^1.2.2:
-  version "1.2.2"
-  resolved "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86"
-  integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==
-  dependencies:
-    append-transform "^0.4.0"
-
-istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2:
-  version "1.10.2"
-  resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca"
-  integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==
-  dependencies:
-    babel-generator "^6.18.0"
-    babel-template "^6.16.0"
-    babel-traverse "^6.18.0"
-    babel-types "^6.18.0"
-    babylon "^6.18.0"
-    istanbul-lib-coverage "^1.2.1"
-    semver "^5.3.0"
-
-istanbul-lib-report@^1.1.5:
-  version "1.1.5"
-  resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c"
-  integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==
-  dependencies:
-    istanbul-lib-coverage "^1.2.1"
-    mkdirp "^0.5.1"
-    path-parse "^1.0.5"
-    supports-color "^3.1.2"
-
-istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6:
-  version "1.2.6"
-  resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f"
-  integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==
-  dependencies:
-    debug "^3.1.0"
-    istanbul-lib-coverage "^1.2.1"
-    mkdirp "^0.5.1"
-    rimraf "^2.6.1"
-    source-map "^0.5.3"
-
-istanbul-reports@^1.5.1:
-  version "1.5.1"
-  resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a"
-  integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==
-  dependencies:
-    handlebars "^4.0.3"
-
-javascript-stringify@^1.6.0:
-  version "1.6.0"
-  resolved "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3"
-  integrity sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=
-
-jest-changed-files@^23.4.2:
-  version "23.4.2"
-  resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83"
-  integrity sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==
-  dependencies:
-    throat "^4.0.0"
-
-jest-cli@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-23.6.0.tgz#61ab917744338f443ef2baa282ddffdd658a5da4"
-  integrity sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==
-  dependencies:
-    ansi-escapes "^3.0.0"
-    chalk "^2.0.1"
-    exit "^0.1.2"
-    glob "^7.1.2"
-    graceful-fs "^4.1.11"
-    import-local "^1.0.0"
-    is-ci "^1.0.10"
-    istanbul-api "^1.3.1"
-    istanbul-lib-coverage "^1.2.0"
-    istanbul-lib-instrument "^1.10.1"
-    istanbul-lib-source-maps "^1.2.4"
-    jest-changed-files "^23.4.2"
-    jest-config "^23.6.0"
-    jest-environment-jsdom "^23.4.0"
-    jest-get-type "^22.1.0"
-    jest-haste-map "^23.6.0"
-    jest-message-util "^23.4.0"
-    jest-regex-util "^23.3.0"
-    jest-resolve-dependencies "^23.6.0"
-    jest-runner "^23.6.0"
-    jest-runtime "^23.6.0"
-    jest-snapshot "^23.6.0"
-    jest-util "^23.4.0"
-    jest-validate "^23.6.0"
-    jest-watcher "^23.4.0"
-    jest-worker "^23.2.0"
-    micromatch "^2.3.11"
-    node-notifier "^5.2.1"
-    prompts "^0.1.9"
-    realpath-native "^1.0.0"
-    rimraf "^2.5.4"
-    slash "^1.0.0"
-    string-length "^2.0.0"
-    strip-ansi "^4.0.0"
-    which "^1.2.12"
-    yargs "^11.0.0"
-
-jest-config@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/jest-config/-/jest-config-23.6.0.tgz#f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d"
-  integrity sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==
-  dependencies:
-    babel-core "^6.0.0"
-    babel-jest "^23.6.0"
-    chalk "^2.0.1"
-    glob "^7.1.1"
-    jest-environment-jsdom "^23.4.0"
-    jest-environment-node "^23.4.0"
-    jest-get-type "^22.1.0"
-    jest-jasmine2 "^23.6.0"
-    jest-regex-util "^23.3.0"
-    jest-resolve "^23.6.0"
-    jest-util "^23.4.0"
-    jest-validate "^23.6.0"
-    micromatch "^2.3.11"
-    pretty-format "^23.6.0"
-
-jest-diff@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d"
-  integrity sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==
-  dependencies:
-    chalk "^2.0.1"
-    diff "^3.2.0"
-    jest-get-type "^22.1.0"
-    pretty-format "^23.6.0"
-
-jest-docblock@^23.2.0:
-  version "23.2.0"
-  resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7"
-  integrity sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=
-  dependencies:
-    detect-newline "^2.1.0"
-
-jest-each@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/jest-each/-/jest-each-23.6.0.tgz#ba0c3a82a8054387016139c733a05242d3d71575"
-  integrity sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==
-  dependencies:
-    chalk "^2.0.1"
-    pretty-format "^23.6.0"
-
-jest-environment-jsdom@^23.4.0:
-  version "23.4.0"
-  resolved "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023"
-  integrity sha1-BWp5UrP+pROsYqFAosNox52eYCM=
-  dependencies:
-    jest-mock "^23.2.0"
-    jest-util "^23.4.0"
-    jsdom "^11.5.1"
-
-jest-environment-node@^23.4.0:
-  version "23.4.0"
-  resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10"
-  integrity sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=
-  dependencies:
-    jest-mock "^23.2.0"
-    jest-util "^23.4.0"
-
-jest-get-type@^22.1.0:
-  version "22.4.3"
-  resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4"
-  integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==
-
-jest-haste-map@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.6.0.tgz#2e3eb997814ca696d62afdb3f2529f5bbc935e16"
-  integrity sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==
-  dependencies:
-    fb-watchman "^2.0.0"
-    graceful-fs "^4.1.11"
-    invariant "^2.2.4"
-    jest-docblock "^23.2.0"
-    jest-serializer "^23.0.1"
-    jest-worker "^23.2.0"
-    micromatch "^2.3.11"
-    sane "^2.0.0"
-
-jest-jasmine2@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0"
-  integrity sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==
-  dependencies:
-    babel-traverse "^6.0.0"
-    chalk "^2.0.1"
-    co "^4.6.0"
-    expect "^23.6.0"
-    is-generator-fn "^1.0.0"
-    jest-diff "^23.6.0"
-    jest-each "^23.6.0"
-    jest-matcher-utils "^23.6.0"
-    jest-message-util "^23.4.0"
-    jest-snapshot "^23.6.0"
-    jest-util "^23.4.0"
-    pretty-format "^23.6.0"
-
-jest-leak-detector@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz#e4230fd42cf381a1a1971237ad56897de7e171de"
-  integrity sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==
-  dependencies:
-    pretty-format "^23.6.0"
-
-jest-matcher-utils@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80"
-  integrity sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==
-  dependencies:
-    chalk "^2.0.1"
-    jest-get-type "^22.1.0"
-    pretty-format "^23.6.0"
-
-jest-message-util@^23.4.0:
-  version "23.4.0"
-  resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f"
-  integrity sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=
-  dependencies:
-    "@babel/code-frame" "^7.0.0-beta.35"
-    chalk "^2.0.1"
-    micromatch "^2.3.11"
-    slash "^1.0.0"
-    stack-utils "^1.0.1"
-
-jest-mock@^23.2.0:
-  version "23.2.0"
-  resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134"
-  integrity sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=
-
-jest-regex-util@^23.3.0:
-  version "23.3.0"
-  resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5"
-  integrity sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=
-
-jest-resolve-dependencies@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz#b4526af24c8540d9a3fab102c15081cf509b723d"
-  integrity sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==
-  dependencies:
-    jest-regex-util "^23.3.0"
-    jest-snapshot "^23.6.0"
-
-jest-resolve@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.6.0.tgz#cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae"
-  integrity sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==
-  dependencies:
-    browser-resolve "^1.11.3"
-    chalk "^2.0.1"
-    realpath-native "^1.0.0"
-
-jest-runner@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-23.6.0.tgz#3894bd219ffc3f3cb94dc48a4170a2e6f23a5a38"
-  integrity sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==
-  dependencies:
-    exit "^0.1.2"
-    graceful-fs "^4.1.11"
-    jest-config "^23.6.0"
-    jest-docblock "^23.2.0"
-    jest-haste-map "^23.6.0"
-    jest-jasmine2 "^23.6.0"
-    jest-leak-detector "^23.6.0"
-    jest-message-util "^23.4.0"
-    jest-runtime "^23.6.0"
-    jest-util "^23.4.0"
-    jest-worker "^23.2.0"
-    source-map-support "^0.5.6"
-    throat "^4.0.0"
-
-jest-runtime@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.6.0.tgz#059e58c8ab445917cd0e0d84ac2ba68de8f23082"
-  integrity sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==
-  dependencies:
-    babel-core "^6.0.0"
-    babel-plugin-istanbul "^4.1.6"
-    chalk "^2.0.1"
-    convert-source-map "^1.4.0"
-    exit "^0.1.2"
-    fast-json-stable-stringify "^2.0.0"
-    graceful-fs "^4.1.11"
-    jest-config "^23.6.0"
-    jest-haste-map "^23.6.0"
-    jest-message-util "^23.4.0"
-    jest-regex-util "^23.3.0"
-    jest-resolve "^23.6.0"
-    jest-snapshot "^23.6.0"
-    jest-util "^23.4.0"
-    jest-validate "^23.6.0"
-    micromatch "^2.3.11"
-    realpath-native "^1.0.0"
-    slash "^1.0.0"
-    strip-bom "3.0.0"
-    write-file-atomic "^2.1.0"
-    yargs "^11.0.0"
-
-jest-serializer-vue@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/jest-serializer-vue/-/jest-serializer-vue-2.0.2.tgz#b238ef286357ec6b480421bd47145050987d59b3"
-  integrity sha1-sjjvKGNX7GtIBCG9RxRQUJh9WbM=
-  dependencies:
-    pretty "2.0.0"
-
-jest-serializer@^23.0.1:
-  version "23.0.1"
-  resolved "https://registry.npmjs.org/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165"
-  integrity sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=
-
-jest-snapshot@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a"
-  integrity sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==
-  dependencies:
-    babel-types "^6.0.0"
-    chalk "^2.0.1"
-    jest-diff "^23.6.0"
-    jest-matcher-utils "^23.6.0"
-    jest-message-util "^23.4.0"
-    jest-resolve "^23.6.0"
-    mkdirp "^0.5.1"
-    natural-compare "^1.4.0"
-    pretty-format "^23.6.0"
-    semver "^5.5.0"
-
-jest-transform-stub@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/jest-transform-stub/-/jest-transform-stub-2.0.0.tgz#19018b0851f7568972147a5d60074b55f0225a7d"
-  integrity sha512-lspHaCRx/mBbnm3h4uMMS3R5aZzMwyNpNIJLXj4cEsV0mIUtS4IjYJLSoyjRCtnxb6RIGJ4NL2quZzfIeNhbkg==
-
-jest-util@^23.4.0:
-  version "23.4.0"
-  resolved "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561"
-  integrity sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=
-  dependencies:
-    callsites "^2.0.0"
-    chalk "^2.0.1"
-    graceful-fs "^4.1.11"
-    is-ci "^1.0.10"
-    jest-message-util "^23.4.0"
-    mkdirp "^0.5.1"
-    slash "^1.0.0"
-    source-map "^0.6.0"
-
-jest-validate@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474"
-  integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==
-  dependencies:
-    chalk "^2.0.1"
-    jest-get-type "^22.1.0"
-    leven "^2.1.0"
-    pretty-format "^23.6.0"
-
-jest-watch-typeahead@0.2.1:
-  version "0.2.1"
-  resolved "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.2.1.tgz#6c40f232996ca6c39977e929e9f79b189e7d87e4"
-  integrity sha512-xdhEtKSj0gmnkDQbPTIHvcMmXNUDzYpHLEJ5TFqlaI+schi2NI96xhWiZk9QoesAS7oBmKwWWsHazTrYl2ORgg==
-  dependencies:
-    ansi-escapes "^3.0.0"
-    chalk "^2.4.1"
-    jest-watcher "^23.1.0"
-    slash "^2.0.0"
-    string-length "^2.0.0"
-    strip-ansi "^5.0.0"
-
-jest-watcher@^23.1.0, jest-watcher@^23.4.0:
-  version "23.4.0"
-  resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c"
-  integrity sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=
-  dependencies:
-    ansi-escapes "^3.0.0"
-    chalk "^2.0.1"
-    string-length "^2.0.0"
-
-jest-worker@^23.2.0:
-  version "23.2.0"
-  resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9"
-  integrity sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=
-  dependencies:
-    merge-stream "^1.0.1"
-
-jest@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d"
-  integrity sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==
-  dependencies:
-    import-local "^1.0.0"
-    jest-cli "^23.6.0"
-
-js-beautify@^1.6.12, js-beautify@^1.6.14:
-  version "1.10.0"
-  resolved "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.0.tgz#9753a13c858d96828658cd18ae3ca0e5783ea672"
-  integrity sha512-OMwf/tPDpE/BLlYKqZOhqWsd3/z2N3KOlyn1wsCRGFwViE8LOQTcDtathQvHvZc+q+zWmcNAbwKSC+iJoMaH2Q==
-  dependencies:
-    config-chain "^1.1.12"
-    editorconfig "^0.15.3"
-    glob "^7.1.3"
-    mkdirp "~0.5.1"
-    nopt "~4.0.1"
-
-js-cookie@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.0.tgz#1b2c279a6eece380a12168b92485265b35b1effb"
-  integrity sha1-Gywnmm7s44ChIWi5JIUmWzWx7/s=
-
-js-levenshtein@^1.1.3:
-  version "1.1.6"
-  resolved "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"
-  integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==
-
-js-message@1.0.5:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz#2300d24b1af08e89dd095bc1a4c9c9cfcb892d15"
-  integrity sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=
-
-js-queue@2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/js-queue/-/js-queue-2.0.0.tgz#362213cf860f468f0125fc6c96abc1742531f948"
-  integrity sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=
-  dependencies:
-    easy-stack "^1.0.0"
-
-"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
-  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-
-js-tokens@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
-  integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
-
-js-yaml@^3.12.0, js-yaml@^3.13.1, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1:
-  version "3.13.1"
-  resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
-  integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
-  dependencies:
-    argparse "^1.0.7"
-    esprima "^4.0.0"
-
-jsbn@~0.1.0:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
-  integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
-
-jsdom@^11.5.1:
-  version "11.12.0"
-  resolved "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8"
-  integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==
-  dependencies:
-    abab "^2.0.0"
-    acorn "^5.5.3"
-    acorn-globals "^4.1.0"
-    array-equal "^1.0.0"
-    cssom ">= 0.3.2 < 0.4.0"
-    cssstyle "^1.0.0"
-    data-urls "^1.0.0"
-    domexception "^1.0.1"
-    escodegen "^1.9.1"
-    html-encoding-sniffer "^1.0.2"
-    left-pad "^1.3.0"
-    nwsapi "^2.0.7"
-    parse5 "4.0.0"
-    pn "^1.1.0"
-    request "^2.87.0"
-    request-promise-native "^1.0.5"
-    sax "^1.2.4"
-    symbol-tree "^3.2.2"
-    tough-cookie "^2.3.4"
-    w3c-hr-time "^1.0.1"
-    webidl-conversions "^4.0.2"
-    whatwg-encoding "^1.0.3"
-    whatwg-mimetype "^2.1.0"
-    whatwg-url "^6.4.1"
-    ws "^5.2.0"
-    xml-name-validator "^3.0.0"
-
-jsesc@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
-  integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
-
-jsesc@^2.5.1:
-  version "2.5.2"
-  resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
-  integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
-
-jsesc@~0.5.0:
-  version "0.5.0"
-  resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
-  integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
-
-json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
-  integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-
-json-schema-traverse@^0.3.0:
-  version "0.3.1"
-  resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
-  integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=
-
-json-schema-traverse@^0.4.1:
-  version "0.4.1"
-  resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
-  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-
-json-schema@0.2.3:
-  version "0.2.3"
-  resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
-  integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
-
-json-stable-stringify-without-jsonify@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
-  integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
-
-json-stringify-safe@~5.0.1:
-  version "5.0.1"
-  resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-  integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
-
-json2module@^0.0.3:
-  version "0.0.3"
-  resolved "https://registry.yarnpkg.com/json2module/-/json2module-0.0.3.tgz#00fb5f4a9b7adfc3f0647c29cb17bcd1979be9b2"
-  integrity sha1-APtfSpt638PwZHwpyxe80Zeb6bI=
-  dependencies:
-    rw "^1.3.2"
-
-json2mq@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a"
-  integrity sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=
-  dependencies:
-    string-convert "^0.2.0"
-
-json3@^3.3.2:
-  version "3.3.2"
-  resolved "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
-  integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=
-
-json5@^0.5.0, json5@^0.5.1:
-  version "0.5.1"
-  resolved "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
-  integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
-
-json5@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
-  integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
-  dependencies:
-    minimist "^1.2.0"
-
-json5@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850"
-  integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==
-  dependencies:
-    minimist "^1.2.0"
-
-jsonfile@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
-  integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
-  optionalDependencies:
-    graceful-fs "^4.1.6"
-
-jsonify@~0.0.0:
-  version "0.0.0"
-  resolved "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
-  integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
-
-jsprim@^1.2.2:
-  version "1.4.1"
-  resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
-  integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
-  dependencies:
-    assert-plus "1.0.0"
-    extsprintf "1.3.0"
-    json-schema "0.2.3"
-    verror "1.10.0"
-
-killable@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
-  integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==
-
-kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
-  version "3.2.2"
-  resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
-  integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
-  dependencies:
-    is-buffer "^1.1.5"
-
-kind-of@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
-  integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
-  dependencies:
-    is-buffer "^1.1.5"
-
-kind-of@^5.0.0:
-  version "5.1.0"
-  resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
-  integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
-
-kind-of@^6.0.0, kind-of@^6.0.2:
-  version "6.0.2"
-  resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
-  integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
-
-kleur@^2.0.1:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300"
-  integrity sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==
-
-launch-editor-middleware@^2.2.1:
-  version "2.2.1"
-  resolved "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157"
-  integrity sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==
-  dependencies:
-    launch-editor "^2.2.1"
-
-launch-editor@^2.2.1:
-  version "2.2.1"
-  resolved "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz#871b5a3ee39d6680fcc26d37930b6eeda89db0ca"
-  integrity sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==
-  dependencies:
-    chalk "^2.3.0"
-    shell-quote "^1.6.1"
-
-lazy-cache@^1.0.3:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
-  integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
-
-lcid@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
-  integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
-  dependencies:
-    invert-kv "^1.0.0"
-
-lcid@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
-  integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
-  dependencies:
-    invert-kv "^2.0.0"
-
-left-pad@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
-  integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==
-
-less-loader@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.1.0.tgz#2c1352c5b09a4f84101490274fd51674de41363e"
-  integrity sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==
-  dependencies:
-    clone "^2.1.1"
-    loader-utils "^1.1.0"
-    pify "^3.0.0"
-
-less@^3.8.1:
-  version "3.9.0"
-  resolved "https://registry.yarnpkg.com/less/-/less-3.9.0.tgz#b7511c43f37cf57dc87dffd9883ec121289b1474"
-  integrity sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==
-  dependencies:
-    clone "^2.1.2"
-  optionalDependencies:
-    errno "^0.1.1"
-    graceful-fs "^4.1.2"
-    image-size "~0.5.0"
-    mime "^1.4.1"
-    mkdirp "^0.5.0"
-    promise "^7.1.1"
-    request "^2.83.0"
-    source-map "~0.6.0"
-
-leven@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
-  integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA=
-
-levn@^0.3.0, levn@~0.3.0:
-  version "0.3.0"
-  resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
-  integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
-  dependencies:
-    prelude-ls "~1.1.2"
-    type-check "~0.3.2"
-
-load-json-file@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
-  integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
-  dependencies:
-    graceful-fs "^4.1.2"
-    parse-json "^2.2.0"
-    pify "^2.0.0"
-    pinkie-promise "^2.0.0"
-    strip-bom "^2.0.0"
-
-load-json-file@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
-  integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
-  dependencies:
-    graceful-fs "^4.1.2"
-    parse-json "^2.2.0"
-    pify "^2.0.0"
-    strip-bom "^3.0.0"
-
-loader-fs-cache@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz#54cedf6b727e1779fd8f01205f05f6e88706f086"
-  integrity sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==
-  dependencies:
-    find-cache-dir "^0.1.1"
-    mkdirp "0.5.1"
-
-loader-runner@^2.3.0, loader-runner@^2.3.1:
-  version "2.4.0"
-  resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
-  integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
-
-loader-utils@1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
-  integrity sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=
-  dependencies:
-    big.js "^3.1.3"
-    emojis-list "^2.0.0"
-    json5 "^0.5.0"
-
-loader-utils@^0.2.16:
-  version "0.2.17"
-  resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
-  integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=
-  dependencies:
-    big.js "^3.1.3"
-    emojis-list "^2.0.0"
-    json5 "^0.5.0"
-    object-assign "^4.0.1"
-
-loader-utils@^1.0.2, loader-utils@^1.1.0:
-  version "1.2.3"
-  resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
-  integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
-  dependencies:
-    big.js "^5.2.2"
-    emojis-list "^2.0.0"
-    json5 "^1.0.1"
-
-locate-path@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
-  integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
-  dependencies:
-    p-locate "^2.0.0"
-    path-exists "^3.0.0"
-
-locate-path@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
-  integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
-  dependencies:
-    p-locate "^3.0.0"
-    path-exists "^3.0.0"
-
-lodash.defaultsdeep@^4.6.0:
-  version "4.6.1"
-  resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6"
-  integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==
-
-lodash.get@^4.4.2:
-  version "4.4.2"
-  resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
-  integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
-
-lodash.kebabcase@^4.1.1:
-  version "4.1.1"
-  resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
-  integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY=
-
-lodash.mapvalues@^4.6.0:
-  version "4.6.0"
-  resolved "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c"
-  integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=
-
-lodash.memoize@^4.1.2:
-  version "4.1.2"
-  resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
-  integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
-
-lodash.pick@^4.4.0:
-  version "4.4.0"
-  resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
-  integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=
-
-lodash.sortby@^4.7.0:
-  version "4.7.0"
-  resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
-  integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
-
-lodash.transform@^4.6.0:
-  version "4.6.0"
-  resolved "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0"
-  integrity sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=
-
-lodash.uniq@^4.5.0:
-  version "4.5.0"
-  resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
-  integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
-
-lodash@4.x, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0:
-  version "4.17.14"
-  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba"
-  integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==
-
-log-symbols@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
-  integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
-  dependencies:
-    chalk "^2.0.1"
-
-loglevel@^1.6.1:
-  version "1.6.1"
-  resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
-  integrity sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=
-
-longest@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
-  integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
-
-loose-envify@^1.0.0:
-  version "1.4.0"
-  resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
-  integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
-  dependencies:
-    js-tokens "^3.0.0 || ^4.0.0"
-
-lower-case@^1.1.1:
-  version "1.1.4"
-  resolved "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
-  integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw=
-
-lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2, lru-cache@^4.1.5:
-  version "4.1.5"
-  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
-  integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
-  dependencies:
-    pseudomap "^1.0.2"
-    yallist "^2.1.2"
-
-lru-cache@^5.1.1:
-  version "5.1.1"
-  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
-  integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
-  dependencies:
-    yallist "^3.0.2"
-
-make-dir@^1.0.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
-  integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
-  dependencies:
-    pify "^3.0.0"
-
-make-dir@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
-  integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
-  dependencies:
-    pify "^4.0.1"
-    semver "^5.6.0"
-
-makeerror@1.0.x:
-  version "1.0.11"
-  resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
-  integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=
-  dependencies:
-    tmpl "1.0.x"
-
-mamacro@^0.0.3:
-  version "0.0.3"
-  resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4"
-  integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==
-
-map-age-cleaner@^0.1.1:
-  version "0.1.3"
-  resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
-  integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
-  dependencies:
-    p-defer "^1.0.0"
-
-map-cache@^0.2.2:
-  version "0.2.2"
-  resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
-  integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
-
-map-visit@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
-  integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
-  dependencies:
-    object-visit "^1.0.0"
-
-math-random@^1.0.1:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c"
-  integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==
-
-md5.js@^1.3.4:
-  version "1.3.5"
-  resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
-  integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
-  dependencies:
-    hash-base "^3.0.0"
-    inherits "^2.0.1"
-    safe-buffer "^5.1.2"
-
-md5@^2.2.1:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9"
-  integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=
-  dependencies:
-    charenc "~0.0.1"
-    crypt "~0.0.1"
-    is-buffer "~1.1.1"
-
-mdn-data@~1.1.0:
-  version "1.1.4"
-  resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01"
-  integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==
-
-media-typer@0.3.0:
-  version "0.3.0"
-  resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
-  integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
-
-mem@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
-  integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=
-  dependencies:
-    mimic-fn "^1.0.0"
-
-mem@^4.0.0:
-  version "4.3.0"
-  resolved "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
-  integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
-  dependencies:
-    map-age-cleaner "^0.1.1"
-    mimic-fn "^2.0.0"
-    p-is-promise "^2.0.0"
-
-memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1:
-  version "0.4.1"
-  resolved "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
-  integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
-  dependencies:
-    errno "^0.1.3"
-    readable-stream "^2.0.1"
-
-merge-descriptors@1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
-  integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
-
-merge-source-map@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
-  integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==
-  dependencies:
-    source-map "^0.6.1"
-
-merge-stream@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
-  integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=
-  dependencies:
-    readable-stream "^2.0.1"
-
-merge2@^1.2.3:
-  version "1.2.3"
-  resolved "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5"
-  integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==
-
-merge@^1.2.0:
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
-  integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
-
-methods@~1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
-  integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
-
-micromatch@^2.3.11:
-  version "2.3.11"
-  resolved "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
-  integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
-  dependencies:
-    arr-diff "^2.0.0"
-    array-unique "^0.2.1"
-    braces "^1.8.2"
-    expand-brackets "^0.1.4"
-    extglob "^0.3.1"
-    filename-regex "^2.0.0"
-    is-extglob "^1.0.0"
-    is-glob "^2.0.1"
-    kind-of "^3.0.2"
-    normalize-path "^2.0.1"
-    object.omit "^2.0.0"
-    parse-glob "^3.0.4"
-    regex-cache "^0.4.2"
-
-micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8:
-  version "3.1.10"
-  resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
-  integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
-  dependencies:
-    arr-diff "^4.0.0"
-    array-unique "^0.3.2"
-    braces "^2.3.1"
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    extglob "^2.0.4"
-    fragment-cache "^0.2.1"
-    kind-of "^6.0.2"
-    nanomatch "^1.2.9"
-    object.pick "^1.3.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.2"
-
-miller-rabin@^4.0.0:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
-  integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
-  dependencies:
-    bn.js "^4.0.0"
-    brorand "^1.0.1"
-
-mime-db@1.40.0, "mime-db@>= 1.40.0 < 2":
-  version "1.40.0"
-  resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
-  integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==
-
-mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
-  version "2.1.24"
-  resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81"
-  integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==
-  dependencies:
-    mime-db "1.40.0"
-
-mime@1.6.0, mime@^1.4.1:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
-  integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
-
-mime@^2.0.3, mime@^2.4.2:
-  version "2.4.3"
-  resolved "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz#229687331e86f68924e6cb59e1cdd937f18275fe"
-  integrity sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==
-
-mimic-fn@^1.0.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
-  integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
-
-mimic-fn@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
-  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-
-mini-css-extract-plugin@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.6.0.tgz#a3f13372d6fcde912f3ee4cd039665704801e3b9"
-  integrity sha512-79q5P7YGI6rdnVyIAV4NXpBQJFWdkzJxCim3Kog4078fM0piAaFlwocqbejdWtLW1cEzCexPrh6EdyFsPgVdAw==
-  dependencies:
-    loader-utils "^1.1.0"
-    normalize-url "^2.0.1"
-    schema-utils "^1.0.0"
-    webpack-sources "^1.1.0"
-
-minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
-  integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
-
-minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
-  integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
-
-minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
-  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
-  dependencies:
-    brace-expansion "^1.1.7"
-
-minimist@0.0.8:
-  version "0.0.8"
-  resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-  integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
-
-minimist@1.2.0, minimist@^1.1.1, minimist@^1.2.0, minimist@~1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-  integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
-
-minimist@~0.0.1:
-  version "0.0.10"
-  resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
-  integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
-
-minipass@^2.2.1, minipass@^2.3.4:
-  version "2.3.5"
-  resolved "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
-  integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
-  dependencies:
-    safe-buffer "^5.1.2"
-    yallist "^3.0.0"
-
-minizlib@^1.1.1:
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
-  integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
-  dependencies:
-    minipass "^2.2.1"
-
-mississippi@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f"
-  integrity sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==
-  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 "^2.0.1"
-    pumpify "^1.3.3"
-    stream-each "^1.1.0"
-    through2 "^2.0.0"
-
-mississippi@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
-  integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
-  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"
-
-mixin-deep@^1.2.0:
-  version "1.3.1"
-  resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
-  integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
-  dependencies:
-    for-in "^1.0.2"
-    is-extendable "^1.0.1"
-
-mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
-  version "0.5.1"
-  resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
-  integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
-  dependencies:
-    minimist "0.0.8"
-
-mockjs2@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/mockjs2/-/mockjs2-1.0.5.tgz#be80f670e0468092b15454169591e936c3bd29f9"
-  integrity sha512-2RPYSxVuIsmV0S8FwUh2srTm+K1EWr57GyUgjA5+6H49ZwqtFUlRfZAVJNYwKtswxehP4FDTsfuCRMd290bFTA==
-  dependencies:
-    commander "*"
-
-moment@^2.21.0, moment@^2.24.0:
-  version "2.24.0"
-  resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
-  integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
-
-move-concurrently@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
-  integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
-  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"
-
-ms@2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
-  integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-
-ms@2.1.1, ms@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
-  integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
-
-multicast-dns-service-types@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
-  integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=
-
-multicast-dns@^6.0.1:
-  version "6.2.3"
-  resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
-  integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==
-  dependencies:
-    dns-packet "^1.3.1"
-    thunky "^1.0.2"
-
-mutationobserver-shim@^0.3.2:
-  version "0.3.3"
-  resolved "https://registry.yarnpkg.com/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz#65869630bc89d7bf8c9cd9cb82188cd955aacd2b"
-  integrity sha512-gciOLNN8Vsf7YzcqRjKzlAJ6y7e+B86u7i3KXes0xfxx/nfLmozlW1Vn+Sc9x3tPIePFgc1AeIFhtRgkqTjzDQ==
-
-mute-stream@0.0.7:
-  version "0.0.7"
-  resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
-  integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
-
-mz@^2.4.0:
-  version "2.7.0"
-  resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
-  integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
-  dependencies:
-    any-promise "^1.0.0"
-    object-assign "^4.0.1"
-    thenify-all "^1.0.0"
-
-nan@^2.12.1:
-  version "2.14.0"
-  resolved "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
-  integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
-
-nanomatch@^1.2.9:
-  version "1.2.13"
-  resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
-  integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
-  dependencies:
-    arr-diff "^4.0.0"
-    array-unique "^0.3.2"
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    fragment-cache "^0.2.1"
-    is-windows "^1.0.2"
-    kind-of "^6.0.2"
-    object.pick "^1.3.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-natural-compare@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
-  integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
-
-needle@^2.2.1:
-  version "2.4.0"
-  resolved "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c"
-  integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==
-  dependencies:
-    debug "^3.2.6"
-    iconv-lite "^0.4.4"
-    sax "^1.2.4"
-
-negotiator@0.6.2:
-  version "0.6.2"
-  resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
-  integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
-
-neo-async@^2.5.0, neo-async@^2.6.0:
-  version "2.6.1"
-  resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
-  integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
-
-nice-try@^1.0.4:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
-  integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
-
-no-case@^2.2.0:
-  version "2.3.2"
-  resolved "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
-  integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==
-  dependencies:
-    lower-case "^1.1.1"
-
-node-cache@^4.1.1:
-  version "4.2.0"
-  resolved "https://registry.npmjs.org/node-cache/-/node-cache-4.2.0.tgz#48ac796a874e762582692004a376d26dfa875811"
-  integrity sha512-obRu6/f7S024ysheAjoYFEEBqqDWv4LOMNJEuO8vMeEw2AT4z+NCzO4hlc2lhI4vATzbCQv6kke9FVdx0RbCOw==
-  dependencies:
-    clone "2.x"
-    lodash "4.x"
-
-node-fetch@1.6.3:
-  version "1.6.3"
-  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04"
-  integrity sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=
-  dependencies:
-    encoding "^0.1.11"
-    is-stream "^1.0.1"
-
-node-forge@0.7.5:
-  version "0.7.5"
-  resolved "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df"
-  integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==
-
-node-int64@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
-  integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
-
-node-ipc@^9.1.1:
-  version "9.1.1"
-  resolved "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.1.tgz#4e245ed6938e65100e595ebc5dc34b16e8dd5d69"
-  integrity sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w==
-  dependencies:
-    event-pubsub "4.3.0"
-    js-message "1.0.5"
-    js-queue "2.0.0"
-
-node-libs-browser@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77"
-  integrity sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==
-  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.0"
-    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 "0.0.4"
-
-node-notifier@^5.2.1:
-  version "5.4.0"
-  resolved "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz#7b455fdce9f7de0c63538297354f3db468426e6a"
-  integrity sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==
-  dependencies:
-    growly "^1.3.0"
-    is-wsl "^1.1.0"
-    semver "^5.5.0"
-    shellwords "^0.1.1"
-    which "^1.3.0"
-
-node-pre-gyp@^0.12.0:
-  version "0.12.0"
-  resolved "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149"
-  integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==
-  dependencies:
-    detect-libc "^1.0.2"
-    mkdirp "^0.5.1"
-    needle "^2.2.1"
-    nopt "^4.0.1"
-    npm-packlist "^1.1.6"
-    npmlog "^4.0.2"
-    rc "^1.2.7"
-    rimraf "^2.6.1"
-    semver "^5.3.0"
-    tar "^4"
-
-node-releases@^1.1.19:
-  version "1.1.21"
-  resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.21.tgz#46c86f9adaceae4d63c75d3c2f2e6eee618e55f3"
-  integrity sha512-TwnURTCjc8a+ElJUjmDqU6+12jhli1Q61xOQmdZ7ECZVBZuQpN/1UnembiIHDM1wCcfLvh5wrWXUF5H6ufX64Q==
-  dependencies:
-    semver "^5.3.0"
-
-nopt@^4.0.1, nopt@~4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
-  integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
-  dependencies:
-    abbrev "1"
-    osenv "^0.1.4"
-
-normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
-  version "2.5.0"
-  resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
-  integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
-  dependencies:
-    hosted-git-info "^2.1.4"
-    resolve "^1.10.0"
-    semver "2 || 3 || 4 || 5"
-    validate-npm-package-license "^3.0.1"
-
-normalize-path@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379"
-  integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=
-
-normalize-path@^2.0.1, normalize-path@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
-  integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
-  dependencies:
-    remove-trailing-separator "^1.0.1"
-
-normalize-path@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
-  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-
-normalize-range@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
-  integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
-
-normalize-url@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6"
-  integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==
-  dependencies:
-    prepend-http "^2.0.0"
-    query-string "^5.0.1"
-    sort-keys "^2.0.0"
-
-normalize-url@^3.0.0:
-  version "3.3.0"
-  resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"
-  integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==
-
-npm-bundled@^1.0.1:
-  version "1.0.6"
-  resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd"
-  integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==
-
-npm-packlist@^1.1.6:
-  version "1.4.1"
-  resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc"
-  integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==
-  dependencies:
-    ignore-walk "^3.0.1"
-    npm-bundled "^1.0.1"
-
-npm-run-path@^2.0.0:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
-  integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
-  dependencies:
-    path-key "^2.0.0"
-
-npmlog@^4.0.2:
-  version "4.1.2"
-  resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
-  integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
-  dependencies:
-    are-we-there-yet "~1.1.2"
-    console-control-strings "~1.1.0"
-    gauge "~2.7.3"
-    set-blocking "~2.0.0"
-
-nprogress@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1"
-  integrity sha1-y480xTIT2JVyP8urkH6UIq28r7E=
-
-nth-check@^1.0.2, nth-check@~1.0.1:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
-  integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
-  dependencies:
-    boolbase "~1.0.0"
-
-num2fraction@^1.2.2:
-  version "1.2.2"
-  resolved "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
-  integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
-
-number-is-nan@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-  integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
-
-nwsapi@^2.0.7:
-  version "2.1.4"
-  resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f"
-  integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==
-
-oauth-sign@~0.9.0:
-  version "0.9.0"
-  resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
-  integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
-
-object-assign@4.x, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
-  version "4.1.1"
-  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
-  integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-
-object-copy@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
-  integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
-  dependencies:
-    copy-descriptor "^0.1.0"
-    define-property "^0.2.5"
-    kind-of "^3.0.3"
-
-object-hash@^1.1.4:
-  version "1.3.1"
-  resolved "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df"
-  integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==
-
-object-inspect@~1.6.0:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b"
-  integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==
-
-object-keys@^1.0.11, object-keys@^1.0.12:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
-  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
-
-object-visit@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
-  integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
-  dependencies:
-    isobject "^3.0.0"
-
-object.assign@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
-  integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
-  dependencies:
-    define-properties "^1.1.2"
-    function-bind "^1.1.1"
-    has-symbols "^1.0.0"
-    object-keys "^1.0.11"
-
-object.getownpropertydescriptors@^2.0.3:
-  version "2.0.3"
-  resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
-  integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=
-  dependencies:
-    define-properties "^1.1.2"
-    es-abstract "^1.5.1"
-
-object.omit@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
-  integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
-  dependencies:
-    for-own "^0.1.4"
-    is-extendable "^0.1.1"
-
-object.pick@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
-  integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
-  dependencies:
-    isobject "^3.0.1"
-
-object.values@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9"
-  integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==
-  dependencies:
-    define-properties "^1.1.3"
-    es-abstract "^1.12.0"
-    function-bind "^1.1.1"
-    has "^1.0.3"
-
-obuf@^1.0.0, obuf@^1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
-  integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
-
-omit.js@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/omit.js/-/omit.js-1.0.0.tgz#e013cb86a7517b9cf6f7cfb0ddb4297256a99288"
-  integrity sha512-O1rwbvEfAdhtonTv+v6IQeMOKTi/wlHcXpI3hehyPDlujkjSBQC6Vtzg0mdy+v2KVDmuPf7hAbHlTBM6q1bUHQ==
-  dependencies:
-    babel-runtime "^6.23.0"
-
-on-finished@~2.3.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
-  integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
-  dependencies:
-    ee-first "1.1.1"
-
-on-headers@~1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
-  integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
-
-once@^1.3.0, once@^1.3.1, once@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
-  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
-  dependencies:
-    wrappy "1"
-
-onetime@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
-  integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
-  dependencies:
-    mimic-fn "^1.0.0"
-
-open@^6.3.0:
-  version "6.3.0"
-  resolved "https://registry.npmjs.org/open/-/open-6.3.0.tgz#60d0b845ee38fae0631f5d739a21bd40e3d2a527"
-  integrity sha512-6AHdrJxPvAXIowO/aIaeHZ8CeMdDf7qCyRNq8NwJpinmCdXhz+NZR7ie1Too94lpciCDsG+qHGO9Mt0svA4OqA==
-  dependencies:
-    is-wsl "^1.1.0"
-
-opencollective-postinstall@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89"
-  integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==
-
-opencollective@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/opencollective/-/opencollective-1.0.3.tgz#aee6372bc28144583690c3ca8daecfc120dd0ef1"
-  integrity sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=
-  dependencies:
-    babel-polyfill "6.23.0"
-    chalk "1.1.3"
-    inquirer "3.0.6"
-    minimist "1.2.0"
-    node-fetch "1.6.3"
-    opn "4.0.2"
-
-opener@^1.5.1:
-  version "1.5.1"
-  resolved "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"
-  integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==
-
-opn@4.0.2:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95"
-  integrity sha1-erwi5kTf9jsKltWrfyeQwPAavJU=
-  dependencies:
-    object-assign "^4.0.1"
-    pinkie-promise "^2.0.0"
-
-opn@^5.5.0:
-  version "5.5.0"
-  resolved "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
-  integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==
-  dependencies:
-    is-wsl "^1.1.0"
-
-optimist@^0.6.1:
-  version "0.6.1"
-  resolved "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
-  integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
-  dependencies:
-    minimist "~0.0.1"
-    wordwrap "~0.0.2"
-
-optionator@^0.8.1, optionator@^0.8.2:
-  version "0.8.2"
-  resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
-  integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
-  dependencies:
-    deep-is "~0.1.3"
-    fast-levenshtein "~2.0.4"
-    levn "~0.3.0"
-    prelude-ls "~1.1.2"
-    type-check "~0.3.2"
-    wordwrap "~1.0.0"
-
-ora@^3.4.0:
-  version "3.4.0"
-  resolved "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318"
-  integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==
-  dependencies:
-    chalk "^2.4.2"
-    cli-cursor "^2.1.0"
-    cli-spinners "^2.0.0"
-    log-symbols "^2.2.0"
-    strip-ansi "^5.2.0"
-    wcwidth "^1.0.1"
-
-original@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
-  integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==
-  dependencies:
-    url-parse "^1.4.3"
-
-os-browserify@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
-  integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
-
-os-homedir@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
-  integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
-
-os-locale@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
-  integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==
-  dependencies:
-    execa "^0.7.0"
-    lcid "^1.0.0"
-    mem "^1.1.0"
-
-os-locale@^3.0.0, os-locale@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
-  integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
-  dependencies:
-    execa "^1.0.0"
-    lcid "^2.0.0"
-    mem "^4.0.0"
-
-os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
-  integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
-
-osenv@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
-  integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
-  dependencies:
-    os-homedir "^1.0.0"
-    os-tmpdir "^1.0.0"
-
-p-defer@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
-  integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
-
-p-finally@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
-  integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
-
-p-is-promise@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
-  integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
-
-p-limit@^1.0.0, p-limit@^1.1.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
-  integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
-  dependencies:
-    p-try "^1.0.0"
-
-p-limit@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2"
-  integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==
-  dependencies:
-    p-try "^2.0.0"
-
-p-locate@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
-  integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
-  dependencies:
-    p-limit "^1.1.0"
-
-p-locate@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
-  integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
-  dependencies:
-    p-limit "^2.0.0"
-
-p-map@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
-  integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
-
-p-try@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
-  integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
-
-p-try@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
-  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-
-pako@~1.0.5:
-  version "1.0.10"
-  resolved "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
-  integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
-
-parallel-transform@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06"
-  integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=
-  dependencies:
-    cyclist "~0.2.2"
-    inherits "^2.0.3"
-    readable-stream "^2.1.5"
-
-param-case@2.1.x:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
-  integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc=
-  dependencies:
-    no-case "^2.2.0"
-
-parchment@^1.1.4:
-  version "1.1.4"
-  resolved "https://registry.npm.taobao.org/parchment/download/parchment-1.1.4.tgz#aeded7ab938fe921d4c34bc339ce1168bc2ffde5"
-  integrity sha1-rt7Xq5OP6SHUw0vDOc4RaLwv/eU=
-
-parent-module@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.0.tgz#df250bdc5391f4a085fb589dad761f5ad6b865b5"
-  integrity sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==
-  dependencies:
-    callsites "^3.0.0"
-
-parse-asn1@^5.0.0:
-  version "5.1.4"
-  resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc"
-  integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==
-  dependencies:
-    asn1.js "^4.0.0"
-    browserify-aes "^1.0.0"
-    create-hash "^1.1.0"
-    evp_bytestokey "^1.0.0"
-    pbkdf2 "^3.0.3"
-    safe-buffer "^5.1.1"
-
-parse-glob@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
-  integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
-  dependencies:
-    glob-base "^0.3.0"
-    is-dotfile "^1.0.0"
-    is-extglob "^1.0.0"
-    is-glob "^2.0.0"
-
-parse-json@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
-  integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
-  dependencies:
-    error-ex "^1.2.0"
-
-parse-json@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
-  integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
-  dependencies:
-    error-ex "^1.3.1"
-    json-parse-better-errors "^1.0.1"
-
-parse-svg-path@~0.1.1:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb"
-  integrity sha1-en7A0esG+lMlx9PgCbhZoJtdSes=
-
-parse5@4.0.0, parse5@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
-  integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==
-
-parseurl@~1.3.2, parseurl@~1.3.3:
-  version "1.3.3"
-  resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
-  integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
-
-pascalcase@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
-  integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
-
-path-browserify@0.0.0:
-  version "0.0.0"
-  resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
-  integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=
-
-path-dirname@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
-  integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
-
-path-exists@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
-  integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
-  dependencies:
-    pinkie-promise "^2.0.0"
-
-path-exists@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
-  integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
-
-path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-
-path-is-inside@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
-  integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
-
-path-key@^2.0.0, path-key@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
-  integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
-
-path-parse@^1.0.5, path-parse@^1.0.6:
-  version "1.0.6"
-  resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
-  integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
-
-path-to-regexp@0.1.7:
-  version "0.1.7"
-  resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
-  integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
-
-path-type@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
-  integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
-  dependencies:
-    graceful-fs "^4.1.2"
-    pify "^2.0.0"
-    pinkie-promise "^2.0.0"
-
-path-type@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
-  integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
-  dependencies:
-    pify "^2.0.0"
-
-path-type@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
-  integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
-  dependencies:
-    pify "^3.0.0"
-
-pbkdf2@^3.0.3:
-  version "3.0.17"
-  resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
-  integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
-  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"
-
-performance-now@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
-  integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
-
-pify@^2.0.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
-  integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
-
-pify@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
-  integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
-
-pify@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
-  integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
-
-pinkie-promise@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
-  integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
-  dependencies:
-    pinkie "^2.0.0"
-
-pinkie@^2.0.0:
-  version "2.0.4"
-  resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
-  integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
-
-pkg-dir@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
-  integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q=
-  dependencies:
-    find-up "^1.0.0"
-
-pkg-dir@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
-  integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
-  dependencies:
-    find-up "^2.1.0"
-
-pkg-dir@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
-  integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
-  dependencies:
-    find-up "^3.0.0"
-
-pkg-up@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f"
-  integrity sha1-yBmscoBZpGHKscOImivjxJoATX8=
-  dependencies:
-    find-up "^2.1.0"
-
-pluralize@^7.0.0:
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
-  integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
-
-pn@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
-  integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
-
-point-at-length@~1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/point-at-length/-/point-at-length-1.0.2.tgz#9176d8d6d7c8162f12b646f707db9f0ea728125e"
-  integrity sha1-kXbY1tfIFi8Stkb3B9ufDqcoEl4=
-  dependencies:
-    abs-svg-path "~0.1.1"
-    isarray "~0.0.1"
-    parse-svg-path "~0.1.1"
-
-portfinder@^1.0.20:
-  version "1.0.20"
-  resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz#bea68632e54b2e13ab7b0c4775e9b41bf270e44a"
-  integrity sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==
-  dependencies:
-    async "^1.5.2"
-    debug "^2.2.0"
-    mkdirp "0.5.x"
-
-posix-character-classes@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
-  integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
-
-postcss-calc@^7.0.1:
-  version "7.0.1"
-  resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436"
-  integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==
-  dependencies:
-    css-unit-converter "^1.1.1"
-    postcss "^7.0.5"
-    postcss-selector-parser "^5.0.0-rc.4"
-    postcss-value-parser "^3.3.1"
-
-postcss-colormin@^4.0.3:
-  version "4.0.3"
-  resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381"
-  integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==
-  dependencies:
-    browserslist "^4.0.0"
-    color "^3.0.0"
-    has "^1.0.0"
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-
-postcss-convert-values@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f"
-  integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==
-  dependencies:
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-
-postcss-discard-comments@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033"
-  integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==
-  dependencies:
-    postcss "^7.0.0"
-
-postcss-discard-duplicates@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb"
-  integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==
-  dependencies:
-    postcss "^7.0.0"
-
-postcss-discard-empty@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765"
-  integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==
-  dependencies:
-    postcss "^7.0.0"
-
-postcss-discard-overridden@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57"
-  integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==
-  dependencies:
-    postcss "^7.0.0"
-
-postcss-load-config@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484"
-  integrity sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==
-  dependencies:
-    cosmiconfig "^4.0.0"
-    import-cwd "^2.0.0"
-
-postcss-loader@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d"
-  integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==
-  dependencies:
-    loader-utils "^1.1.0"
-    postcss "^7.0.0"
-    postcss-load-config "^2.0.0"
-    schema-utils "^1.0.0"
-
-postcss-merge-longhand@^4.0.11:
-  version "4.0.11"
-  resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24"
-  integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==
-  dependencies:
-    css-color-names "0.0.4"
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-    stylehacks "^4.0.0"
-
-postcss-merge-rules@^4.0.3:
-  version "4.0.3"
-  resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650"
-  integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==
-  dependencies:
-    browserslist "^4.0.0"
-    caniuse-api "^3.0.0"
-    cssnano-util-same-parent "^4.0.0"
-    postcss "^7.0.0"
-    postcss-selector-parser "^3.0.0"
-    vendors "^1.0.0"
-
-postcss-minify-font-values@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6"
-  integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==
-  dependencies:
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-
-postcss-minify-gradients@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471"
-  integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==
-  dependencies:
-    cssnano-util-get-arguments "^4.0.0"
-    is-color-stop "^1.0.0"
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-
-postcss-minify-params@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874"
-  integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==
-  dependencies:
-    alphanum-sort "^1.0.0"
-    browserslist "^4.0.0"
-    cssnano-util-get-arguments "^4.0.0"
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-    uniqs "^2.0.0"
-
-postcss-minify-selectors@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8"
-  integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==
-  dependencies:
-    alphanum-sort "^1.0.0"
-    has "^1.0.0"
-    postcss "^7.0.0"
-    postcss-selector-parser "^3.0.0"
-
-postcss-modules-extract-imports@^1.2.0:
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a"
-  integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==
-  dependencies:
-    postcss "^6.0.1"
-
-postcss-modules-local-by-default@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
-  integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=
-  dependencies:
-    css-selector-tokenizer "^0.7.0"
-    postcss "^6.0.1"
-
-postcss-modules-scope@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
-  integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A=
-  dependencies:
-    css-selector-tokenizer "^0.7.0"
-    postcss "^6.0.1"
-
-postcss-modules-values@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
-  integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=
-  dependencies:
-    icss-replace-symbols "^1.1.0"
-    postcss "^6.0.1"
-
-postcss-normalize-charset@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4"
-  integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==
-  dependencies:
-    postcss "^7.0.0"
-
-postcss-normalize-display-values@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a"
-  integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==
-  dependencies:
-    cssnano-util-get-match "^4.0.0"
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-
-postcss-normalize-positions@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f"
-  integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==
-  dependencies:
-    cssnano-util-get-arguments "^4.0.0"
-    has "^1.0.0"
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-
-postcss-normalize-repeat-style@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c"
-  integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==
-  dependencies:
-    cssnano-util-get-arguments "^4.0.0"
-    cssnano-util-get-match "^4.0.0"
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-
-postcss-normalize-string@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c"
-  integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==
-  dependencies:
-    has "^1.0.0"
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-
-postcss-normalize-timing-functions@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9"
-  integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==
-  dependencies:
-    cssnano-util-get-match "^4.0.0"
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-
-postcss-normalize-unicode@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb"
-  integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==
-  dependencies:
-    browserslist "^4.0.0"
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-
-postcss-normalize-url@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1"
-  integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==
-  dependencies:
-    is-absolute-url "^2.0.0"
-    normalize-url "^3.0.0"
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-
-postcss-normalize-whitespace@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82"
-  integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==
-  dependencies:
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-
-postcss-ordered-values@^4.1.2:
-  version "4.1.2"
-  resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee"
-  integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==
-  dependencies:
-    cssnano-util-get-arguments "^4.0.0"
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-
-postcss-reduce-initial@^4.0.3:
-  version "4.0.3"
-  resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df"
-  integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==
-  dependencies:
-    browserslist "^4.0.0"
-    caniuse-api "^3.0.0"
-    has "^1.0.0"
-    postcss "^7.0.0"
-
-postcss-reduce-transforms@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29"
-  integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==
-  dependencies:
-    cssnano-util-get-match "^4.0.0"
-    has "^1.0.0"
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-
-postcss-selector-parser@^3.0.0:
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865"
-  integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=
-  dependencies:
-    dot-prop "^4.1.1"
-    indexes-of "^1.0.1"
-    uniq "^1.0.1"
-
-postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.4:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c"
-  integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==
-  dependencies:
-    cssesc "^2.0.0"
-    indexes-of "^1.0.1"
-    uniq "^1.0.1"
-
-postcss-svgo@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258"
-  integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==
-  dependencies:
-    is-svg "^3.0.0"
-    postcss "^7.0.0"
-    postcss-value-parser "^3.0.0"
-    svgo "^1.0.0"
-
-postcss-unique-selectors@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac"
-  integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==
-  dependencies:
-    alphanum-sort "^1.0.0"
-    postcss "^7.0.0"
-    uniqs "^2.0.0"
-
-postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1:
-  version "3.3.1"
-  resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
-  integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
-
-postcss@^6.0.1, postcss@^6.0.23:
-  version "6.0.23"
-  resolved "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
-  integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
-  dependencies:
-    chalk "^2.4.1"
-    source-map "^0.6.1"
-    supports-color "^5.4.0"
-
-postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.5:
-  version "7.0.16"
-  resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz#48f64f1b4b558cb8b52c88987724359acb010da2"
-  integrity sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==
-  dependencies:
-    chalk "^2.4.2"
-    source-map "^0.6.1"
-    supports-color "^6.1.0"
-
-prelude-ls@~1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
-  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
-
-prepend-http@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
-  integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
-
-preserve@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
-  integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
-
-prettier@1.16.3:
-  version "1.16.3"
-  resolved "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz#8c62168453badef702f34b45b6ee899574a6a65d"
-  integrity sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==
-
-pretty-error@^2.0.2:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
-  integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=
-  dependencies:
-    renderkid "^2.0.1"
-    utila "~0.4"
-
-pretty-format@^23.6.0:
-  version "23.6.0"
-  resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760"
-  integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==
-  dependencies:
-    ansi-regex "^3.0.0"
-    ansi-styles "^3.2.0"
-
-pretty@2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz#adbc7960b7bbfe289a557dc5f737619a220d06a5"
-  integrity sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=
-  dependencies:
-    condense-newlines "^0.2.1"
-    extend-shallow "^2.0.1"
-    js-beautify "^1.6.12"
-
-private@^0.1.6, private@^0.1.8:
-  version "0.1.8"
-  resolved "https://registry.npmjs.org/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
-  integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
-
-process-nextick-args@~2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
-  integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
-
-process@^0.11.10:
-  version "0.11.10"
-  resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
-  integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
-
-progress@^2.0.0:
-  version "2.0.3"
-  resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
-  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
-
-promise-inflight@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
-  integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
-
-promise@^7.1.1:
-  version "7.3.1"
-  resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
-  integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
-  dependencies:
-    asap "~2.0.3"
-
-prompts@^0.1.9:
-  version "0.1.14"
-  resolved "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2"
-  integrity sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==
-  dependencies:
-    kleur "^2.0.1"
-    sisteransi "^0.1.1"
-
-proto-list@~1.2.1:
-  version "1.2.4"
-  resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
-  integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
-
-proxy-addr@~2.0.5:
-  version "2.0.5"
-  resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34"
-  integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==
-  dependencies:
-    forwarded "~0.1.2"
-    ipaddr.js "1.9.0"
-
-prr@~1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
-  integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
-
-pseudomap@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
-  integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
-
-psl@^1.1.24, psl@^1.1.28:
-  version "1.1.31"
-  resolved "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184"
-  integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==
-
-public-encrypt@^4.0.0:
-  version "4.0.3"
-  resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
-  integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
-  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"
-
-pump@^2.0.0, pump@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
-  integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
-  dependencies:
-    end-of-stream "^1.1.0"
-    once "^1.3.1"
-
-pump@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
-  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
-  dependencies:
-    end-of-stream "^1.1.0"
-    once "^1.3.1"
-
-pumpify@^1.3.3:
-  version "1.5.1"
-  resolved "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
-  integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
-  dependencies:
-    duplexify "^3.6.0"
-    inherits "^2.0.3"
-    pump "^2.0.0"
-
-punycode@1.3.2:
-  version "1.3.2"
-  resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
-  integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
-
-punycode@^1.2.4, punycode@^1.4.1:
-  version "1.4.1"
-  resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
-  integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
-
-punycode@^2.1.0, punycode@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
-  integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
-
-q@^1.1.2:
-  version "1.5.1"
-  resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
-  integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
-
-qs@6.7.0:
-  version "6.7.0"
-  resolved "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
-  integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
-
-qs@~6.5.2:
-  version "6.5.2"
-  resolved "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
-  integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
-
-query-string@^5.0.1:
-  version "5.1.1"
-  resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"
-  integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==
-  dependencies:
-    decode-uri-component "^0.2.0"
-    object-assign "^4.1.0"
-    strict-uri-encode "^1.0.0"
-
-querystring-es3@^0.2.0:
-  version "0.2.1"
-  resolved "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
-  integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
-
-querystring@0.2.0:
-  version "0.2.0"
-  resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
-  integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
-
-querystringify@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
-  integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
-
-quill-delta@^3.6.2:
-  version "3.6.3"
-  resolved "https://registry.npm.taobao.org/quill-delta/download/quill-delta-3.6.3.tgz#b19fd2b89412301c60e1ff213d8d860eac0f1032"
-  integrity sha1-sZ/SuJQSMBxg4f8hPY2GDqwPEDI=
-  dependencies:
-    deep-equal "^1.0.1"
-    extend "^3.0.2"
-    fast-diff "1.1.2"
-
-quill@^1.3.4:
-  version "1.3.6"
-  resolved "https://registry.npm.taobao.org/quill/download/quill-1.3.6.tgz#99f4de1fee85925a0d7d4163b6d8328f23317a4d"
-  integrity sha1-mfTeH+6FkloNfUFjttgyjyMxek0=
-  dependencies:
-    clone "^2.1.1"
-    deep-equal "^1.0.1"
-    eventemitter3 "^2.0.3"
-    extend "^3.0.1"
-    parchment "^1.1.4"
-    quill-delta "^3.6.2"
-
-raf@^3.4.0:
-  version "3.4.1"
-  resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
-  integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
-  dependencies:
-    performance-now "^2.1.0"
-
-randomatic@^3.0.0:
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed"
-  integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==
-  dependencies:
-    is-number "^4.0.0"
-    kind-of "^6.0.0"
-    math-random "^1.0.1"
-
-randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
-  integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
-  dependencies:
-    safe-buffer "^5.1.0"
-
-randomfill@^1.0.3:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
-  integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
-  dependencies:
-    randombytes "^2.0.5"
-    safe-buffer "^5.1.0"
-
-range-parser@^1.2.1, range-parser@~1.2.1:
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
-  integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
-
-raw-body@2.4.0:
-  version "2.4.0"
-  resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
-  integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
-  dependencies:
-    bytes "3.1.0"
-    http-errors "1.7.2"
-    iconv-lite "0.4.24"
-    unpipe "1.0.0"
-
-rc@^1.2.7:
-  version "1.2.8"
-  resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
-  integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
-  dependencies:
-    deep-extend "^0.6.0"
-    ini "~1.3.0"
-    minimist "^1.2.0"
-    strip-json-comments "~2.0.1"
-
-read-pkg-up@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
-  integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
-  dependencies:
-    find-up "^1.0.0"
-    read-pkg "^1.0.0"
-
-read-pkg-up@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
-  integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
-  dependencies:
-    find-up "^2.0.0"
-    read-pkg "^2.0.0"
-
-read-pkg@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
-  integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
-  dependencies:
-    load-json-file "^1.0.0"
-    normalize-package-data "^2.3.2"
-    path-type "^1.0.0"
-
-read-pkg@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
-  integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
-  dependencies:
-    load-json-file "^2.0.0"
-    normalize-package-data "^2.3.2"
-    path-type "^2.0.0"
-
-read-pkg@^5.0.0:
-  version "5.1.1"
-  resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.1.1.tgz#5cf234dde7a405c90c88a519ab73c467e9cb83f5"
-  integrity sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==
-  dependencies:
-    "@types/normalize-package-data" "^2.4.0"
-    normalize-package-data "^2.5.0"
-    parse-json "^4.0.0"
-    type-fest "^0.4.1"
-
-"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
-  version "2.3.6"
-  resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
-  integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
-  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"
-
-readable-stream@^3.0.6, readable-stream@^3.1.1:
-  version "3.3.0"
-  resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz#cb8011aad002eb717bf040291feba8569c986fb9"
-  integrity sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==
-  dependencies:
-    inherits "^2.0.3"
-    string_decoder "^1.1.1"
-    util-deprecate "^1.0.1"
-
-readdirp@^2.2.1:
-  version "2.2.1"
-  resolved "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
-  integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
-  dependencies:
-    graceful-fs "^4.1.11"
-    micromatch "^3.1.10"
-    readable-stream "^2.0.2"
-
-realpath-native@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c"
-  integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==
-  dependencies:
-    util.promisify "^1.0.0"
-
-regenerate-unicode-properties@^8.0.2:
-  version "8.1.0"
-  resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e"
-  integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==
-  dependencies:
-    regenerate "^1.4.0"
-
-regenerate@^1.2.1, regenerate@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
-  integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
-
-regenerator-runtime@^0.10.0:
-  version "0.10.5"
-  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
-  integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=
-
-regenerator-runtime@^0.11.0:
-  version "0.11.1"
-  resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
-  integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
-
-regenerator-runtime@^0.12.0:
-  version "0.12.1"
-  resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
-  integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==
-
-regenerator-runtime@^0.13.2:
-  version "0.13.2"
-  resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447"
-  integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==
-
-regenerator-transform@^0.14.0:
-  version "0.14.0"
-  resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz#2ca9aaf7a2c239dd32e4761218425b8c7a86ecaf"
-  integrity sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==
-  dependencies:
-    private "^0.1.6"
-
-regex-cache@^0.4.2:
-  version "0.4.4"
-  resolved "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
-  integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
-  dependencies:
-    is-equal-shallow "^0.1.3"
-
-regex-not@^1.0.0, regex-not@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
-  integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
-  dependencies:
-    extend-shallow "^3.0.2"
-    safe-regex "^1.1.0"
-
-regexp-tree@^0.1.6:
-  version "0.1.10"
-  resolved "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.10.tgz#d837816a039c7af8a8d64d7a7c3cf6a1d93450bc"
-  integrity sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==
-
-regexpp@^1.0.1:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab"
-  integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==
-
-regexpp@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
-  integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
-
-regexpu-core@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
-  integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=
-  dependencies:
-    regenerate "^1.2.1"
-    regjsgen "^0.2.0"
-    regjsparser "^0.1.4"
-
-regexpu-core@^4.5.4:
-  version "4.5.4"
-  resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae"
-  integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==
-  dependencies:
-    regenerate "^1.4.0"
-    regenerate-unicode-properties "^8.0.2"
-    regjsgen "^0.5.0"
-    regjsparser "^0.6.0"
-    unicode-match-property-ecmascript "^1.0.4"
-    unicode-match-property-value-ecmascript "^1.1.0"
-
-regjsgen@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
-  integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=
-
-regjsgen@^0.5.0:
-  version "0.5.0"
-  resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd"
-  integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==
-
-regjsparser@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
-  integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=
-  dependencies:
-    jsesc "~0.5.0"
-
-regjsparser@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c"
-  integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==
-  dependencies:
-    jsesc "~0.5.0"
-
-regression@~2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/regression/-/regression-2.0.1.tgz#8d29c3e8224a10850c35e337e85a8b2fac3b0c87"
-  integrity sha1-jSnD6CJKEIUMNeM36FqLL6w7DIc=
-
-relateurl@0.2.x:
-  version "0.2.7"
-  resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
-  integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
-
-remove-trailing-separator@^1.0.1:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
-  integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
-
-renderkid@^2.0.1:
-  version "2.0.3"
-  resolved "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149"
-  integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==
-  dependencies:
-    css-select "^1.1.0"
-    dom-converter "^0.2"
-    htmlparser2 "^3.3.0"
-    strip-ansi "^3.0.0"
-    utila "^0.4.0"
-
-repeat-element@^1.1.2:
-  version "1.1.3"
-  resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
-  integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
-
-repeat-string@^1.5.2, repeat-string@^1.6.1:
-  version "1.6.1"
-  resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
-  integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
-
-repeating@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
-  integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
-  dependencies:
-    is-finite "^1.0.0"
-
-request-promise-core@1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346"
-  integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==
-  dependencies:
-    lodash "^4.17.11"
-
-request-promise-native@^1.0.5, request-promise-native@^1.0.7:
-  version "1.0.7"
-  resolved "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59"
-  integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==
-  dependencies:
-    request-promise-core "1.1.2"
-    stealthy-require "^1.1.1"
-    tough-cookie "^2.3.3"
-
-request@^2.83.0, request@^2.87.0:
-  version "2.88.0"
-  resolved "https://registry.npmjs.org/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
-  integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
-  dependencies:
-    aws-sign2 "~0.7.0"
-    aws4 "^1.8.0"
-    caseless "~0.12.0"
-    combined-stream "~1.0.6"
-    extend "~3.0.2"
-    forever-agent "~0.6.1"
-    form-data "~2.3.2"
-    har-validator "~5.1.0"
-    http-signature "~1.2.0"
-    is-typedarray "~1.0.0"
-    isstream "~0.1.2"
-    json-stringify-safe "~5.0.1"
-    mime-types "~2.1.19"
-    oauth-sign "~0.9.0"
-    performance-now "^2.1.0"
-    qs "~6.5.2"
-    safe-buffer "^5.1.2"
-    tough-cookie "~2.4.3"
-    tunnel-agent "^0.6.0"
-    uuid "^3.3.2"
-
-require-directory@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
-  integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
-
-require-from-string@^2.0.1:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
-  integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
-
-require-main-filename@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
-  integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
-
-require-main-filename@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
-  integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
-
-require-uncached@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
-  integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
-  dependencies:
-    caller-path "^0.1.0"
-    resolve-from "^1.0.0"
-
-requires-port@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
-  integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
-
-reselect@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147"
-  integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=
-
-resize-observer-polyfill@^1.5.1:
-  version "1.5.1"
-  resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
-  integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
-
-resolve-cwd@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
-  integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
-  dependencies:
-    resolve-from "^3.0.0"
-
-resolve-from@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
-  integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
-
-resolve-from@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
-  integrity sha1-six699nWiBvItuZTM17rywoYh0g=
-
-resolve-from@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
-  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
-
-resolve-url@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
-  integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
-
-resolve@1.1.7:
-  version "1.1.7"
-  resolved "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
-  integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
-
-resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1:
-  version "1.11.0"
-  resolved "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz#4014870ba296176b86343d50b60f3b50609ce232"
-  integrity sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==
-  dependencies:
-    path-parse "^1.0.6"
-
-resolve@^1.5.0, resolve@^1.9.0, resolve@~1.10.0:
-  version "1.10.0"
-  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba"
-  integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==
-  dependencies:
-    path-parse "^1.0.6"
-
-restore-cursor@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
-  integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
-  dependencies:
-    onetime "^2.0.0"
-    signal-exit "^3.0.2"
-
-resumer@~0.0.0:
-  version "0.0.0"
-  resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759"
-  integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=
-  dependencies:
-    through "~2.3.4"
-
-ret@~0.1.10:
-  version "0.1.15"
-  resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
-  integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
-
-rgb-regex@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1"
-  integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE=
-
-rgba-regex@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3"
-  integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=
-
-right-align@^0.1.1:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
-  integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
-  dependencies:
-    align-text "^0.1.1"
-
-rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2:
-  version "2.6.3"
-  resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
-  integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
-  dependencies:
-    glob "^7.1.3"
-
-ripemd160@^2.0.0, ripemd160@^2.0.1:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
-  integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
-  dependencies:
-    hash-base "^3.0.0"
-    inherits "^2.0.1"
-
-rollup@^0.25.8:
-  version "0.25.8"
-  resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.25.8.tgz#bf6ce83b87510d163446eeaa577ed6a6fc5835e0"
-  integrity sha1-v2zoO4dRDRY0Ru6qV37WpvxYNeA=
-  dependencies:
-    chalk "^1.1.1"
-    minimist "^1.2.0"
-    source-map-support "^0.3.2"
-
-rsvp@^3.3.3:
-  version "3.6.2"
-  resolved "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a"
-  integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==
-
-run-async@^2.2.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
-  integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
-  dependencies:
-    is-promise "^2.1.0"
-
-run-queue@^1.0.0, run-queue@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
-  integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
-  dependencies:
-    aproba "^1.1.1"
-
-rw@1, rw@^1.3.2:
-  version "1.3.3"
-  resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
-  integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=
-
-rx-lite-aggregates@^4.0.8:
-  version "4.0.8"
-  resolved "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
-  integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=
-  dependencies:
-    rx-lite "*"
-
-rx-lite@*, rx-lite@^4.0.8:
-  version "4.0.8"
-  resolved "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
-  integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
-
-rx@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782"
-  integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=
-
-rxjs@^6.4.0:
-  version "6.4.0"
-  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504"
-  integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==
-  dependencies:
-    tslib "^1.9.0"
-
-safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
-  version "5.1.2"
-  resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
-  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-regex@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
-  integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
-  dependencies:
-    ret "~0.1.10"
-
-"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
-  version "2.1.2"
-  resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
-  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-sane@^2.0.0:
-  version "2.5.2"
-  resolved "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa"
-  integrity sha1-tNwYYcIbQn6SlQej51HiosuKs/o=
-  dependencies:
-    anymatch "^2.0.0"
-    capture-exit "^1.2.0"
-    exec-sh "^0.2.0"
-    fb-watchman "^2.0.0"
-    micromatch "^3.1.4"
-    minimist "^1.1.1"
-    walker "~1.0.5"
-    watch "~0.18.0"
-  optionalDependencies:
-    fsevents "^1.2.3"
-
-sax@^1.2.4, sax@~1.2.4:
-  version "1.2.4"
-  resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
-  integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-
-schema-utils@^0.4.4:
-  version "0.4.7"
-  resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
-  integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==
-  dependencies:
-    ajv "^6.1.0"
-    ajv-keywords "^3.1.0"
-
-schema-utils@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
-  integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
-  dependencies:
-    ajv "^6.1.0"
-    ajv-errors "^1.0.0"
-    ajv-keywords "^3.1.0"
-
-select-hose@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
-  integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
-
-select@^1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
-  integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
-
-selfsigned@^1.10.4:
-  version "1.10.4"
-  resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd"
-  integrity sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==
-  dependencies:
-    node-forge "0.7.5"
-
-"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
-  version "5.7.0"
-  resolved "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
-  integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
-
-semver@^6.0.0:
-  version "6.1.0"
-  resolved "https://registry.npmjs.org/semver/-/semver-6.1.0.tgz#e95dc415d45ecf03f2f9f83b264a6b11f49c0cca"
-  integrity sha512-kCqEOOHoBcFs/2Ccuk4Xarm/KiWRSLEX9CAZF8xkJ6ZPlIoTZ8V5f7J16vYLJqDbR7KrxTJpR2lqjIEm2Qx9cQ==
-
-send@0.17.1:
-  version "0.17.1"
-  resolved "https://registry.npmjs.org/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
-  integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
-  dependencies:
-    debug "2.6.9"
-    depd "~1.1.2"
-    destroy "~1.0.4"
-    encodeurl "~1.0.2"
-    escape-html "~1.0.3"
-    etag "~1.8.1"
-    fresh "0.5.2"
-    http-errors "~1.7.2"
-    mime "1.6.0"
-    ms "2.1.1"
-    on-finished "~2.3.0"
-    range-parser "~1.2.1"
-    statuses "~1.5.0"
-
-serialize-javascript@^1.4.0, serialize-javascript@^1.7.0:
-  version "1.7.0"
-  resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65"
-  integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==
-
-serve-index@^1.9.1:
-  version "1.9.1"
-  resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
-  integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=
-  dependencies:
-    accepts "~1.3.4"
-    batch "0.6.1"
-    debug "2.6.9"
-    escape-html "~1.0.3"
-    http-errors "~1.6.2"
-    mime-types "~2.1.17"
-    parseurl "~1.3.2"
-
-serve-static@1.14.1:
-  version "1.14.1"
-  resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
-  integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
-  dependencies:
-    encodeurl "~1.0.2"
-    escape-html "~1.0.3"
-    parseurl "~1.3.3"
-    send "0.17.1"
-
-set-blocking@^2.0.0, set-blocking@~2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
-  integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
-
-set-value@^0.4.3:
-  version "0.4.3"
-  resolved "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
-  integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-extendable "^0.1.1"
-    is-plain-object "^2.0.1"
-    to-object-path "^0.3.0"
-
-set-value@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
-  integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-extendable "^0.1.1"
-    is-plain-object "^2.0.3"
-    split-string "^3.0.1"
-
-setimmediate@^1.0.4:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
-  integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
-
-setprototypeof@1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
-  integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
-
-setprototypeof@1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
-  integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
-
-sha.js@^2.4.0, sha.js@^2.4.8:
-  version "2.4.11"
-  resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
-  integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
-  dependencies:
-    inherits "^2.0.1"
-    safe-buffer "^5.0.1"
-
-shallow-equal@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.1.0.tgz#cc022f030dcba0d1c198abf658a3c6c744e171ca"
-  integrity sha512-0SW1nWo1hnabO62SEeHsl8nmTVVEzguVWZCj5gaQrgWAxz/BaCja4OWdJBWLVPDxdtE/WU7c98uUCCXyPHSCvw==
-
-shallowequal@^1.0.2:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
-  integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
-
-shebang-command@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
-  integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
-  dependencies:
-    shebang-regex "^1.0.0"
-
-shebang-regex@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
-  integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
-
-shell-quote@^1.6.1:
-  version "1.6.1"
-  resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
-  integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=
-  dependencies:
-    array-filter "~0.0.0"
-    array-map "~0.0.0"
-    array-reduce "~0.0.0"
-    jsonify "~0.0.0"
-
-shellwords@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
-  integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
-
-sigmund@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
-  integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=
-
-signal-exit@^3.0.0, signal-exit@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
-  integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
-
-simple-statistics@~6.1.0:
-  version "6.1.1"
-  resolved "https://registry.yarnpkg.com/simple-statistics/-/simple-statistics-6.1.1.tgz#e3a0799ffc49914d6f421c5a4ac585f6a13e2bad"
-  integrity sha512-zGwn0DDRa9Zel4H4n2pjTFIyGoAGpnpjrGIctreCxj5XWrcx9v7Xy7270FkC967WMmcvuc8ZU7m0ZG+hGN7gAA==
-
-simple-swizzle@^0.2.2:
-  version "0.2.2"
-  resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
-  integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=
-  dependencies:
-    is-arrayish "^0.3.1"
-
-sisteransi@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce"
-  integrity sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==
-
-slash@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
-  integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
-
-slash@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
-  integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
-
-slice-ansi@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
-  integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==
-  dependencies:
-    is-fullwidth-code-point "^2.0.0"
-
-slice-ansi@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
-  integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
-  dependencies:
-    ansi-styles "^3.2.0"
-    astral-regex "^1.0.0"
-    is-fullwidth-code-point "^2.0.0"
-
-snapdragon-node@^2.0.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
-  integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
-  dependencies:
-    define-property "^1.0.0"
-    isobject "^3.0.0"
-    snapdragon-util "^3.0.1"
-
-snapdragon-util@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
-  integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
-  dependencies:
-    kind-of "^3.2.0"
-
-snapdragon@^0.8.1:
-  version "0.8.2"
-  resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
-  integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
-  dependencies:
-    base "^0.11.1"
-    debug "^2.2.0"
-    define-property "^0.2.5"
-    extend-shallow "^2.0.1"
-    map-cache "^0.2.2"
-    source-map "^0.5.6"
-    source-map-resolve "^0.5.0"
-    use "^3.1.0"
-
-sockjs-client@1.3.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz#12fc9d6cb663da5739d3dc5fb6e8687da95cb177"
-  integrity sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==
-  dependencies:
-    debug "^3.2.5"
-    eventsource "^1.0.7"
-    faye-websocket "~0.11.1"
-    inherits "^2.0.3"
-    json3 "^3.3.2"
-    url-parse "^1.4.3"
-
-sockjs@0.3.19:
-  version "0.3.19"
-  resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d"
-  integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==
-  dependencies:
-    faye-websocket "^0.10.0"
-    uuid "^3.0.1"
-
-sort-keys@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128"
-  integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=
-  dependencies:
-    is-plain-obj "^1.0.0"
-
-source-list-map@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
-  integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
-
-source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
-  version "0.5.2"
-  resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
-  integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
-  dependencies:
-    atob "^2.1.1"
-    decode-uri-component "^0.2.0"
-    resolve-url "^0.2.1"
-    source-map-url "^0.4.0"
-    urix "^0.1.0"
-
-source-map-support@^0.3.2:
-  version "0.3.3"
-  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.3.3.tgz#34900977d5ba3f07c7757ee72e73bb1a9b53754f"
-  integrity sha1-NJAJd9W6PwfHdX7nLnO7GptTdU8=
-  dependencies:
-    source-map "0.1.32"
-
-source-map-support@^0.4.15:
-  version "0.4.18"
-  resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
-  integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==
-  dependencies:
-    source-map "^0.5.6"
-
-source-map-support@^0.5.6, source-map-support@~0.5.10:
-  version "0.5.12"
-  resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599"
-  integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==
-  dependencies:
-    buffer-from "^1.0.0"
-    source-map "^0.6.0"
-
-source-map-url@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
-  integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
-
-source-map@0.1.32:
-  version "0.1.32"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266"
-  integrity sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=
-  dependencies:
-    amdefine ">=0.0.4"
-
-source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
-  version "0.5.7"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
-  integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-
-source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
-  version "0.6.1"
-  resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
-  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-spdx-correct@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
-  integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
-  dependencies:
-    spdx-expression-parse "^3.0.0"
-    spdx-license-ids "^3.0.0"
-
-spdx-exceptions@^2.1.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
-  integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
-
-spdx-expression-parse@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
-  integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
-  dependencies:
-    spdx-exceptions "^2.1.0"
-    spdx-license-ids "^3.0.0"
-
-spdx-license-ids@^3.0.0:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1"
-  integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==
-
-spdy-transport@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
-  integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
-  dependencies:
-    debug "^4.1.0"
-    detect-node "^2.0.4"
-    hpack.js "^2.1.6"
-    obuf "^1.1.2"
-    readable-stream "^3.0.6"
-    wbuf "^1.7.3"
-
-spdy@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz#81f222b5a743a329aa12cea6a390e60e9b613c52"
-  integrity sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==
-  dependencies:
-    debug "^4.1.0"
-    handle-thing "^2.0.0"
-    http-deceiver "^1.2.7"
-    select-hose "^2.0.0"
-    spdy-transport "^3.0.0"
-
-split-string@^3.0.1, split-string@^3.0.2:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
-  integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
-  dependencies:
-    extend-shallow "^3.0.0"
-
-sprintf-js@~1.0.2:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-  integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
-
-sshpk@^1.7.0:
-  version "1.16.1"
-  resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
-  integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
-  dependencies:
-    asn1 "~0.2.3"
-    assert-plus "^1.0.0"
-    bcrypt-pbkdf "^1.0.0"
-    dashdash "^1.12.0"
-    ecc-jsbn "~0.1.1"
-    getpass "^0.1.1"
-    jsbn "~0.1.0"
-    safer-buffer "^2.0.2"
-    tweetnacl "~0.14.0"
-
-ssri@^5.2.4:
-  version "5.3.0"
-  resolved "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06"
-  integrity sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==
-  dependencies:
-    safe-buffer "^5.1.1"
-
-ssri@^6.0.1:
-  version "6.0.1"
-  resolved "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
-  integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
-  dependencies:
-    figgy-pudding "^3.5.1"
-
-stable@^0.1.8:
-  version "0.1.8"
-  resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
-  integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
-
-stack-utils@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
-  integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==
-
-stackframe@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b"
-  integrity sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==
-
-static-extend@^0.1.1:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
-  integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
-  dependencies:
-    define-property "^0.2.5"
-    object-copy "^0.1.0"
-
-"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0:
-  version "1.5.0"
-  resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
-  integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
-
-stealthy-require@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
-  integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
-
-stream-browserify@^2.0.1:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
-  integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
-  dependencies:
-    inherits "~2.0.1"
-    readable-stream "^2.0.2"
-
-stream-each@^1.1.0:
-  version "1.2.3"
-  resolved "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
-  integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
-  dependencies:
-    end-of-stream "^1.1.0"
-    stream-shift "^1.0.0"
-
-stream-http@^2.7.2:
-  version "2.8.3"
-  resolved "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
-  integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
-  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"
-
-stream-shift@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
-  integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=
-
-strict-uri-encode@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
-  integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
-
-string-convert@^0.2.0:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97"
-  integrity sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c=
-
-string-length@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"
-  integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=
-  dependencies:
-    astral-regex "^1.0.0"
-    strip-ansi "^4.0.0"
-
-string-width@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
-  integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
-  dependencies:
-    code-point-at "^1.0.0"
-    is-fullwidth-code-point "^1.0.0"
-    strip-ansi "^3.0.0"
-
-"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
-  integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
-  dependencies:
-    is-fullwidth-code-point "^2.0.0"
-    strip-ansi "^4.0.0"
-
-string-width@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.0.0.tgz#5a1690a57cc78211fffd9bf24bbe24d090604eb1"
-  integrity sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==
-  dependencies:
-    emoji-regex "^7.0.1"
-    is-fullwidth-code-point "^2.0.0"
-    strip-ansi "^5.0.0"
-
-string-width@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
-  integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
-  dependencies:
-    emoji-regex "^7.0.1"
-    is-fullwidth-code-point "^2.0.0"
-    strip-ansi "^5.1.0"
-
-string.prototype.padend@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0"
-  integrity sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=
-  dependencies:
-    define-properties "^1.1.2"
-    es-abstract "^1.4.3"
-    function-bind "^1.0.2"
-
-string.prototype.padstart@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz#5bcfad39f4649bb2d031292e19bcf0b510d4b242"
-  integrity sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI=
-  dependencies:
-    define-properties "^1.1.2"
-    es-abstract "^1.4.3"
-    function-bind "^1.0.2"
-
-string.prototype.trim@~1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea"
-  integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=
-  dependencies:
-    define-properties "^1.1.2"
-    es-abstract "^1.5.0"
-    function-bind "^1.0.2"
-
-string_decoder@^1.0.0, string_decoder@^1.1.1:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"
-  integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==
-  dependencies:
-    safe-buffer "~5.1.0"
-
-string_decoder@~1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
-  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
-  dependencies:
-    safe-buffer "~5.1.0"
-
-strip-ansi@^3.0.0, strip-ansi@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
-  integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
-  dependencies:
-    ansi-regex "^2.0.0"
-
-strip-ansi@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
-  integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
-  dependencies:
-    ansi-regex "^3.0.0"
-
-strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
-  version "5.2.0"
-  resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
-  integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
-  dependencies:
-    ansi-regex "^4.1.0"
-
-strip-bom@3.0.0, strip-bom@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
-  integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
-
-strip-bom@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
-  integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
-  dependencies:
-    is-utf8 "^0.2.0"
-
-strip-eof@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
-  integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
-
-strip-indent@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
-  integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=
-
-strip-json-comments@^2.0.0, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
-  integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
-
-style-loader@^0.23.1:
-  version "0.23.1"
-  resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925"
-  integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==
-  dependencies:
-    loader-utils "^1.1.0"
-    schema-utils "^1.0.0"
-
-stylehacks@^4.0.0:
-  version "4.0.3"
-  resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
-  integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==
-  dependencies:
-    browserslist "^4.0.0"
-    postcss "^7.0.0"
-    postcss-selector-parser "^3.0.0"
-
-supports-color@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
-  integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
-
-supports-color@^3.1.2:
-  version "3.2.3"
-  resolved "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
-  integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
-  dependencies:
-    has-flag "^1.0.0"
-
-supports-color@^5.3.0, supports-color@^5.4.0:
-  version "5.5.0"
-  resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
-  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
-  dependencies:
-    has-flag "^3.0.0"
-
-supports-color@^6.1.0:
-  version "6.1.0"
-  resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
-  integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
-  dependencies:
-    has-flag "^3.0.0"
-
-svg-tags@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
-  integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=
-
-svgo@^1.0.0:
-  version "1.2.2"
-  resolved "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz#0253d34eccf2aed4ad4f283e11ee75198f9d7316"
-  integrity sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==
-  dependencies:
-    chalk "^2.4.1"
-    coa "^2.0.2"
-    css-select "^2.0.0"
-    css-select-base-adapter "^0.1.1"
-    css-tree "1.0.0-alpha.28"
-    css-url-regex "^1.1.0"
-    csso "^3.5.1"
-    js-yaml "^3.13.1"
-    mkdirp "~0.5.1"
-    object.values "^1.1.0"
-    sax "~1.2.4"
-    stable "^0.1.8"
-    unquote "~1.1.1"
-    util.promisify "~1.0.0"
-
-symbol-tree@^3.2.2:
-  version "3.2.2"
-  resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
-  integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=
-
-table@4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
-  integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==
-  dependencies:
-    ajv "^5.2.3"
-    ajv-keywords "^2.1.0"
-    chalk "^2.1.0"
-    lodash "^4.17.4"
-    slice-ansi "1.0.0"
-    string-width "^2.1.1"
-
-table@^5.2.3:
-  version "5.2.3"
-  resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2"
-  integrity sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==
-  dependencies:
-    ajv "^6.9.1"
-    lodash "^4.17.11"
-    slice-ansi "^2.1.0"
-    string-width "^3.0.0"
-
-tapable@^1.0.0, tapable@^1.1.0:
-  version "1.1.3"
-  resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
-  integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
-
-tape@^4.5.1:
-  version "4.10.1"
-  resolved "https://registry.yarnpkg.com/tape/-/tape-4.10.1.tgz#f73be60888dcb120f08b57f947af65a829506a5f"
-  integrity sha512-G0DywYV1jQeY3axeYnXUOt6ktnxS9OPJh97FGR3nrua8lhWi1zPflLxcAHavZ7Jf3qUfY7cxcVIVFa4mY2IY1w==
-  dependencies:
-    deep-equal "~1.0.1"
-    defined "~1.0.0"
-    for-each "~0.3.3"
-    function-bind "~1.1.1"
-    glob "~7.1.3"
-    has "~1.0.3"
-    inherits "~2.0.3"
-    minimist "~1.2.0"
-    object-inspect "~1.6.0"
-    resolve "~1.10.0"
-    resumer "~0.0.0"
-    string.prototype.trim "~1.1.2"
-    through "~2.3.8"
-
-tar@^4:
-  version "4.4.8"
-  resolved "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"
-  integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==
-  dependencies:
-    chownr "^1.1.1"
-    fs-minipass "^1.2.5"
-    minipass "^2.3.4"
-    minizlib "^1.1.1"
-    mkdirp "^0.5.0"
-    safe-buffer "^5.1.2"
-    yallist "^3.0.2"
-
-terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.2.3:
-  version "1.2.4"
-  resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.4.tgz#56f87540c28dd5265753431009388f473b5abba3"
-  integrity sha512-64IiILNQlACWZLzFlpzNaG0bpQ4ytaB7fwOsbpsdIV70AfLUmIGGeuKL0YV2WmtcrURjE2aOvHD4/lrFV3Rg+Q==
-  dependencies:
-    cacache "^11.3.2"
-    find-cache-dir "^2.0.0"
-    is-wsl "^1.1.0"
-    schema-utils "^1.0.0"
-    serialize-javascript "^1.7.0"
-    source-map "^0.6.1"
-    terser "^3.17.0"
-    webpack-sources "^1.3.0"
-    worker-farm "^1.7.0"
-
-terser@^3.17.0:
-  version "3.17.0"
-  resolved "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2"
-  integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==
-  dependencies:
-    commander "^2.19.0"
-    source-map "~0.6.1"
-    source-map-support "~0.5.10"
-
-test-exclude@^4.2.1:
-  version "4.2.3"
-  resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20"
-  integrity sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==
-  dependencies:
-    arrify "^1.0.1"
-    micromatch "^2.3.11"
-    object-assign "^4.1.0"
-    read-pkg-up "^1.0.1"
-    require-main-filename "^1.0.1"
-
-text-table@^0.2.0, text-table@~0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
-  integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
-
-thenify-all@^1.0.0:
-  version "1.6.0"
-  resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
-  integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
-  dependencies:
-    thenify ">= 3.1.0 < 4"
-
-"thenify@>= 3.1.0 < 4":
-  version "3.3.0"
-  resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839"
-  integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=
-  dependencies:
-    any-promise "^1.0.0"
-
-thread-loader@^2.1.2:
-  version "2.1.2"
-  resolved "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.2.tgz#f585dd38e852c7f9cded5d092992108148f5eb30"
-  integrity sha512-7xpuc9Ifg6WU+QYw/8uUqNdRwMD+N5gjwHKMqETrs96Qn+7BHwECpt2Brzr4HFlf4IAkZsayNhmGdbkBsTJ//w==
-  dependencies:
-    loader-runner "^2.3.1"
-    loader-utils "^1.1.0"
-    neo-async "^2.6.0"
-
-throat@^4.0.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
-  integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=
-
-through2@^2.0.0:
-  version "2.0.5"
-  resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
-  integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
-  dependencies:
-    readable-stream "~2.3.6"
-    xtend "~4.0.1"
-
-through@^2.3.6, through@~2.3.4, through@~2.3.8:
-  version "2.3.8"
-  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
-  integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
-
-thunky@^1.0.2:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826"
-  integrity sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==
-
-timers-browserify@^2.0.4:
-  version "2.0.10"
-  resolved "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae"
-  integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==
-  dependencies:
-    setimmediate "^1.0.4"
-
-timsort@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
-  integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
-
-tiny-emitter@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
-  integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
-
-tinycolor2@^1.4.1:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
-  integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=
-
-tmp@^0.0.33:
-  version "0.0.33"
-  resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
-  integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
-  dependencies:
-    os-tmpdir "~1.0.2"
-
-tmpl@1.0.x:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
-  integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
-
-to-arraybuffer@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
-  integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
-
-to-fast-properties@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
-  integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
-
-to-fast-properties@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
-  integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
-
-to-object-path@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
-  integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
-  dependencies:
-    kind-of "^3.0.2"
-
-to-regex-range@^2.1.0:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
-  integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
-  dependencies:
-    is-number "^3.0.0"
-    repeat-string "^1.6.1"
-
-to-regex@^3.0.1, to-regex@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
-  integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
-  dependencies:
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    regex-not "^1.0.2"
-    safe-regex "^1.1.0"
-
-toidentifier@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
-  integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
-
-topojson-client@~3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.0.0.tgz#1f99293a77ef42a448d032a81aa982b73f360d2f"
-  integrity sha1-H5kpOnfvQqRI0DKoGqmCtz82DS8=
-  dependencies:
-    commander "2"
-
-toposort@^1.0.0:
-  version "1.0.7"
-  resolved "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029"
-  integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk=
-
-tough-cookie@^2.3.3, tough-cookie@^2.3.4:
-  version "2.5.0"
-  resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
-  integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
-  dependencies:
-    psl "^1.1.28"
-    punycode "^2.1.1"
-
-tough-cookie@~2.4.3:
-  version "2.4.3"
-  resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
-  integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
-  dependencies:
-    psl "^1.1.24"
-    punycode "^1.4.1"
-
-tr46@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
-  integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
-  dependencies:
-    punycode "^2.1.0"
-
-trim-right@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
-  integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
-
-tryer@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
-  integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==
-
-tsconfig@^7.0.0:
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7"
-  integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==
-  dependencies:
-    "@types/strip-bom" "^3.0.0"
-    "@types/strip-json-comments" "0.0.30"
-    strip-bom "^3.0.0"
-    strip-json-comments "^2.0.0"
-
-tslib@^1.9.0:
-  version "1.9.3"
-  resolved "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
-  integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
-
-tty-browserify@0.0.0:
-  version "0.0.0"
-  resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
-  integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
-
-tunnel-agent@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
-  integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
-  dependencies:
-    safe-buffer "^5.0.1"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
-  version "0.14.5"
-  resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
-  integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
-
-type-check@~0.3.2:
-  version "0.3.2"
-  resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
-  integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
-  dependencies:
-    prelude-ls "~1.1.2"
-
-type-fest@^0.4.1:
-  version "0.4.1"
-  resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8"
-  integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==
-
-type-is@~1.6.17, type-is@~1.6.18:
-  version "1.6.18"
-  resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
-  integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
-  dependencies:
-    media-typer "0.3.0"
-    mime-types "~2.1.24"
-
-typedarray@^0.0.6:
-  version "0.0.6"
-  resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
-  integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-
-uglify-js@3.4.x:
-  version "3.4.10"
-  resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f"
-  integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==
-  dependencies:
-    commander "~2.19.0"
-    source-map "~0.6.1"
-
-uglify-js@^2.6.2:
-  version "2.8.29"
-  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
-  integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0=
-  dependencies:
-    source-map "~0.5.1"
-    yargs "~3.10.0"
-  optionalDependencies:
-    uglify-to-browserify "~1.0.0"
-
-uglify-js@^3.1.4:
-  version "3.5.15"
-  resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.15.tgz#fe2b5378fd0b09e116864041437bff889105ce24"
-  integrity sha512-fe7aYFotptIddkwcm6YuA0HmknBZ52ZzOsUxZEdhhkSsz7RfjHDX2QDxwKTiv4JQ5t5NhfmpgAK+J7LiDhKSqg==
-  dependencies:
-    commander "~2.20.0"
-    source-map "~0.6.1"
-
-uglify-to-browserify@~1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
-  integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
-
-unicode-canonical-property-names-ecmascript@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
-  integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
-
-unicode-match-property-ecmascript@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
-  integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
-  dependencies:
-    unicode-canonical-property-names-ecmascript "^1.0.4"
-    unicode-property-aliases-ecmascript "^1.0.4"
-
-unicode-match-property-value-ecmascript@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277"
-  integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==
-
-unicode-property-aliases-ecmascript@^1.0.4:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57"
-  integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==
-
-union-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
-  integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
-  dependencies:
-    arr-union "^3.1.0"
-    get-value "^2.0.6"
-    is-extendable "^0.1.1"
-    set-value "^0.4.3"
-
-uniq@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
-  integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
-
-uniqs@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
-  integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI=
-
-unique-filename@^1.1.0, unique-filename@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
-  integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
-  dependencies:
-    unique-slug "^2.0.0"
-
-unique-slug@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6"
-  integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==
-  dependencies:
-    imurmurhash "^0.1.4"
-
-universalify@^0.1.0:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
-  integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
-
-unpipe@1.0.0, unpipe@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
-  integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
-
-unquote@~1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
-  integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=
-
-unset-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
-  integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
-  dependencies:
-    has-value "^0.3.1"
-    isobject "^3.0.0"
-
-upath@^1.1.1:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068"
-  integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==
-
-upper-case@^1.1.1:
-  version "1.1.3"
-  resolved "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
-  integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=
-
-uri-js@^4.2.2:
-  version "4.2.2"
-  resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
-  integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
-  dependencies:
-    punycode "^2.1.0"
-
-urix@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
-  integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
-
-url-loader@^1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8"
-  integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==
-  dependencies:
-    loader-utils "^1.1.0"
-    mime "^2.0.3"
-    schema-utils "^1.0.0"
-
-url-parse@^1.4.3:
-  version "1.4.7"
-  resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
-  integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==
-  dependencies:
-    querystringify "^2.1.1"
-    requires-port "^1.0.0"
-
-url@^0.11.0:
-  version "0.11.0"
-  resolved "https://registry.npmjs.org/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
-  integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
-  dependencies:
-    punycode "1.3.2"
-    querystring "0.2.0"
-
-use@^3.1.0:
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
-  integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
-
-util-deprecate@^1.0.1, util-deprecate@~1.0.1:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-  integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-
-util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
-  integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
-  dependencies:
-    define-properties "^1.1.2"
-    object.getownpropertydescriptors "^2.0.3"
-
-util@0.10.3:
-  version "0.10.3"
-  resolved "https://registry.npmjs.org/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
-  integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
-  dependencies:
-    inherits "2.0.1"
-
-util@^0.11.0:
-  version "0.11.1"
-  resolved "https://registry.npmjs.org/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
-  integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
-  dependencies:
-    inherits "2.0.3"
-
-utila@^0.4.0, utila@~0.4:
-  version "0.4.0"
-  resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
-  integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=
-
-utils-merge@1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
-  integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
-
-uuid@^3.0.1, uuid@^3.3.2:
-  version "3.3.2"
-  resolved "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
-  integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
-
-validate-npm-package-license@^3.0.1:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
-  integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
-  dependencies:
-    spdx-correct "^3.0.0"
-    spdx-expression-parse "^3.0.0"
-
-vary@~1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
-  integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
-
-vendors@^1.0.0:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0"
-  integrity sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==
-
-venn.js@~0.2.20:
-  version "0.2.20"
-  resolved "https://registry.yarnpkg.com/venn.js/-/venn.js-0.2.20.tgz#3f0e50cc75cba1f58692a8a32f67bd7aaf1aa6fa"
-  integrity sha512-bb5SYq/wamY9fvcuErb9a0FJkgIFHJjkLZWonQ+DoKKuDX3WPH2B4ouI1ce4K2iejBklQy6r1ly8nOGIyOCO6w==
-  dependencies:
-    d3-selection "^1.0.2"
-    d3-transition "^1.0.1"
-    fmin "0.0.2"
-
-verror@1.10.0:
-  version "1.10.0"
-  resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
-  integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
-  dependencies:
-    assert-plus "^1.0.0"
-    core-util-is "1.0.2"
-    extsprintf "^1.2.0"
-
-viser-vue@^2.3.3:
-  version "2.4.5"
-  resolved "https://registry.yarnpkg.com/viser-vue/-/viser-vue-2.4.5.tgz#77318bb32113c5c10868c85c79cbbbff4a16d394"
-  integrity sha512-wSs07wKqsYj9hBzRLqSb87ytfnZrpP/KXQ54bMcjjrX+/ubSLoj1cVEoQcU9ivLy0KUTi1mANHQPA2i9q8UVTQ==
-  dependencies:
-    "@types/node" "*"
-    viser "^2.0.0"
-    vue "^2.5.3"
-
-viser@^2.0.0:
-  version "2.4.5"
-  resolved "https://registry.yarnpkg.com/viser/-/viser-2.4.5.tgz#781f4ef29fdc8893189ee88f745080be6aa77cec"
-  integrity sha512-NJDCEP3ApIi8PsrINFwlYB2z3VT1qf7jJS9vm/xTXv4Pb0wh3y+o3KLuSpzdJQkRtPewJcwMX21/97DhvXcIvA==
-  dependencies:
-    "@antv/g2" "^3.4.0"
-    "@antv/g2-brush" "^0.0.2"
-    "@antv/g2-plugin-slider" "^2.1.0"
-    "@types/d3-format" "*"
-    "@types/lodash" "*"
-    "@types/node" "^8.0.53"
-    d3-format "^1.3.0"
-    lodash "^4.17.4"
-
-vm-browserify@0.0.4:
-  version "0.0.4"
-  resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
-  integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=
-  dependencies:
-    indexof "0.0.1"
-
-vue-clipboard2@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/vue-clipboard2/-/vue-clipboard2-0.2.1.tgz#9f06690af1c98aef344be1fc4beb00cdc5307ee1"
-  integrity sha512-n6ie/0g0bKohmLlC/5ja1esq2Q0jQ5hWmhNSZcvCsWfDeDnVARjl6cBB9p72XV1nlVfuqsZcfV8HTjjZAIlLBA==
-  dependencies:
-    clipboard "^2.0.0"
-
-vue-cropper@0.4.4:
-  version "0.4.4"
-  resolved "https://registry.yarnpkg.com/vue-cropper/-/vue-cropper-0.4.4.tgz#63c85ba5c7f9d9779370930c8522b61deb177c97"
-  integrity sha512-5xJ3jWyTnsx3JM+lFV5mwdPjKfpYi2rvByEh4H0sFtCMILo3YTmMti2pq9YeoPLybJz04ho+wemYw5TqidYV5g==
-  dependencies:
-    "@babel/core" "^7.1.2"
-    "@babel/plugin-transform-runtime" "^7.1.0"
-    "@babel/preset-env" "^7.1.0"
-    babel-loader "^8.0.0-beta.0"
-    babel-plugin-transform-runtime "^6.23.0"
-    babel-runtime "^6.26.0"
-    css-loader "^1.0.0"
-    style-loader "^0.23.1"
-    vue "^2.5.17"
-    vue-template-compiler "^2.5.17"
-    webpack "^4.20.2"
-
-vue-eslint-parser@^2.0.3:
-  version "2.0.3"
-  resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz#c268c96c6d94cfe3d938a5f7593959b0ca3360d1"
-  integrity sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==
-  dependencies:
-    debug "^3.1.0"
-    eslint-scope "^3.7.1"
-    eslint-visitor-keys "^1.0.0"
-    espree "^3.5.2"
-    esquery "^1.0.0"
-    lodash "^4.17.4"
-
-vue-eslint-parser@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz#00f4e4da94ec974b821a26ff0ed0f7a78402b8a1"
-  integrity sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==
-  dependencies:
-    debug "^4.1.0"
-    eslint-scope "^4.0.0"
-    eslint-visitor-keys "^1.0.0"
-    espree "^4.1.0"
-    esquery "^1.0.1"
-    lodash "^4.17.11"
-
-vue-hot-reload-api@^2.3.0:
-  version "2.3.3"
-  resolved "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz#2756f46cb3258054c5f4723de8ae7e87302a1ccf"
-  integrity sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g==
-
-vue-jest@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/vue-jest/-/vue-jest-3.0.4.tgz#b6a2b0d874968f26fa775ac901903fece531e08b"
-  integrity sha512-PY9Rwt4OyaVlA+KDJJ0614CbEvNOkffDI9g9moLQC/2DDoo0YrqZm7dHi13Q10uoK5Nt5WCYFdeAheOExPah0w==
-  dependencies:
-    babel-plugin-transform-es2015-modules-commonjs "^6.26.0"
-    chalk "^2.1.0"
-    extract-from-css "^0.4.4"
-    find-babel-config "^1.1.0"
-    js-beautify "^1.6.14"
-    node-cache "^4.1.1"
-    object-assign "^4.1.1"
-    source-map "^0.5.6"
-    tsconfig "^7.0.0"
-    vue-template-es2015-compiler "^1.6.0"
-
-vue-loader@^15.7.0:
-  version "15.7.0"
-  resolved "https://registry.npmjs.org/vue-loader/-/vue-loader-15.7.0.tgz#27275aa5a3ef4958c5379c006dd1436ad04b25b3"
-  integrity sha512-x+NZ4RIthQOxcFclEcs8sXGEWqnZHodL2J9Vq+hUz+TDZzBaDIh1j3d9M2IUlTjtrHTZy4uMuRdTi8BGws7jLA==
-  dependencies:
-    "@vue/component-compiler-utils" "^2.5.1"
-    hash-sum "^1.0.2"
-    loader-utils "^1.1.0"
-    vue-hot-reload-api "^2.3.0"
-    vue-style-loader "^4.1.0"
-
-vue-ls@^3.2.0:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/vue-ls/-/vue-ls-3.2.1.tgz#25d1c75b3a51c17018129de607b44bb120a3385a"
-  integrity sha512-JoZDpSu0qV5AM50vspEzOut2lcm8R0tr5WG99jMHh14qFXkUes3ZdmDMG/p8iSQVQpg0pd/svGwM9Nd7OI2oaw==
-
-vue-quill-editor@^3.0.6:
-  version "3.0.6"
-  resolved "https://registry.npm.taobao.org/vue-quill-editor/download/vue-quill-editor-3.0.6.tgz#1f85646211d68a31a80a72cb7f45bb2f119bc8fb"
-  integrity sha1-H4VkYhHWijGoCnLLf0W7LxGbyPs=
-  dependencies:
-    object-assign "^4.1.1"
-    quill "^1.3.4"
-
-vue-ref@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/vue-ref/-/vue-ref-1.0.4.tgz#c27862b15a2720cff6b792566d824d1c3ac53320"
-  integrity sha512-DDyR/HlHeeNSkEi4Uj/F/7rER9ma0lnqqx8j9uEhdh0UyBWUCI1HJnX01OjTpLMB4F4TZHlK/6H2I6lqq3QC3Q==
-
-vue-router@^3.0.1:
-  version "3.0.6"
-  resolved "https://registry.npmjs.org/vue-router/-/vue-router-3.0.6.tgz#2e4f0f9cbb0b96d0205ab2690cfe588935136ac3"
-  integrity sha512-Ox0ciFLswtSGRTHYhGvx2L44sVbTPNS+uD2kRISuo8B39Y79rOo0Kw0hzupTmiVtftQYCZl87mwldhh2L9Aquw==
-
-vue-style-loader@^4.1.0:
-  version "4.1.2"
-  resolved "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8"
-  integrity sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==
-  dependencies:
-    hash-sum "^1.0.2"
-    loader-utils "^1.0.2"
-
-vue-svg-component-builder@2.0.3:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/vue-svg-component-builder/-/vue-svg-component-builder-2.0.3.tgz#c4e0a19073587ab882fd6f72bb7b3b63b4396801"
-  integrity sha512-We9ZLSYPQx9y3v5+HNWyjkGFaxZMlWPTqYBU08y4YT46f453BQ4JxIoS8rV0a8PIxnKap7m/YIzrdIfoHxrpaA==
-
-vue-svg-component-runtime@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/vue-svg-component-runtime/-/vue-svg-component-runtime-1.0.1.tgz#c4c241cdf92fead742ef33133b997ff42d8b9ee6"
-  integrity sha512-TkmZ1qwFeFJSRH6b6KVqDU2f8DCSdoNoo/veKqog7FsyF0UETTI66ALKX1rrLXy/KT6LSaJB5IfZkuuSfaQsEA==
-
-vue-svg-icon-loader@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/vue-svg-icon-loader/-/vue-svg-icon-loader-2.1.1.tgz#7b999ccb0647ce3b3903bfbf535fe247e11b032a"
-  integrity sha512-JOL4fyh9rnbcqMLTF5NVG8YVupnLIMHMY+3CLMaEb9xDUmfk6Cp3RqyI/8gBea7d51i4lyNdzZ3tQ/EJLQxQDA==
-  dependencies:
-    "@types/loader-utils" "1.1.3"
-    "@types/node" "8.9"
-    loader-utils "1.1.0"
-    vue-svg-component-builder "2.0.3"
-
-vue-template-compiler@^2.5.17, vue-template-compiler@^2.5.22:
-  version "2.6.7"
-  resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.7.tgz#7f6c14eacf3c912d28d33b029cde706d9756e00c"
-  integrity sha512-ZjxJLr6Lw2gj6aQGKwBWTxVNNd28/qggIdwvr5ushrUHUvqgbHD0xusOVP2yRxT4pX3wRIJ2LfxjgFT41dEtoQ==
-  dependencies:
-    de-indent "^1.0.2"
-    he "^1.1.0"
-
-vue-template-es2015-compiler@^1.6.0, vue-template-es2015-compiler@^1.9.0:
-  version "1.9.1"
-  resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
-  integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
-
-vue@^2.5.17, vue@^2.5.22, vue@^2.5.3:
-  version "2.6.7"
-  resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.7.tgz#254f188e7621d2d19ee28d0c0442c6d21b53ae2d"
-  integrity sha512-g7ADfQ82QU+j6F/bVDioVQf2ccIMYLuR4E8ev+RsDBlmwRkhGO3HhgF4PF9vpwjdPpxyb1zzLur2nQ2oIMAMEg==
-
-vuex@^3.1.0:
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/vuex/-/vuex-3.1.1.tgz#0c264bfe30cdbccf96ab9db3177d211828a5910e"
-  integrity sha512-ER5moSbLZuNSMBFnEBVGhQ1uCBNJslH9W/Dw2W7GZN23UQA69uapP5GTT9Vm8Trc0PzBSVt6LzF3hGjmv41xcg==
-
-w3c-hr-time@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045"
-  integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=
-  dependencies:
-    browser-process-hrtime "^0.1.2"
-
-walker@~1.0.5:
-  version "1.0.7"
-  resolved "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
-  integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=
-  dependencies:
-    makeerror "1.0.x"
-
-wangeditor@^3.1.1:
-  version "3.1.1"
-  resolved "https://registry.npm.taobao.org/wangeditor/download/wangeditor-3.1.1.tgz#fbd3c1d4976923c9edebb85b29d30b35512ad039"
-  integrity sha1-+9PB1JdpI8nt67hbKdMLNVEq0Dk=
-
-warning@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
-  integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=
-  dependencies:
-    loose-envify "^1.0.0"
-
-watch@~0.18.0:
-  version "0.18.0"
-  resolved "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986"
-  integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY=
-  dependencies:
-    exec-sh "^0.2.0"
-    minimist "^1.2.0"
-
-watchpack@^1.5.0:
-  version "1.6.0"
-  resolved "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
-  integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==
-  dependencies:
-    chokidar "^2.0.2"
-    graceful-fs "^4.1.2"
-    neo-async "^2.5.0"
-
-wbuf@^1.1.0, wbuf@^1.7.3:
-  version "1.7.3"
-  resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
-  integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
-  dependencies:
-    minimalistic-assert "^1.0.0"
-
-wcwidth@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
-  integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
-  dependencies:
-    defaults "^1.0.3"
-
-webidl-conversions@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
-  integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
-
-webpack-bundle-analyzer@^3.3.0:
-  version "3.3.2"
-  resolved "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz#3da733a900f515914e729fcebcd4c40dde71fc6f"
-  integrity sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA==
-  dependencies:
-    acorn "^6.0.7"
-    acorn-walk "^6.1.1"
-    bfj "^6.1.1"
-    chalk "^2.4.1"
-    commander "^2.18.0"
-    ejs "^2.6.1"
-    express "^4.16.3"
-    filesize "^3.6.1"
-    gzip-size "^5.0.0"
-    lodash "^4.17.10"
-    mkdirp "^0.5.1"
-    opener "^1.5.1"
-    ws "^6.0.0"
-
-webpack-chain@^4.11.0:
-  version "4.12.1"
-  resolved "https://registry.npmjs.org/webpack-chain/-/webpack-chain-4.12.1.tgz#6c8439bbb2ab550952d60e1ea9319141906c02a6"
-  integrity sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ==
-  dependencies:
-    deepmerge "^1.5.2"
-    javascript-stringify "^1.6.0"
-
-webpack-dev-middleware@^3.7.0:
-  version "3.7.0"
-  resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz#ef751d25f4e9a5c8a35da600c5fda3582b5c6cff"
-  integrity sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==
-  dependencies:
-    memory-fs "^0.4.1"
-    mime "^2.4.2"
-    range-parser "^1.2.1"
-    webpack-log "^2.0.0"
-
-webpack-dev-server@^3.4.1:
-  version "3.4.1"
-  resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.4.1.tgz#a5fd8dec95dec410098e7d9a037ff9405395d51a"
-  integrity sha512-CRqZQX2ryMtrg0r3TXQPpNh76eM1HD3Wmu6zDBxIKi/d2y+4aa28Ia8weNT0bfgWpY6Vs3Oq/K8+DjfbR+tWYw==
-  dependencies:
-    ansi-html "0.0.7"
-    bonjour "^3.5.0"
-    chokidar "^2.1.6"
-    compression "^1.7.4"
-    connect-history-api-fallback "^1.6.0"
-    debug "^4.1.1"
-    del "^4.1.1"
-    express "^4.17.0"
-    html-entities "^1.2.1"
-    http-proxy-middleware "^0.19.1"
-    import-local "^2.0.0"
-    internal-ip "^4.3.0"
-    ip "^1.1.5"
-    killable "^1.0.1"
-    loglevel "^1.6.1"
-    opn "^5.5.0"
-    portfinder "^1.0.20"
-    schema-utils "^1.0.0"
-    selfsigned "^1.10.4"
-    semver "^6.0.0"
-    serve-index "^1.9.1"
-    sockjs "0.3.19"
-    sockjs-client "1.3.0"
-    spdy "^4.0.0"
-    strip-ansi "^3.0.1"
-    supports-color "^6.1.0"
-    url "^0.11.0"
-    webpack-dev-middleware "^3.7.0"
-    webpack-log "^2.0.0"
-    yargs "12.0.5"
-
-webpack-log@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f"
-  integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==
-  dependencies:
-    ansi-colors "^3.0.0"
-    uuid "^3.3.2"
-
-webpack-merge@^4.2.1:
-  version "4.2.1"
-  resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz#5e923cf802ea2ace4fd5af1d3247368a633489b4"
-  integrity sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==
-  dependencies:
-    lodash "^4.17.5"
-
-webpack-sources@^1.1.0, webpack-sources@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85"
-  integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==
-  dependencies:
-    source-list-map "^2.0.0"
-    source-map "~0.6.1"
-
-webpack-theme-color-replacer@^1.2.15:
-  version "1.2.15"
-  resolved "https://registry.yarnpkg.com/webpack-theme-color-replacer/-/webpack-theme-color-replacer-1.2.15.tgz#f42ab038974d8a6ee85a074b65de0cfc17c9f472"
-  integrity sha512-tht5fk6ce6ZwXqPbvkLBJMS+iAM3H60pyexKvZHEbkHpQ1Onq2Y0u6+wUbNBQ/QfDEvCTX5MSkNfD2w/ZJEeKg==
-
-"webpack@>=4 < 4.29":
-  version "4.28.4"
-  resolved "https://registry.npmjs.org/webpack/-/webpack-4.28.4.tgz#1ddae6c89887d7efb752adf0c3cd32b9b07eacd0"
-  integrity sha512-NxjD61WsK/a3JIdwWjtIpimmvE6UrRi3yG54/74Hk9rwNj5FPkA4DJCf1z4ByDWLkvZhTZE+P3C/eh6UD5lDcw==
-  dependencies:
-    "@webassemblyjs/ast" "1.7.11"
-    "@webassemblyjs/helper-module-context" "1.7.11"
-    "@webassemblyjs/wasm-edit" "1.7.11"
-    "@webassemblyjs/wasm-parser" "1.7.11"
-    acorn "^5.6.2"
-    acorn-dynamic-import "^3.0.0"
-    ajv "^6.1.0"
-    ajv-keywords "^3.1.0"
-    chrome-trace-event "^1.0.0"
-    enhanced-resolve "^4.1.0"
-    eslint-scope "^4.0.0"
-    json-parse-better-errors "^1.0.2"
-    loader-runner "^2.3.0"
-    loader-utils "^1.1.0"
-    memory-fs "~0.4.1"
-    micromatch "^3.1.8"
-    mkdirp "~0.5.0"
-    neo-async "^2.5.0"
-    node-libs-browser "^2.0.0"
-    schema-utils "^0.4.4"
-    tapable "^1.1.0"
-    terser-webpack-plugin "^1.1.0"
-    watchpack "^1.5.0"
-    webpack-sources "^1.3.0"
-
-webpack@^4.20.2:
-  version "4.29.5"
-  resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.29.5.tgz#52b60a7b0838427c3a894cd801a11dc0836bc79f"
-  integrity sha512-DuWlYUT982c7XVHodrLO9quFbNpVq5FNxLrMUfYUTlgKW0+yPimynYf1kttSQpEneAL1FH3P3OLNgkyImx8qIQ==
-  dependencies:
-    "@webassemblyjs/ast" "1.8.3"
-    "@webassemblyjs/helper-module-context" "1.8.3"
-    "@webassemblyjs/wasm-edit" "1.8.3"
-    "@webassemblyjs/wasm-parser" "1.8.3"
-    acorn "^6.0.5"
-    acorn-dynamic-import "^4.0.0"
-    ajv "^6.1.0"
-    ajv-keywords "^3.1.0"
-    chrome-trace-event "^1.0.0"
-    enhanced-resolve "^4.1.0"
-    eslint-scope "^4.0.0"
-    json-parse-better-errors "^1.0.2"
-    loader-runner "^2.3.0"
-    loader-utils "^1.1.0"
-    memory-fs "~0.4.1"
-    micromatch "^3.1.8"
-    mkdirp "~0.5.0"
-    neo-async "^2.5.0"
-    node-libs-browser "^2.0.0"
-    schema-utils "^1.0.0"
-    tapable "^1.1.0"
-    terser-webpack-plugin "^1.1.0"
-    watchpack "^1.5.0"
-    webpack-sources "^1.3.0"
-
-websocket-driver@>=0.5.1:
-  version "0.7.0"
-  resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"
-  integrity sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=
-  dependencies:
-    http-parser-js ">=0.4.0"
-    websocket-extensions ">=0.1.1"
-
-websocket-extensions@>=0.1.1:
-  version "0.1.3"
-  resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
-  integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==
-
-whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
-  integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
-  dependencies:
-    iconv-lite "0.4.24"
-
-whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
-  integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
-
-whatwg-url@^6.4.1:
-  version "6.5.0"
-  resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8"
-  integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==
-  dependencies:
-    lodash.sortby "^4.7.0"
-    tr46 "^1.0.1"
-    webidl-conversions "^4.0.2"
-
-whatwg-url@^7.0.0:
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd"
-  integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==
-  dependencies:
-    lodash.sortby "^4.7.0"
-    tr46 "^1.0.1"
-    webidl-conversions "^4.0.2"
-
-which-module@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
-  integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
-
-which@^1.2.12, which@^1.2.9, which@^1.3.0:
-  version "1.3.1"
-  resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
-  integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
-  dependencies:
-    isexe "^2.0.0"
-
-wide-align@^1.1.0:
-  version "1.1.3"
-  resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
-  integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
-  dependencies:
-    string-width "^1.0.2 || 2"
-
-window-size@0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
-  integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
-
-wolfy87-eventemitter@~5.1.0:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/wolfy87-eventemitter/-/wolfy87-eventemitter-5.1.0.tgz#35c1ac0dd1ac0c15e35d981508fc22084a13a011"
-  integrity sha1-NcGsDdGsDBXjXZgVCPwiCEoToBE=
-
-wordwrap@0.0.2:
-  version "0.0.2"
-  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
-  integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
-
-wordwrap@~0.0.2:
-  version "0.0.3"
-  resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
-  integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
-
-wordwrap@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
-  integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
-
-worker-farm@^1.7.0:
-  version "1.7.0"
-  resolved "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
-  integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
-  dependencies:
-    errno "~0.1.7"
-
-wrap-ansi@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
-  integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
-  dependencies:
-    string-width "^1.0.1"
-    strip-ansi "^3.0.1"
-
-wrap-ansi@^5.1.0:
-  version "5.1.0"
-  resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
-  integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
-  dependencies:
-    ansi-styles "^3.2.0"
-    string-width "^3.0.0"
-    strip-ansi "^5.0.0"
-
-wrappy@1:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-
-write-file-atomic@^2.1.0:
-  version "2.4.2"
-  resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9"
-  integrity sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==
-  dependencies:
-    graceful-fs "^4.1.11"
-    imurmurhash "^0.1.4"
-    signal-exit "^3.0.2"
-
-write@1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
-  integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
-  dependencies:
-    mkdirp "^0.5.1"
-
-write@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.npmjs.org/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
-  integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=
-  dependencies:
-    mkdirp "^0.5.1"
-
-ws@^5.2.0:
-  version "5.2.2"
-  resolved "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
-  integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==
-  dependencies:
-    async-limiter "~1.0.0"
-
-ws@^6.0.0:
-  version "6.2.1"
-  resolved "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
-  integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
-  dependencies:
-    async-limiter "~1.0.0"
-
-xml-name-validator@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
-  integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
-
-xtend@^4.0.0, xtend@~4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
-  integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
-
-y18n@^3.2.1:
-  version "3.2.1"
-  resolved "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
-  integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
-
-"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
-  integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
-
-yallist@^2.1.2:
-  version "2.1.2"
-  resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
-  integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
-
-yallist@^3.0.0, yallist@^3.0.2:
-  version "3.0.3"
-  resolved "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
-  integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
-
-yargs-parser@^11.1.1:
-  version "11.1.1"
-  resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
-  integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==
-  dependencies:
-    camelcase "^5.0.0"
-    decamelize "^1.2.0"
-
-yargs-parser@^13.1.0:
-  version "13.1.0"
-  resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz#7016b6dd03e28e1418a510e258be4bff5a31138f"
-  integrity sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==
-  dependencies:
-    camelcase "^5.0.0"
-    decamelize "^1.2.0"
-
-yargs-parser@^9.0.2:
-  version "9.0.2"
-  resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
-  integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=
-  dependencies:
-    camelcase "^4.1.0"
-
-yargs@12.0.5:
-  version "12.0.5"
-  resolved "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
-  integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
-  dependencies:
-    cliui "^4.0.0"
-    decamelize "^1.2.0"
-    find-up "^3.0.0"
-    get-caller-file "^1.0.1"
-    os-locale "^3.0.0"
-    require-directory "^2.1.1"
-    require-main-filename "^1.0.1"
-    set-blocking "^2.0.0"
-    string-width "^2.0.0"
-    which-module "^2.0.0"
-    y18n "^3.2.1 || ^4.0.0"
-    yargs-parser "^11.1.1"
-
-yargs@^11.0.0:
-  version "11.1.0"
-  resolved "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77"
-  integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==
-  dependencies:
-    cliui "^4.0.0"
-    decamelize "^1.1.1"
-    find-up "^2.1.0"
-    get-caller-file "^1.0.1"
-    os-locale "^2.0.0"
-    require-directory "^2.1.1"
-    require-main-filename "^1.0.1"
-    set-blocking "^2.0.0"
-    string-width "^2.0.0"
-    which-module "^2.0.0"
-    y18n "^3.2.1"
-    yargs-parser "^9.0.2"
-
-yargs@^13.0.0:
-  version "13.2.4"
-  resolved "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83"
-  integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==
-  dependencies:
-    cliui "^5.0.0"
-    find-up "^3.0.0"
-    get-caller-file "^2.0.1"
-    os-locale "^3.1.0"
-    require-directory "^2.1.1"
-    require-main-filename "^2.0.0"
-    set-blocking "^2.0.0"
-    string-width "^3.0.0"
-    which-module "^2.0.0"
-    y18n "^4.0.0"
-    yargs-parser "^13.1.0"
-
-yargs@~3.10.0:
-  version "3.10.0"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
-  integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
-  dependencies:
-    camelcase "^1.0.2"
-    cliui "^2.1.0"
-    decamelize "^1.0.0"
-    window-size "0.1.0"
-
-yorkie@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9"
-  integrity sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==
-  dependencies:
-    execa "^0.8.0"
-    is-ci "^1.0.10"
-    normalize-path "^1.0.0"
-    strip-indent "^2.0.0"
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@ant-design/colors@^3.1.0":
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/@ant-design/colors/-/colors-3.2.2.tgz#5ad43d619e911f3488ebac303d606e66a8423903"
+  integrity sha512-YKgNbG2dlzqMhA9NtI3/pbY16m3Yl/EeWBRa+lB1X1YaYxHrxNexiQYCLTWO/uDvAjLFMEDU+zR901waBtMtjQ==
+  dependencies:
+    tinycolor2 "^1.4.1"
+
+"@ant-design/colors@^6.0.0":
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/@ant-design/colors/-/colors-6.0.0.tgz#9b9366257cffcc47db42b9d0203bb592c13c0298"
+  integrity sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==
+  dependencies:
+    "@ctrl/tinycolor" "^3.4.0"
+
+"@ant-design/icons-svg@^4.2.1":
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a"
+  integrity sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==
+
+"@ant-design/icons-vue@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@ant-design/icons-vue/-/icons-vue-2.0.0.tgz#0357f5010a404e9f34a87a4b41b2a08df691dbce"
+  integrity sha512-2c0QQE5hL4N48k5NkPG5sdpMl9YnvyNhf0U7YkdZYDlLnspoRU7vIA0UK9eHBs6OpFLcJB6o8eJrIl2ajBskPg==
+  dependencies:
+    "@ant-design/colors" "^3.1.0"
+    babel-runtime "^6.26.0"
+
+"@ant-design/icons-vue@^6.1.0":
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz#f9324fdc0eb4cea943cf626d2bf3db9a4ff4c074"
+  integrity sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==
+  dependencies:
+    "@ant-design/colors" "^6.0.0"
+    "@ant-design/icons-svg" "^4.2.1"
+
+"@ant-design/icons@^2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-2.1.1.tgz#7b9c08dffd4f5d41db667d9dbe5e0107d0bd9a4a"
+  integrity sha512-jCH+k2Vjlno4YWl6g535nHR09PwCEmTBKAG6VqF+rhkrSPRLfgpU2maagwbZPLjaHuU5Jd1DFQ2KJpQuI6uG8w==
+
+"@antv/adjust@~0.1.0":
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/@antv/adjust/-/adjust-0.1.1.tgz#e263ab0e1a1941a648842fc086cf65a7e3b75e98"
+  integrity sha512-9FaMOyBlM4AgoRL0b5o0VhEKAYkexBNUrxV8XmpHU/9NBPJONBOB/NZUlQDqxtLItrt91tCfbAuMQmF529UX2Q==
+  dependencies:
+    "@antv/util" "~1.3.1"
+
+"@antv/attr@~0.1.2":
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/@antv/attr/-/attr-0.1.2.tgz#2eeb122fcaaf851a2d8749abc7c60519d3f77e37"
+  integrity sha512-QXjP+T2I+pJQcwZx1oCA4tipG43vgeCeKcGGKahlcxb71OBAzjJZm1QbF4frKXcnOqRkxVXtCr70X9TRair3Ew==
+  dependencies:
+    "@antv/util" "~1.3.1"
+
+"@antv/component@~0.3.2":
+  version "0.3.8"
+  resolved "https://registry.yarnpkg.com/@antv/component/-/component-0.3.8.tgz#677ecd3b5026907d4cb70d9082951d7c3c2b5434"
+  integrity sha512-1WN3FzeRyJ1jraS/2og5gnm2ragnwtRMVQMiLolztWaUgC++F/B1CcSrPYfV1WvYrfuwbpX/QQxo3HL9aS+YJA==
+  dependencies:
+    "@antv/attr" "~0.1.2"
+    "@antv/g" "~3.3.5"
+    "@antv/util" "~1.3.1"
+    wolfy87-eventemitter "~5.1.0"
+
+"@antv/coord@~0.1.0":
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/@antv/coord/-/coord-0.1.0.tgz#48a80ae36d07552f96657e7f8095227c63f0c0a9"
+  integrity sha512-W1R8h3Jfb3AfMBVfCreFPMVetgEYuwHBIGn0+d3EgYXe2ckOF8XWjkpGF1fZhOMHREMr+Gt27NGiQh8yBdLUgg==
+  dependencies:
+    "@antv/util" "~1.3.1"
+
+"@antv/data-set@^0.10.1":
+  version "0.10.2"
+  resolved "https://registry.yarnpkg.com/@antv/data-set/-/data-set-0.10.2.tgz#584a9574e7e0853847cb658d51b9f7345a00032f"
+  integrity sha512-FFWG5tiTiFiUrLDRwulraU5XfOdDjkYOlZna+AMT9FJw406D/gfS8eXM9YibscBH28M/+KLAVO8xEwuD1sc3bw==
+  dependencies:
+    "@antv/hierarchy" "~0.4.0"
+    "@antv/util" "~1.3.1"
+    d3-array "~1.2.0"
+    d3-composite-projections "~1.2.0"
+    d3-dsv "~1.0.5"
+    d3-geo "~1.6.4"
+    d3-geo-projection "~2.1.2"
+    d3-hexjson "~1.0.1"
+    d3-hierarchy "~1.1.5"
+    d3-sankey "~0.7.1"
+    d3-voronoi "~1.1.2"
+    dagre "~0.8.2"
+    point-at-length "~1.0.2"
+    regression "~2.0.0"
+    simple-statistics "~6.1.0"
+    topojson-client "~3.0.0"
+    wolfy87-eventemitter "~5.1.0"
+
+"@antv/g2-brush@^0.0.2":
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/@antv/g2-brush/-/g2-brush-0.0.2.tgz#0b65f3ebbf82690202913d0b6759ab2900faa841"
+  integrity sha512-7O9szwem19nmEgReXhFB8kVLRaz8J5MHvrzDSDY36YaBOaHSWRGHnvYt2KkkPqgWtHtLY1srssk4X/UmP5govA==
+
+"@antv/g2-plugin-slider@^2.1.0":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@antv/g2-plugin-slider/-/g2-plugin-slider-2.1.1.tgz#c20c5f1cf085bea478f8ab1fc84837e45c46a065"
+  integrity sha512-nB678VEGG3FkrvkDDFADAKjLQIeXzITEYqey5oeOpbf0vT5jOa55lQDyJDZ79cK8PmU/Hz6VPeSb3CNQBA+/FQ==
+
+"@antv/g2@3.5.3":
+  version "3.5.3"
+  resolved "https://registry.yarnpkg.com/@antv/g2/-/g2-3.5.3.tgz#8451719aac860690b67a409d5fb7b06802c4aca6"
+  integrity sha512-JXaceNrJ186auehjBLatl0tz/mYLa2fhQ/SK5/aC4nTcvCdSDIJgMXPmAaKbsqz7y9G0iE9FDRxE2UMkYIzI2A==
+  dependencies:
+    "@antv/adjust" "~0.1.0"
+    "@antv/attr" "~0.1.2"
+    "@antv/component" "~0.3.2"
+    "@antv/coord" "~0.1.0"
+    "@antv/g" "~3.3.6"
+    "@antv/scale" "~0.1.1"
+    "@antv/util" "~1.3.1"
+    venn.js "~0.2.20"
+    wolfy87-eventemitter "~5.1.0"
+
+"@antv/g@~3.3.5", "@antv/g@~3.3.6":
+  version "3.3.6"
+  resolved "https://registry.yarnpkg.com/@antv/g/-/g-3.3.6.tgz#11fed9ddc9ed4e5a2aa244b7c8abb982a003f201"
+  integrity sha512-2GtyTz++s0BbN6s0ZL2/nrqGYCkd52pVoNH92YkrTdTOvpO6Z4DNoo6jGVgZdPX6Nzwli6yduC8MinVAhE8X6g==
+  dependencies:
+    "@antv/gl-matrix" "~2.7.1"
+    "@antv/util" "~1.3.1"
+    d3-ease "~1.0.3"
+    d3-interpolate "~1.1.5"
+    d3-timer "~1.0.6"
+    wolfy87-eventemitter "~5.1.0"
+
+"@antv/gl-matrix@^2.7.1", "@antv/gl-matrix@~2.7.1":
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/@antv/gl-matrix/-/gl-matrix-2.7.1.tgz#acb8e37f7ab3df01345aba4372d7942be42eba14"
+  integrity sha512-oOWcVNlpELIKi9x+Mm1Vwbz8pXfkbJKykoCIOJ/dNK79hSIANbpXJ5d3Rra9/wZqK6MC961B7sybFhPlLraT3Q==
+
+"@antv/hierarchy@~0.4.0":
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/@antv/hierarchy/-/hierarchy-0.4.0.tgz#712b5b4477ee0b8b8db174c682b5356b0411aab6"
+  integrity sha512-ols+m+Z8QA4895SWMTOSjVImOX4tEbWQTwJ0NE+WATc0WLSKs6D9y2yaR+ZWt6P60BMGVIKS6lIfabO3CwGgnQ==
+  dependencies:
+    "@antv/util" "~1.3.1"
+
+"@antv/scale@~0.1.1":
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/@antv/scale/-/scale-0.1.3.tgz#4876e6140cb7dcda190e7fe2e780882dcac6b09d"
+  integrity sha512-oknlOg4OUqIh8LygrfQttx+OAnNJm2fQ81si4g8aby1WJJwj/TU1gCr+J3loIpKBtBK4VpP/OzTTqg1Ym67SOQ==
+  dependencies:
+    "@antv/util" "~1.3.1"
+    fecha "~2.3.3"
+
+"@antv/util@~1.3.1":
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/@antv/util/-/util-1.3.1.tgz#30a34b201ff9126ec0d58c72c8166a9c3e644ccd"
+  integrity sha512-cbUta0hIJrKEaW3eKoGarz3Ita+9qUPF2YzTj8A6wds/nNiy20G26ztIWHU+5ThLc13B1n5Ik52LbaCaeg9enA==
+  dependencies:
+    "@antv/gl-matrix" "^2.7.1"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35", "@babel/code-frame@^7.5.5":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d"
+  integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==
+  dependencies:
+    "@babel/highlight" "^7.0.0"
+
+"@babel/core@^7.0.0", "@babel/core@^7.1.2":
+  version "7.6.4"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff"
+  integrity sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ==
+  dependencies:
+    "@babel/code-frame" "^7.5.5"
+    "@babel/generator" "^7.6.4"
+    "@babel/helpers" "^7.6.2"
+    "@babel/parser" "^7.6.4"
+    "@babel/template" "^7.6.0"
+    "@babel/traverse" "^7.6.3"
+    "@babel/types" "^7.6.3"
+    convert-source-map "^1.1.0"
+    debug "^4.1.0"
+    json5 "^2.1.0"
+    lodash "^4.17.13"
+    resolve "^1.3.2"
+    semver "^5.4.1"
+    source-map "^0.5.0"
+
+"@babel/generator@^7.6.3", "@babel/generator@^7.6.4":
+  version "7.6.4"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671"
+  integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w==
+  dependencies:
+    "@babel/types" "^7.6.3"
+    jsesc "^2.5.1"
+    lodash "^4.17.13"
+    source-map "^0.5.0"
+
+"@babel/helper-annotate-as-pure@^7.0.0":
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
+  integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==
+  dependencies:
+    "@babel/types" "^7.0.0"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0":
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f"
+  integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==
+  dependencies:
+    "@babel/helper-explode-assignable-expression" "^7.1.0"
+    "@babel/types" "^7.0.0"
+
+"@babel/helper-call-delegate@^7.4.4":
+  version "7.4.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43"
+  integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==
+  dependencies:
+    "@babel/helper-hoist-variables" "^7.4.4"
+    "@babel/traverse" "^7.4.4"
+    "@babel/types" "^7.4.4"
+
+"@babel/helper-create-class-features-plugin@^7.5.5", "@babel/helper-create-class-features-plugin@^7.6.0":
+  version "7.6.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.6.0.tgz#769711acca889be371e9bc2eb68641d55218021f"
+  integrity sha512-O1QWBko4fzGju6VoVvrZg0RROCVifcLxiApnGP3OWfWzvxRZFCoBD81K5ur5e3bVY2Vf/5rIJm8cqPKn8HUJng==
+  dependencies:
+    "@babel/helper-function-name" "^7.1.0"
+    "@babel/helper-member-expression-to-functions" "^7.5.5"
+    "@babel/helper-optimise-call-expression" "^7.0.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/helper-replace-supers" "^7.5.5"
+    "@babel/helper-split-export-declaration" "^7.4.4"
+
+"@babel/helper-define-map@^7.5.5":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369"
+  integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==
+  dependencies:
+    "@babel/helper-function-name" "^7.1.0"
+    "@babel/types" "^7.5.5"
+    lodash "^4.17.13"
+
+"@babel/helper-explode-assignable-expression@^7.1.0":
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6"
+  integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==
+  dependencies:
+    "@babel/traverse" "^7.1.0"
+    "@babel/types" "^7.0.0"
+
+"@babel/helper-function-name@^7.1.0":
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53"
+  integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==
+  dependencies:
+    "@babel/helper-get-function-arity" "^7.0.0"
+    "@babel/template" "^7.1.0"
+    "@babel/types" "^7.0.0"
+
+"@babel/helper-get-function-arity@^7.0.0":
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
+  integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==
+  dependencies:
+    "@babel/types" "^7.0.0"
+
+"@babel/helper-hoist-variables@^7.4.4":
+  version "7.4.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a"
+  integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==
+  dependencies:
+    "@babel/types" "^7.4.4"
+
+"@babel/helper-member-expression-to-functions@^7.5.5":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590"
+  integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==
+  dependencies:
+    "@babel/types" "^7.5.5"
+
+"@babel/helper-module-imports@^7.0.0":
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d"
+  integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==
+  dependencies:
+    "@babel/types" "^7.0.0"
+
+"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a"
+  integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==
+  dependencies:
+    "@babel/helper-module-imports" "^7.0.0"
+    "@babel/helper-simple-access" "^7.1.0"
+    "@babel/helper-split-export-declaration" "^7.4.4"
+    "@babel/template" "^7.4.4"
+    "@babel/types" "^7.5.5"
+    lodash "^4.17.13"
+
+"@babel/helper-optimise-call-expression@^7.0.0":
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5"
+  integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==
+  dependencies:
+    "@babel/types" "^7.0.0"
+
+"@babel/helper-plugin-utils@^7.0.0":
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
+  integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==
+
+"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351"
+  integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==
+  dependencies:
+    lodash "^4.17.13"
+
+"@babel/helper-remap-async-to-generator@^7.1.0":
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f"
+  integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.0.0"
+    "@babel/helper-wrap-function" "^7.1.0"
+    "@babel/template" "^7.1.0"
+    "@babel/traverse" "^7.1.0"
+    "@babel/types" "^7.0.0"
+
+"@babel/helper-replace-supers@^7.5.5":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2"
+  integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==
+  dependencies:
+    "@babel/helper-member-expression-to-functions" "^7.5.5"
+    "@babel/helper-optimise-call-expression" "^7.0.0"
+    "@babel/traverse" "^7.5.5"
+    "@babel/types" "^7.5.5"
+
+"@babel/helper-simple-access@^7.1.0":
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c"
+  integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==
+  dependencies:
+    "@babel/template" "^7.1.0"
+    "@babel/types" "^7.0.0"
+
+"@babel/helper-split-export-declaration@^7.4.4":
+  version "7.4.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677"
+  integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==
+  dependencies:
+    "@babel/types" "^7.4.4"
+
+"@babel/helper-wrap-function@^7.1.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa"
+  integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==
+  dependencies:
+    "@babel/helper-function-name" "^7.1.0"
+    "@babel/template" "^7.1.0"
+    "@babel/traverse" "^7.1.0"
+    "@babel/types" "^7.2.0"
+
+"@babel/helpers@^7.6.2":
+  version "7.6.2"
+  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153"
+  integrity sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA==
+  dependencies:
+    "@babel/template" "^7.6.0"
+    "@babel/traverse" "^7.6.2"
+    "@babel/types" "^7.6.0"
+
+"@babel/highlight@^7.0.0":
+  version "7.5.0"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540"
+  integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==
+  dependencies:
+    chalk "^2.0.0"
+    esutils "^2.0.2"
+    js-tokens "^4.0.0"
+
+"@babel/parser@^7.0.0", "@babel/parser@^7.6.0", "@babel/parser@^7.6.3", "@babel/parser@^7.6.4":
+  version "7.6.4"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81"
+  integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A==
+
+"@babel/plugin-proposal-async-generator-functions@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e"
+  integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/helper-remap-async-to-generator" "^7.1.0"
+    "@babel/plugin-syntax-async-generators" "^7.2.0"
+
+"@babel/plugin-proposal-class-properties@^7.0.0":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4"
+  integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.5.5"
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-proposal-decorators@^7.1.0":
+  version "7.6.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.6.0.tgz#6659d2572a17d70abd68123e89a12a43d90aa30c"
+  integrity sha512-ZSyYw9trQI50sES6YxREXKu+4b7MAg6Qx2cvyDDYjP2Hpzd3FleOUwC9cqn1+za8d0A2ZU8SHujxFao956efUg==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.6.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-syntax-decorators" "^7.2.0"
+
+"@babel/plugin-proposal-dynamic-import@^7.5.0":
+  version "7.5.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506"
+  integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-syntax-dynamic-import" "^7.2.0"
+
+"@babel/plugin-proposal-json-strings@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317"
+  integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-syntax-json-strings" "^7.2.0"
+
+"@babel/plugin-proposal-object-rest-spread@^7.3.4", "@babel/plugin-proposal-object-rest-spread@^7.6.2":
+  version "7.6.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096"
+  integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5"
+  integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.2.0", "@babel/plugin-proposal-unicode-property-regex@^7.6.2":
+  version "7.6.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz#05413762894f41bfe42b9a5e80919bd575dcc802"
+  integrity sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/helper-regex" "^7.4.4"
+    regexpu-core "^4.6.0"
+
+"@babel/plugin-syntax-async-generators@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f"
+  integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-decorators@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b"
+  integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612"
+  integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-json-strings@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470"
+  integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7"
+  integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-object-rest-spread@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e"
+  integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c"
+  integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-arrow-functions@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550"
+  integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-async-to-generator@^7.3.4", "@babel/plugin-transform-async-to-generator@^7.5.0":
+  version "7.5.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e"
+  integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==
+  dependencies:
+    "@babel/helper-module-imports" "^7.0.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/helper-remap-async-to-generator" "^7.1.0"
+
+"@babel/plugin-transform-block-scoped-functions@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190"
+  integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-block-scoping@^7.3.4", "@babel/plugin-transform-block-scoping@^7.6.3":
+  version "7.6.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz#6e854e51fbbaa84351b15d4ddafe342f3a5d542a"
+  integrity sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    lodash "^4.17.13"
+
+"@babel/plugin-transform-classes@^7.3.4", "@babel/plugin-transform-classes@^7.5.5":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9"
+  integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.0.0"
+    "@babel/helper-define-map" "^7.5.5"
+    "@babel/helper-function-name" "^7.1.0"
+    "@babel/helper-optimise-call-expression" "^7.0.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/helper-replace-supers" "^7.5.5"
+    "@babel/helper-split-export-declaration" "^7.4.4"
+    globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da"
+  integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-destructuring@^7.2.0", "@babel/plugin-transform-destructuring@^7.6.0":
+  version "7.6.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6"
+  integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-dotall-regex@^7.2.0", "@babel/plugin-transform-dotall-regex@^7.6.2":
+  version "7.6.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz#44abb948b88f0199a627024e1508acaf8dc9b2f9"
+  integrity sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/helper-regex" "^7.4.4"
+    regexpu-core "^4.6.0"
+
+"@babel/plugin-transform-duplicate-keys@^7.2.0", "@babel/plugin-transform-duplicate-keys@^7.5.0":
+  version "7.5.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853"
+  integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-exponentiation-operator@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008"
+  integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==
+  dependencies:
+    "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-for-of@^7.2.0", "@babel/plugin-transform-for-of@^7.4.4":
+  version "7.4.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556"
+  integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-function-name@^7.2.0", "@babel/plugin-transform-function-name@^7.4.4":
+  version "7.4.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad"
+  integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==
+  dependencies:
+    "@babel/helper-function-name" "^7.1.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-literals@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1"
+  integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-member-expression-literals@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d"
+  integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-amd@^7.2.0", "@babel/plugin-transform-modules-amd@^7.5.0":
+  version "7.5.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91"
+  integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.1.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+    babel-plugin-dynamic-import-node "^2.3.0"
+
+"@babel/plugin-transform-modules-commonjs@^7.2.0", "@babel/plugin-transform-modules-commonjs@^7.6.0":
+  version "7.6.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486"
+  integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.4.4"
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/helper-simple-access" "^7.1.0"
+    babel-plugin-dynamic-import-node "^2.3.0"
+
+"@babel/plugin-transform-modules-systemjs@^7.3.4", "@babel/plugin-transform-modules-systemjs@^7.5.0":
+  version "7.5.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249"
+  integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==
+  dependencies:
+    "@babel/helper-hoist-variables" "^7.4.4"
+    "@babel/helper-plugin-utils" "^7.0.0"
+    babel-plugin-dynamic-import-node "^2.3.0"
+
+"@babel/plugin-transform-modules-umd@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae"
+  integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.1.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.3.0", "@babel/plugin-transform-named-capturing-groups-regex@^7.6.3":
+  version "7.6.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.3.tgz#aaa6e409dd4fb2e50b6e2a91f7e3a3149dbce0cf"
+  integrity sha512-jTkk7/uE6H2s5w6VlMHeWuH+Pcy2lmdwFoeWCVnvIrDUnB5gQqTVI8WfmEAhF2CDEarGrknZcmSFg1+bkfCoSw==
+  dependencies:
+    regexpu-core "^4.6.0"
+
+"@babel/plugin-transform-new-target@^7.0.0", "@babel/plugin-transform-new-target@^7.4.4":
+  version "7.4.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5"
+  integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-object-super@^7.2.0", "@babel/plugin-transform-object-super@^7.5.5":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9"
+  integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/helper-replace-supers" "^7.5.5"
+
+"@babel/plugin-transform-parameters@^7.2.0", "@babel/plugin-transform-parameters@^7.4.4":
+  version "7.4.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16"
+  integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==
+  dependencies:
+    "@babel/helper-call-delegate" "^7.4.4"
+    "@babel/helper-get-function-arity" "^7.0.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-property-literals@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905"
+  integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-regenerator@^7.3.4", "@babel/plugin-transform-regenerator@^7.4.5":
+  version "7.4.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f"
+  integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==
+  dependencies:
+    regenerator-transform "^0.14.0"
+
+"@babel/plugin-transform-reserved-words@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634"
+  integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-runtime@^7.1.0", "@babel/plugin-transform-runtime@^7.4.0":
+  version "7.6.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.2.tgz#2669f67c1fae0ae8d8bf696e4263ad52cb98b6f8"
+  integrity sha512-cqULw/QB4yl73cS5Y0TZlQSjDvNkzDbu0FurTZyHlJpWE5T3PCMdnyV+xXoH1opr1ldyHODe3QAX3OMAii5NxA==
+  dependencies:
+    "@babel/helper-module-imports" "^7.0.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+    resolve "^1.8.1"
+    semver "^5.5.1"
+
+"@babel/plugin-transform-shorthand-properties@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0"
+  integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-spread@^7.2.0", "@babel/plugin-transform-spread@^7.6.2":
+  version "7.6.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd"
+  integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-sticky-regex@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1"
+  integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/helper-regex" "^7.0.0"
+
+"@babel/plugin-transform-template-literals@^7.2.0", "@babel/plugin-transform-template-literals@^7.4.4":
+  version "7.4.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0"
+  integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.0.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-typeof-symbol@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2"
+  integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-unicode-regex@^7.2.0", "@babel/plugin-transform-unicode-regex@^7.6.2":
+  version "7.6.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz#b692aad888a7e8d8b1b214be6b9dc03d5031f698"
+  integrity sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/helper-regex" "^7.4.4"
+    regexpu-core "^4.6.0"
+
+"@babel/polyfill@^7.2.5":
+  version "7.6.0"
+  resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.6.0.tgz#6d89203f8b6cd323e8d946e47774ea35dc0619cc"
+  integrity sha512-q5BZJI0n/B10VaQQvln1IlDK3BTBJFbADx7tv+oXDPIDZuTo37H5Adb9jhlXm/fEN4Y7/64qD9mnrJJG7rmaTw==
+  dependencies:
+    core-js "^2.6.5"
+    regenerator-runtime "^0.13.2"
+
+"@babel/preset-env@^7.0.0 < 7.4.0":
+  version "7.3.4"
+  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.4.tgz#887cf38b6d23c82f19b5135298bdb160062e33e1"
+  integrity sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==
+  dependencies:
+    "@babel/helper-module-imports" "^7.0.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-proposal-async-generator-functions" "^7.2.0"
+    "@babel/plugin-proposal-json-strings" "^7.2.0"
+    "@babel/plugin-proposal-object-rest-spread" "^7.3.4"
+    "@babel/plugin-proposal-optional-catch-binding" "^7.2.0"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.2.0"
+    "@babel/plugin-syntax-async-generators" "^7.2.0"
+    "@babel/plugin-syntax-json-strings" "^7.2.0"
+    "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
+    "@babel/plugin-transform-arrow-functions" "^7.2.0"
+    "@babel/plugin-transform-async-to-generator" "^7.3.4"
+    "@babel/plugin-transform-block-scoped-functions" "^7.2.0"
+    "@babel/plugin-transform-block-scoping" "^7.3.4"
+    "@babel/plugin-transform-classes" "^7.3.4"
+    "@babel/plugin-transform-computed-properties" "^7.2.0"
+    "@babel/plugin-transform-destructuring" "^7.2.0"
+    "@babel/plugin-transform-dotall-regex" "^7.2.0"
+    "@babel/plugin-transform-duplicate-keys" "^7.2.0"
+    "@babel/plugin-transform-exponentiation-operator" "^7.2.0"
+    "@babel/plugin-transform-for-of" "^7.2.0"
+    "@babel/plugin-transform-function-name" "^7.2.0"
+    "@babel/plugin-transform-literals" "^7.2.0"
+    "@babel/plugin-transform-modules-amd" "^7.2.0"
+    "@babel/plugin-transform-modules-commonjs" "^7.2.0"
+    "@babel/plugin-transform-modules-systemjs" "^7.3.4"
+    "@babel/plugin-transform-modules-umd" "^7.2.0"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.3.0"
+    "@babel/plugin-transform-new-target" "^7.0.0"
+    "@babel/plugin-transform-object-super" "^7.2.0"
+    "@babel/plugin-transform-parameters" "^7.2.0"
+    "@babel/plugin-transform-regenerator" "^7.3.4"
+    "@babel/plugin-transform-shorthand-properties" "^7.2.0"
+    "@babel/plugin-transform-spread" "^7.2.0"
+    "@babel/plugin-transform-sticky-regex" "^7.2.0"
+    "@babel/plugin-transform-template-literals" "^7.2.0"
+    "@babel/plugin-transform-typeof-symbol" "^7.2.0"
+    "@babel/plugin-transform-unicode-regex" "^7.2.0"
+    browserslist "^4.3.4"
+    invariant "^2.2.2"
+    js-levenshtein "^1.1.3"
+    semver "^5.3.0"
+
+"@babel/preset-env@^7.1.0":
+  version "7.6.3"
+  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.3.tgz#9e1bf05a2e2d687036d24c40e4639dc46cef2271"
+  integrity sha512-CWQkn7EVnwzlOdR5NOm2+pfgSNEZmvGjOhlCHBDq0J8/EStr+G+FvPEiz9B56dR6MoiUFjXhfE4hjLoAKKJtIQ==
+  dependencies:
+    "@babel/helper-module-imports" "^7.0.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-proposal-async-generator-functions" "^7.2.0"
+    "@babel/plugin-proposal-dynamic-import" "^7.5.0"
+    "@babel/plugin-proposal-json-strings" "^7.2.0"
+    "@babel/plugin-proposal-object-rest-spread" "^7.6.2"
+    "@babel/plugin-proposal-optional-catch-binding" "^7.2.0"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.6.2"
+    "@babel/plugin-syntax-async-generators" "^7.2.0"
+    "@babel/plugin-syntax-dynamic-import" "^7.2.0"
+    "@babel/plugin-syntax-json-strings" "^7.2.0"
+    "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
+    "@babel/plugin-transform-arrow-functions" "^7.2.0"
+    "@babel/plugin-transform-async-to-generator" "^7.5.0"
+    "@babel/plugin-transform-block-scoped-functions" "^7.2.0"
+    "@babel/plugin-transform-block-scoping" "^7.6.3"
+    "@babel/plugin-transform-classes" "^7.5.5"
+    "@babel/plugin-transform-computed-properties" "^7.2.0"
+    "@babel/plugin-transform-destructuring" "^7.6.0"
+    "@babel/plugin-transform-dotall-regex" "^7.6.2"
+    "@babel/plugin-transform-duplicate-keys" "^7.5.0"
+    "@babel/plugin-transform-exponentiation-operator" "^7.2.0"
+    "@babel/plugin-transform-for-of" "^7.4.4"
+    "@babel/plugin-transform-function-name" "^7.4.4"
+    "@babel/plugin-transform-literals" "^7.2.0"
+    "@babel/plugin-transform-member-expression-literals" "^7.2.0"
+    "@babel/plugin-transform-modules-amd" "^7.5.0"
+    "@babel/plugin-transform-modules-commonjs" "^7.6.0"
+    "@babel/plugin-transform-modules-systemjs" "^7.5.0"
+    "@babel/plugin-transform-modules-umd" "^7.2.0"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.3"
+    "@babel/plugin-transform-new-target" "^7.4.4"
+    "@babel/plugin-transform-object-super" "^7.5.5"
+    "@babel/plugin-transform-parameters" "^7.4.4"
+    "@babel/plugin-transform-property-literals" "^7.2.0"
+    "@babel/plugin-transform-regenerator" "^7.4.5"
+    "@babel/plugin-transform-reserved-words" "^7.2.0"
+    "@babel/plugin-transform-shorthand-properties" "^7.2.0"
+    "@babel/plugin-transform-spread" "^7.6.2"
+    "@babel/plugin-transform-sticky-regex" "^7.2.0"
+    "@babel/plugin-transform-template-literals" "^7.4.4"
+    "@babel/plugin-transform-typeof-symbol" "^7.2.0"
+    "@babel/plugin-transform-unicode-regex" "^7.6.2"
+    "@babel/types" "^7.6.3"
+    browserslist "^4.6.0"
+    core-js-compat "^3.1.1"
+    invariant "^2.2.2"
+    js-levenshtein "^1.1.3"
+    semver "^5.5.0"
+
+"@babel/runtime-corejs2@^7.2.0":
+  version "7.6.3"
+  resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.6.3.tgz#de3f446b3fb688b98cbd220474d1a7cad909bcb8"
+  integrity sha512-nuA2o+rgX2+PrNTZ063ehncVcg7sn+tU71BB81SaWRVUbGwCOlb0+yQA1e0QqmzOfRSYOxfvf8cosYqFbJEiwQ==
+  dependencies:
+    core-js "^2.6.5"
+    regenerator-runtime "^0.13.2"
+
+"@babel/runtime@^7.0.0":
+  version "7.6.3"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f"
+  integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==
+  dependencies:
+    regenerator-runtime "^0.13.2"
+
+"@babel/template@^7.1.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0":
+  version "7.6.0"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6"
+  integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    "@babel/parser" "^7.6.0"
+    "@babel/types" "^7.6.0"
+
+"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3":
+  version "7.6.3"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9"
+  integrity sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw==
+  dependencies:
+    "@babel/code-frame" "^7.5.5"
+    "@babel/generator" "^7.6.3"
+    "@babel/helper-function-name" "^7.1.0"
+    "@babel/helper-split-export-declaration" "^7.4.4"
+    "@babel/parser" "^7.6.3"
+    "@babel/types" "^7.6.3"
+    debug "^4.1.0"
+    globals "^11.1.0"
+    lodash "^4.17.13"
+
+"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3":
+  version "7.6.3"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09"
+  integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==
+  dependencies:
+    esutils "^2.0.2"
+    lodash "^4.17.13"
+    to-fast-properties "^2.0.0"
+
+"@ctrl/tinycolor@^3.4.0":
+  version "3.4.1"
+  resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32"
+  integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==
+
+"@hapi/address@2.x.x":
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.2.tgz#1c794cd6dbf2354d1eb1ef10e0303f573e1c7222"
+  integrity sha512-O4QDrx+JoGKZc6aN64L04vqa7e41tIiLU+OvKdcYaEMP97UttL0f9GIi9/0A4WAMx0uBd6SidDIhktZhgOcN8Q==
+
+"@hapi/bourne@1.x.x":
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a"
+  integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==
+
+"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0":
+  version "8.3.2"
+  resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.3.2.tgz#91e7188edebc5d876f0b91a860f555ff06f0782b"
+  integrity sha512-NP5SG4bzix+EtSMtcudp8TvI0lB46mXNo8uFpTDw6tqxGx4z5yx+giIunEFA0Z7oUO4DuWrOJV9xqR2tJVEdyA==
+
+"@hapi/joi@^15.0.1":
+  version "15.1.1"
+  resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7"
+  integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==
+  dependencies:
+    "@hapi/address" "2.x.x"
+    "@hapi/bourne" "1.x.x"
+    "@hapi/hoek" "8.x.x"
+    "@hapi/topo" "3.x.x"
+
+"@hapi/topo@3.x.x":
+  version "3.1.6"
+  resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29"
+  integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==
+  dependencies:
+    "@hapi/hoek" "^8.3.0"
+
+"@intervolga/optimize-cssnano-plugin@^1.0.5":
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz#be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8"
+  integrity sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==
+  dependencies:
+    cssnano "^4.0.0"
+    cssnano-preset-default "^4.0.0"
+    postcss "^7.0.0"
+
+"@mrmlnc/readdir-enhanced@^2.2.1":
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
+  integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==
+  dependencies:
+    call-me-maybe "^1.0.1"
+    glob-to-regexp "^0.3.0"
+
+"@nodelib/fs.stat@^1.1.2":
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
+  integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
+
+"@soda/friendly-errors-webpack-plugin@^1.7.1":
+  version "1.7.1"
+  resolved "https://registry.yarnpkg.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz#706f64bcb4a8b9642b48ae3ace444c70334d615d"
+  integrity sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ==
+  dependencies:
+    chalk "^1.1.3"
+    error-stack-parser "^2.0.0"
+    string-width "^2.0.0"
+
+"@types/anymatch@*":
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
+  integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==
+
+"@types/d3-format@*":
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-1.3.1.tgz#35bf88264bd6bcda39251165bb827f67879c4384"
+  integrity sha512-KAWvReOKMDreaAwOjdfQMm0HjcUMlQG47GwqdVKgmm20vTd2pucj0a70c3gUSHrnsmo6H2AMrkBsZU2UhJLq8A==
+
+"@types/events@*":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
+  integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
+
+"@types/glob@^7.1.1":
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
+  integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==
+  dependencies:
+    "@types/events" "*"
+    "@types/minimatch" "*"
+    "@types/node" "*"
+
+"@types/loader-utils@1.1.3":
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/@types/loader-utils/-/loader-utils-1.1.3.tgz#82b9163f2ead596c68a8c03e450fbd6e089df401"
+  integrity sha512-euKGFr2oCB3ASBwG39CYJMR3N9T0nanVqXdiH7Zu/Nqddt6SmFRxytq/i2w9LQYNQekEtGBz+pE3qG6fQTNvRg==
+  dependencies:
+    "@types/node" "*"
+    "@types/webpack" "*"
+
+"@types/lodash@*":
+  version "4.14.144"
+  resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.144.tgz#12e57fc99064bce45e5ab3c8bc4783feb75eab8e"
+  integrity sha512-ogI4g9W5qIQQUhXAclq6zhqgqNUr7UlFaqDHbch7WLSLeeM/7d3CRaw7GLajxvyFvhJqw4Rpcz5bhoaYtIx6Tg==
+
+"@types/minimatch@*":
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
+  integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
+
+"@types/node@*":
+  version "12.11.7"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.7.tgz#57682a9771a3f7b09c2497f28129a0462966524a"
+  integrity sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA==
+
+"@types/node@8.9":
+  version "8.9.5"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-8.9.5.tgz#162b864bc70be077e6db212b322754917929e976"
+  integrity sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ==
+
+"@types/node@^8.0.53":
+  version "8.10.56"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.56.tgz#f1d55b979163cc0cfb6b927b6e4bf9632bcc8fe7"
+  integrity sha512-5yWs9hy3UWdandOgvmmPCNJ3jI5/o8syatQWOmiAO/9/PptOQ+0O2ANKHltFhE4MGCt/QiVkoxQFUbeha9Yf4w==
+
+"@types/normalize-package-data@^2.4.0":
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
+  integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
+
+"@types/q@^1.5.1":
+  version "1.5.2"
+  resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
+  integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==
+
+"@types/source-list-map@*":
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9"
+  integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==
+
+"@types/strip-bom@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2"
+  integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=
+
+"@types/strip-json-comments@0.0.30":
+  version "0.0.30"
+  resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1"
+  integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==
+
+"@types/tapable@*":
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.4.tgz#b4ffc7dc97b498c969b360a41eee247f82616370"
+  integrity sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ==
+
+"@types/uglify-js@*":
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.4.tgz#96beae23df6f561862a830b4288a49e86baac082"
+  integrity sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ==
+  dependencies:
+    source-map "^0.6.1"
+
+"@types/webpack-sources@*":
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.5.tgz#be47c10f783d3d6efe1471ff7f042611bd464a92"
+  integrity sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==
+  dependencies:
+    "@types/node" "*"
+    "@types/source-list-map" "*"
+    source-map "^0.6.1"
+
+"@types/webpack@*":
+  version "4.39.5"
+  resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.39.5.tgz#3671b65928d9e0c6fcd4adff3f8167d48b174681"
+  integrity sha512-9twG6D97ao13MBLvigwfBJe6rxtb04UY3TcYHBYkW5sXZjUrNhqIRxLYg74VzK/YAE8xlVhOyd+3Whr7E5RrBA==
+  dependencies:
+    "@types/anymatch" "*"
+    "@types/node" "*"
+    "@types/tapable" "*"
+    "@types/uglify-js" "*"
+    "@types/webpack-sources" "*"
+    source-map "^0.6.0"
+
+"@vue/babel-helper-vue-jsx-merge-props@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz#048fe579958da408fb7a8b2a3ec050b50a661040"
+  integrity sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw==
+
+"@vue/babel-plugin-transform-vue-jsx@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.0.0.tgz#ebcbf39c312c94114c8c4f407ee4f6c97aa45432"
+  integrity sha512-U+JNwVQSmaLKjO3lzCUC3cNXxprgezV1N+jOdqbP4xWNaqtWUCJnkjTVcgECM18A/AinDKPcUUeoyhU7yxUxXQ==
+  dependencies:
+    "@babel/helper-module-imports" "^7.0.0"
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0"
+    html-tags "^2.0.0"
+    lodash.kebabcase "^4.1.1"
+    svg-tags "^1.0.0"
+
+"@vue/babel-preset-app@^3.12.1":
+  version "3.12.1"
+  resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-3.12.1.tgz#24c477052f078f30fdb7735103b14dd1fa2cbfe1"
+  integrity sha512-Zjy5jQaikV1Pz+ri0YgXFS7q4/5wCxB5tRkDOEIt5+4105u0Feb/pvH20nVL6nx9GyXrECFfcm7Yxr/z++OaPQ==
+  dependencies:
+    "@babel/helper-module-imports" "^7.0.0"
+    "@babel/plugin-proposal-class-properties" "^7.0.0"
+    "@babel/plugin-proposal-decorators" "^7.1.0"
+    "@babel/plugin-syntax-dynamic-import" "^7.0.0"
+    "@babel/plugin-syntax-jsx" "^7.0.0"
+    "@babel/plugin-transform-runtime" "^7.4.0"
+    "@babel/preset-env" "^7.0.0 < 7.4.0"
+    "@babel/runtime" "^7.0.0"
+    "@babel/runtime-corejs2" "^7.2.0"
+    "@vue/babel-preset-jsx" "^1.0.0"
+    babel-plugin-dynamic-import-node "^2.2.0"
+    babel-plugin-module-resolver "3.2.0"
+    core-js "^2.6.5"
+
+"@vue/babel-preset-jsx@^1.0.0":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.1.tgz#3a74642ca0ecea10aae13649df5ff70f9d24a6f5"
+  integrity sha512-SeyndwQZc8MAOkhbJaC34ocTwcKekKkwrwnTMC3YF8VmGp5IQWW5gPIU66bqO9WFBXFA3J3ANsUbP2pj8q8KdQ==
+  dependencies:
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0"
+    "@vue/babel-plugin-transform-vue-jsx" "^1.0.0"
+    "@vue/babel-sugar-functional-vue" "^1.0.0"
+    "@vue/babel-sugar-inject-h" "^1.0.0"
+    "@vue/babel-sugar-v-model" "^1.1.1"
+    "@vue/babel-sugar-v-on" "^1.1.0"
+
+"@vue/babel-sugar-functional-vue@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.0.0.tgz#17e2c4ca27b74b244da3b923240ec91d10048cb3"
+  integrity sha512-XE/jNaaorTuhWayCz+QClk5AB9OV5HzrwbzEC6sIUY0J60A28ONQKeTwxfidW42egOkqNH/UU6eE3KLfmiDj0Q==
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@vue/babel-sugar-inject-h@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.0.0.tgz#e5efb6c5b5b7988dc03831af6d133bf7bcde6347"
+  integrity sha512-NxWU+DqtbZgfGvd25GPoFMj+rvyQ8ZA1pHj8vIeqRij+vx3sXoKkObjA9ulZunvWw5F6uG9xYy4ytpxab/X+Hg==
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@vue/babel-sugar-v-model@^1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.1.1.tgz#a0f0750fcee20769805a20178299eebd4babf25a"
+  integrity sha512-qiPbdUTiqNQdhXzvWQMVfrYGHCiMmscY7j/cudLxdxWZ8AFhgPRVlniVgaWIT7A1iOjs92e8U6qVyqkf0d4ZrA==
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0"
+    "@vue/babel-plugin-transform-vue-jsx" "^1.0.0"
+    camelcase "^5.0.0"
+    html-tags "^2.0.0"
+    svg-tags "^1.0.0"
+
+"@vue/babel-sugar-v-on@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.0.tgz#1f2b35eeeabb87eaf8925931f4d34fd8e6404a45"
+  integrity sha512-8DwAj/RLpmrDP4eZ3erJcKcyuLArLUYagNODTsSQrMdG5zmLJoFFtEjODfYRh/XxM2wXv9Wxe+HAB41FQxxwQA==
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+    "@vue/babel-plugin-transform-vue-jsx" "^1.0.0"
+    camelcase "^5.0.0"
+
+"@vue/cli-overlay@^3.12.1":
+  version "3.12.1"
+  resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-3.12.1.tgz#bdfde8f7123561ab06e4e4c60b854cc5092f5ab1"
+  integrity sha512-Bym92EN+lj+cNRN2ozbYyH+V8DMXWGbCDUk+hiJ4EYDBZfBkZKvalk1/mOBFwyxiopnnbOEBAAhL/UuMQ1xARg==
+
+"@vue/cli-plugin-babel@^3.7.0":
+  version "3.12.1"
+  resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-3.12.1.tgz#9a79159de8cd086b013fa6d78a39830b2e2ec706"
+  integrity sha512-Zetvz8PikLCGomeKOKu8pC9YQ7cfxs7pGpvEOzaxGdhMnebhjAYR6i6dOB57A6N5lhxQksXCtYTv26QgfiIpdg==
+  dependencies:
+    "@babel/core" "^7.0.0"
+    "@vue/babel-preset-app" "^3.12.1"
+    "@vue/cli-shared-utils" "^3.12.1"
+    babel-loader "^8.0.5"
+    webpack "^4.0.0"
+
+"@vue/cli-plugin-eslint@^3.7.0":
+  version "3.12.1"
+  resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.12.1.tgz#302c463867f38e790bb996eafdf7159c782dc8cf"
+  integrity sha512-tVTZlEZsy3sQbO4LLWFK11yzlWwqVAqaM+IY+BeWHITBzEJKh2KmouG+x6x/reXiU3qROsMJ4Ej3Hs8buSMWyQ==
+  dependencies:
+    "@vue/cli-shared-utils" "^3.12.1"
+    babel-eslint "^10.0.1"
+    eslint-loader "^2.1.2"
+    globby "^9.2.0"
+    webpack "^4.0.0"
+    yorkie "^2.0.0"
+  optionalDependencies:
+    eslint "^4.19.1"
+    eslint-plugin-vue "^4.7.1"
+
+"@vue/cli-plugin-unit-jest@^3.7.0":
+  version "3.12.1"
+  resolved "https://registry.yarnpkg.com/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-3.12.1.tgz#b7edd30701191deaa9d53cea752b8d72b825d640"
+  integrity sha512-Cc9Kq4+RaUN1yfNVb7c9hVDNXo2tFTWHgwooCL3XWMu2iL+pDawQt8ZeSqauDY95JoMeEAVy2xBimjL+7jo/jw==
+  dependencies:
+    "@vue/cli-shared-utils" "^3.12.1"
+    babel-jest "^23.6.0"
+    babel-plugin-transform-es2015-modules-commonjs "^6.26.2"
+    jest "^23.6.0"
+    jest-serializer-vue "^2.0.2"
+    jest-transform-stub "^2.0.0"
+    jest-watch-typeahead "0.2.1"
+    vue-jest "^3.0.4"
+
+"@vue/cli-service@^3.7.0":
+  version "3.12.1"
+  resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-3.12.1.tgz#13220b1c189254e7c003390df329086f9b6e77e6"
+  integrity sha512-PDxNrTGnSKzeV1ruFlsRIAO8JcPizwT0EJXq9GeyooU+p+sOkv7aKkCBJQVYNjZapD1NOGWx6CvAAC/wAW+gew==
+  dependencies:
+    "@intervolga/optimize-cssnano-plugin" "^1.0.5"
+    "@soda/friendly-errors-webpack-plugin" "^1.7.1"
+    "@vue/cli-overlay" "^3.12.1"
+    "@vue/cli-shared-utils" "^3.12.1"
+    "@vue/component-compiler-utils" "^3.0.0"
+    "@vue/preload-webpack-plugin" "^1.1.0"
+    "@vue/web-component-wrapper" "^1.2.0"
+    acorn "^6.1.1"
+    acorn-walk "^6.1.1"
+    address "^1.0.3"
+    autoprefixer "^9.5.1"
+    browserslist "^4.5.4"
+    cache-loader "^2.0.1"
+    case-sensitive-paths-webpack-plugin "^2.2.0"
+    chalk "^2.4.2"
+    cli-highlight "^2.1.0"
+    clipboardy "^2.0.0"
+    cliui "^5.0.0"
+    copy-webpack-plugin "^4.6.0"
+    css-loader "^1.0.1"
+    cssnano "^4.1.10"
+    current-script-polyfill "^1.0.0"
+    debug "^4.1.1"
+    default-gateway "^5.0.2"
+    dotenv "^7.0.0"
+    dotenv-expand "^5.1.0"
+    escape-string-regexp "^1.0.5"
+    file-loader "^3.0.1"
+    fs-extra "^7.0.1"
+    globby "^9.2.0"
+    hash-sum "^1.0.2"
+    html-webpack-plugin "^3.2.0"
+    launch-editor-middleware "^2.2.1"
+    lodash.defaultsdeep "^4.6.1"
+    lodash.mapvalues "^4.6.0"
+    lodash.transform "^4.6.0"
+    mini-css-extract-plugin "^0.8.0"
+    minimist "^1.2.0"
+    ora "^3.4.0"
+    portfinder "^1.0.20"
+    postcss-loader "^3.0.0"
+    read-pkg "^5.0.0"
+    semver "^6.0.0"
+    slash "^2.0.0"
+    source-map-url "^0.4.0"
+    ssri "^6.0.1"
+    string.prototype.padend "^3.0.0"
+    terser-webpack-plugin "^1.2.3"
+    thread-loader "^2.1.2"
+    url-loader "^1.1.2"
+    vue-loader "^15.7.0"
+    webpack "^4.0.0"
+    webpack-bundle-analyzer "^3.3.0"
+    webpack-chain "^4.11.0"
+    webpack-dev-server "^3.4.1"
+    webpack-merge "^4.2.1"
+
+"@vue/cli-shared-utils@^3.12.1":
+  version "3.12.1"
+  resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-3.12.1.tgz#bcf076287ddadeebbb97c6a748dfe9ff50ec8df0"
+  integrity sha512-jFblzRFjutGwu5utOKdVlPlsbA1lBUNNQlAThzNqej+JtTKJjnvjlhjKX0Gq0oOny5FjKWhoyfQ74p9h1qE6JQ==
+  dependencies:
+    "@hapi/joi" "^15.0.1"
+    chalk "^2.4.1"
+    execa "^1.0.0"
+    launch-editor "^2.2.1"
+    lru-cache "^5.1.1"
+    node-ipc "^9.1.1"
+    open "^6.3.0"
+    ora "^3.4.0"
+    request "^2.87.0"
+    request-promise-native "^1.0.7"
+    semver "^6.0.0"
+    string.prototype.padstart "^3.0.0"
+
+"@vue/component-compiler-utils@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.0.0.tgz#d16fa26b836c06df5baaeb45f3d80afc47e35634"
+  integrity sha512-am+04/0UX7ektcmvhYmrf84BDVAD8afFOf4asZjN84q8xzxFclbk5x0MtxuKGfp+zjN5WWPJn3fjFAWtDdIGSw==
+  dependencies:
+    consolidate "^0.15.1"
+    hash-sum "^1.0.2"
+    lru-cache "^4.1.2"
+    merge-source-map "^1.1.0"
+    postcss "^7.0.14"
+    postcss-selector-parser "^5.0.0"
+    prettier "1.16.3"
+    source-map "~0.6.1"
+    vue-template-es2015-compiler "^1.9.0"
+
+"@vue/eslint-config-standard@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@vue/eslint-config-standard/-/eslint-config-standard-4.0.0.tgz#6be447ee674e3b0f733c584098fd9a22e6d76fcd"
+  integrity sha512-bQghq1cw1BuMRHNhr3tRpAJx1tpGy0QtajQX873kLtA9YVuOIoXR7nAWnTN09bBHnSUh2N288vMsqPi2fI4Hzg==
+  dependencies:
+    eslint-config-standard "^12.0.0"
+    eslint-plugin-import "^2.14.0"
+    eslint-plugin-node "^8.0.0"
+    eslint-plugin-promise "^4.0.1"
+    eslint-plugin-standard "^4.0.0"
+
+"@vue/preload-webpack-plugin@^1.1.0":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.1.tgz#18723530d304f443021da2292d6ec9502826104a"
+  integrity sha512-8VCoJeeH8tCkzhkpfOkt+abALQkS11OIHhte5MBzYaKMTqK0A3ZAKEUVAffsOklhEv7t0yrQt696Opnu9oAx+w==
+
+"@vue/test-utils@^1.0.0-beta.20":
+  version "1.0.0-beta.29"
+  resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.0.0-beta.29.tgz#c942cf25e891cf081b6a03332b4ae1ef430726f0"
+  integrity sha512-yX4sxEIHh4M9yAbLA/ikpEnGKMNBCnoX98xE1RwxfhQVcn0MaXNSj1Qmac+ZydTj6VBSEVukchBogXBTwc+9iA==
+  dependencies:
+    dom-event-types "^1.0.0"
+    lodash "^4.17.4"
+
+"@vue/web-component-wrapper@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz#bb0e46f1585a7e289b4ee6067dcc5a6ae62f1dd1"
+  integrity sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw==
+
+"@webassemblyjs/ast@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359"
+  integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==
+  dependencies:
+    "@webassemblyjs/helper-module-context" "1.8.5"
+    "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+    "@webassemblyjs/wast-parser" "1.8.5"
+
+"@webassemblyjs/floating-point-hex-parser@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721"
+  integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==
+
+"@webassemblyjs/helper-api-error@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7"
+  integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==
+
+"@webassemblyjs/helper-buffer@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204"
+  integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==
+
+"@webassemblyjs/helper-code-frame@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e"
+  integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==
+  dependencies:
+    "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/helper-fsm@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452"
+  integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==
+
+"@webassemblyjs/helper-module-context@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245"
+  integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    mamacro "^0.0.3"
+
+"@webassemblyjs/helper-wasm-bytecode@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61"
+  integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==
+
+"@webassemblyjs/helper-wasm-section@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf"
+  integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/helper-buffer" "1.8.5"
+    "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+    "@webassemblyjs/wasm-gen" "1.8.5"
+
+"@webassemblyjs/ieee754@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e"
+  integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==
+  dependencies:
+    "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10"
+  integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==
+  dependencies:
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc"
+  integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==
+
+"@webassemblyjs/wasm-edit@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a"
+  integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/helper-buffer" "1.8.5"
+    "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+    "@webassemblyjs/helper-wasm-section" "1.8.5"
+    "@webassemblyjs/wasm-gen" "1.8.5"
+    "@webassemblyjs/wasm-opt" "1.8.5"
+    "@webassemblyjs/wasm-parser" "1.8.5"
+    "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/wasm-gen@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc"
+  integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+    "@webassemblyjs/ieee754" "1.8.5"
+    "@webassemblyjs/leb128" "1.8.5"
+    "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wasm-opt@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264"
+  integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/helper-buffer" "1.8.5"
+    "@webassemblyjs/wasm-gen" "1.8.5"
+    "@webassemblyjs/wasm-parser" "1.8.5"
+
+"@webassemblyjs/wasm-parser@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d"
+  integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/helper-api-error" "1.8.5"
+    "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+    "@webassemblyjs/ieee754" "1.8.5"
+    "@webassemblyjs/leb128" "1.8.5"
+    "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wast-parser@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c"
+  integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/floating-point-hex-parser" "1.8.5"
+    "@webassemblyjs/helper-api-error" "1.8.5"
+    "@webassemblyjs/helper-code-frame" "1.8.5"
+    "@webassemblyjs/helper-fsm" "1.8.5"
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc"
+  integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/wast-parser" "1.8.5"
+    "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+  integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+  integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+abab@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.2.tgz#a2fba1b122c69a85caa02d10f9270c7219709a9d"
+  integrity sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg==
+
+abbrev@1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+  integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+abs-svg-path@~0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf"
+  integrity sha1-32Acjo0roQ1KdtYl4japo5wnI78=
+
+accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
+  version "1.3.7"
+  resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+  integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+  dependencies:
+    mime-types "~2.1.24"
+    negotiator "0.6.2"
+
+acorn-globals@^4.1.0:
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7"
+  integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==
+  dependencies:
+    acorn "^6.0.1"
+    acorn-walk "^6.0.1"
+
+acorn-jsx@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+  integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=
+  dependencies:
+    acorn "^3.0.4"
+
+acorn-jsx@^5.0.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384"
+  integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==
+
+acorn-walk@^6.0.1, acorn-walk@^6.1.1:
+  version "6.2.0"
+  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
+  integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
+
+acorn@^3.0.4:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+  integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
+
+acorn@^5.5.0, acorn@^5.5.3:
+  version "5.7.3"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
+  integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
+
+acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.7, acorn@^6.1.1, acorn@^6.2.1:
+  version "6.3.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e"
+  integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==
+
+add-dom-event-listener@^1.0.2:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz#6a92db3a0dd0abc254e095c0f1dc14acbbaae310"
+  integrity sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==
+  dependencies:
+    object-assign "4.x"
+
+address@^1.0.3:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
+  integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==
+
+ajv-errors@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+  integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
+  integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=
+
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
+  version "3.4.1"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
+  integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
+
+ajv@^5.2.3, ajv@^5.3.0:
+  version "5.5.2"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
+  integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=
+  dependencies:
+    co "^4.6.0"
+    fast-deep-equal "^1.0.0"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.3.0"
+
+ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1:
+  version "6.10.2"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
+  integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
+  dependencies:
+    fast-deep-equal "^2.0.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
+align-text@^0.1.1, align-text@^0.1.3:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+  integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
+  dependencies:
+    kind-of "^3.0.2"
+    longest "^1.0.1"
+    repeat-string "^1.5.2"
+
+alphanum-sort@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+  integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
+
+amdefine@>=0.0.4:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+  integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
+
+ansi-colors@^3.0.0:
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
+  integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
+
+ansi-escapes@^1.1.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+  integrity sha1-06ioOzGapneTZisT52HHkRQiMG4=
+
+ansi-escapes@^3.0.0, ansi-escapes@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+  integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
+ansi-html@0.0.7:
+  version "0.0.7"
+  resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
+  integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4=
+
+ansi-regex@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+  integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+  integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+  integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-styles@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+  integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+  dependencies:
+    color-convert "^1.9.0"
+
+ant-design-vue@~1.3.9:
+  version "1.3.17"
+  resolved "https://registry.yarnpkg.com/ant-design-vue/-/ant-design-vue-1.3.17.tgz#4c420fd53f5a5bc255e01c16aaf34744f143026b"
+  integrity sha512-Yb19yCXmO/+lcJvZaiQs/J87xXZuweDEZkuKGACiW4UhcR8gP1d3q6wZGOekhys4ryqJvvuVZBQdbuxpH0btAw==
+  dependencies:
+    "@ant-design/icons" "^2.1.1"
+    "@ant-design/icons-vue" "^2.0.0"
+    add-dom-event-listener "^1.0.2"
+    array-tree-filter "^2.1.0"
+    async-validator "^3.0.3"
+    babel-helper-vue-jsx-merge-props "^2.0.3"
+    babel-runtime "6.x"
+    classnames "^2.2.5"
+    component-classes "^1.2.6"
+    dom-align "^1.7.0"
+    dom-closest "^0.2.0"
+    dom-scroll-into-view "^1.2.1"
+    enquire.js "^2.1.6"
+    intersperse "^1.0.0"
+    is-negative-zero "^2.0.0"
+    ismobilejs "^0.5.1"
+    json2mq "^0.2.0"
+    lodash "^4.17.5"
+    moment "^2.21.0"
+    mutationobserver-shim "^0.3.2"
+    node-emoji "^1.10.0"
+    omit.js "^1.0.0"
+    raf "^3.4.0"
+    resize-observer-polyfill "^1.5.1"
+    shallow-equal "^1.0.0"
+    shallowequal "^1.0.2"
+    vue-ref "^1.0.4"
+    warning "^3.0.0"
+
+any-promise@^1.0.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+  integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
+
+anymatch@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+  integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+  dependencies:
+    micromatch "^3.1.4"
+    normalize-path "^2.1.1"
+
+append-transform@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991"
+  integrity sha1-126/jKlNJ24keja61EpLdKthGZE=
+  dependencies:
+    default-require-extensions "^1.0.0"
+
+aproba@^1.0.3, aproba@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+  integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+arch@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e"
+  integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==
+
+are-we-there-yet@~1.1.2:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+  integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+  dependencies:
+    delegates "^1.0.0"
+    readable-stream "^2.0.6"
+
+argparse@^1.0.7:
+  version "1.0.10"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+  dependencies:
+    sprintf-js "~1.0.2"
+
+arr-diff@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+  integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
+  dependencies:
+    arr-flatten "^1.0.1"
+
+arr-diff@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+  integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.0.1, arr-flatten@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+  integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+  integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-equal@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+  integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=
+
+array-flatten@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+  integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
+
+array-flatten@^2.1.0:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
+  integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
+
+array-includes@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
+  integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=
+  dependencies:
+    define-properties "^1.1.2"
+    es-abstract "^1.7.0"
+
+array-tree-filter@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190"
+  integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==
+
+array-union@^1.0.1, array-union@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+  integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+  dependencies:
+    array-uniq "^1.0.1"
+
+array-uniq@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+  integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
+array-unique@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+  integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+
+array-unique@^0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+  integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+arrify@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+  integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asap@~2.0.3:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+  integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
+
+asn1.js@^4.0.0:
+  version "4.10.1"
+  resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
+  integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
+  dependencies:
+    bn.js "^4.0.0"
+    inherits "^2.0.1"
+    minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+  version "0.2.4"
+  resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+  integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+  dependencies:
+    safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+  integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert@^1.1.1:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+  integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+  dependencies:
+    object-assign "^4.1.1"
+    util "0.10.3"
+
+assign-symbols@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+  integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+astral-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+  integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+async-each@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+  integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+async-limiter@~1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+  integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+
+async-validator@^3.0.3:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-3.2.0.tgz#fcbd644e7b5b7c9304d29a4752c3f06214ef0d56"
+  integrity sha512-QBuW7Qrg8wbh7Wtqw1QdN162GUmXDs9gayxFaXcCOf3bCqHJ/TQep0H4I63iVk7Q3kIGWU4wbAr/C0Uj64JiMw==
+
+async@^2.1.4, async@^2.6.2:
+  version "2.6.3"
+  resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
+  integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
+  dependencies:
+    lodash "^4.17.14"
+
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+atob@^2.1.1:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+  integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+autoprefixer@^9.5.1:
+  version "9.7.0"
+  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.0.tgz#905ec19e50f04545fe9ff131182cc9ab25246901"
+  integrity sha512-j2IRvaCfrUxIiZun9ba4mhJ2omhw4OY88/yVzLO+lHhGBumAAK72PgM6gkbSN8iregPOn1ZlxGkmZh2CQ7X4AQ==
+  dependencies:
+    browserslist "^4.7.2"
+    caniuse-lite "^1.0.30001004"
+    chalk "^2.4.2"
+    normalize-range "^0.1.2"
+    num2fraction "^1.2.2"
+    postcss "^7.0.19"
+    postcss-value-parser "^4.0.2"
+
+aws-sign2@~0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+  integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+
+aws4@^1.8.0:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
+  integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
+
+axios@^0.19.0:
+  version "0.19.0"
+  resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8"
+  integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==
+  dependencies:
+    follow-redirects "1.5.10"
+    is-buffer "^2.0.2"
+
+babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+  integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+  dependencies:
+    chalk "^1.1.3"
+    esutils "^2.0.2"
+    js-tokens "^3.0.2"
+
+babel-core@7.0.0-bridge.0:
+  version "7.0.0-bridge.0"
+  resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
+  integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==
+
+babel-core@^6.0.0, babel-core@^6.26.0:
+  version "6.26.3"
+  resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
+  integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==
+  dependencies:
+    babel-code-frame "^6.26.0"
+    babel-generator "^6.26.0"
+    babel-helpers "^6.24.1"
+    babel-messages "^6.23.0"
+    babel-register "^6.26.0"
+    babel-runtime "^6.26.0"
+    babel-template "^6.26.0"
+    babel-traverse "^6.26.0"
+    babel-types "^6.26.0"
+    babylon "^6.18.0"
+    convert-source-map "^1.5.1"
+    debug "^2.6.9"
+    json5 "^0.5.1"
+    lodash "^4.17.4"
+    minimatch "^3.0.4"
+    path-is-absolute "^1.0.1"
+    private "^0.1.8"
+    slash "^1.0.0"
+    source-map "^0.5.7"
+
+babel-eslint@^10.0.1:
+  version "10.0.3"
+  resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a"
+  integrity sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    "@babel/parser" "^7.0.0"
+    "@babel/traverse" "^7.0.0"
+    "@babel/types" "^7.0.0"
+    eslint-visitor-keys "^1.0.0"
+    resolve "^1.12.0"
+
+babel-generator@^6.18.0, babel-generator@^6.26.0:
+  version "6.26.1"
+  resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
+  integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==
+  dependencies:
+    babel-messages "^6.23.0"
+    babel-runtime "^6.26.0"
+    babel-types "^6.26.0"
+    detect-indent "^4.0.0"
+    jsesc "^1.3.0"
+    lodash "^4.17.4"
+    source-map "^0.5.7"
+    trim-right "^1.0.1"
+
+babel-helper-vue-jsx-merge-props@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6"
+  integrity sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==
+
+babel-helpers@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
+  integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=
+  dependencies:
+    babel-runtime "^6.22.0"
+    babel-template "^6.24.1"
+
+babel-jest@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1"
+  integrity sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==
+  dependencies:
+    babel-plugin-istanbul "^4.1.6"
+    babel-preset-jest "^23.2.0"
+
+babel-loader@^8.0.0-beta.0, babel-loader@^8.0.5:
+  version "8.0.6"
+  resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb"
+  integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==
+  dependencies:
+    find-cache-dir "^2.0.0"
+    loader-utils "^1.0.2"
+    mkdirp "^0.5.1"
+    pify "^4.0.1"
+
+babel-messages@^6.23.0:
+  version "6.23.0"
+  resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+  integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
+  dependencies:
+    babel-runtime "^6.22.0"
+
+babel-plugin-dynamic-import-node@^2.2.0, babel-plugin-dynamic-import-node@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f"
+  integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==
+  dependencies:
+    object.assign "^4.1.0"
+
+babel-plugin-import@^1.11.0:
+  version "1.12.2"
+  resolved "https://registry.yarnpkg.com/babel-plugin-import/-/babel-plugin-import-1.12.2.tgz#bb8e11dabae68fbff4484c8e2bc2db1e086286a8"
+  integrity sha512-Vz9s+I6vAnsY8sYczU/cdtkKAHSorapa/2St6K+OzowplKizpWxul4HLi3kj1eRmHMFjhbROSMGXP+mFna2nUw==
+  dependencies:
+    "@babel/helper-module-imports" "^7.0.0"
+    "@babel/runtime" "^7.0.0"
+
+babel-plugin-istanbul@^4.1.6:
+  version "4.1.6"
+  resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45"
+  integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==
+  dependencies:
+    babel-plugin-syntax-object-rest-spread "^6.13.0"
+    find-up "^2.1.0"
+    istanbul-lib-instrument "^1.10.1"
+    test-exclude "^4.2.1"
+
+babel-plugin-jest-hoist@^23.2.0:
+  version "23.2.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167"
+  integrity sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=
+
+babel-plugin-module-resolver@3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7"
+  integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==
+  dependencies:
+    find-babel-config "^1.1.0"
+    glob "^7.1.2"
+    pkg-up "^2.0.0"
+    reselect "^3.0.1"
+    resolve "^1.4.0"
+
+babel-plugin-syntax-object-rest-spread@^6.13.0:
+  version "6.13.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
+  integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
+
+babel-plugin-transform-es2015-modules-commonjs@^6.26.0, babel-plugin-transform-es2015-modules-commonjs@^6.26.2:
+  version "6.26.2"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
+  integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==
+  dependencies:
+    babel-plugin-transform-strict-mode "^6.24.1"
+    babel-runtime "^6.26.0"
+    babel-template "^6.26.0"
+    babel-types "^6.26.0"
+
+babel-plugin-transform-runtime@^6.23.0:
+  version "6.23.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee"
+  integrity sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=
+  dependencies:
+    babel-runtime "^6.22.0"
+
+babel-plugin-transform-strict-mode@^6.24.1:
+  version "6.24.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
+  integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=
+  dependencies:
+    babel-runtime "^6.22.0"
+    babel-types "^6.24.1"
+
+babel-polyfill@6.23.0:
+  version "6.23.0"
+  resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d"
+  integrity sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=
+  dependencies:
+    babel-runtime "^6.22.0"
+    core-js "^2.4.0"
+    regenerator-runtime "^0.10.0"
+
+babel-preset-jest@^23.2.0:
+  version "23.2.0"
+  resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46"
+  integrity sha1-jsegOhOPABoaj7HoETZSvxpV2kY=
+  dependencies:
+    babel-plugin-jest-hoist "^23.2.0"
+    babel-plugin-syntax-object-rest-spread "^6.13.0"
+
+babel-register@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
+  integrity sha1-btAhFz4vy0htestFxgCahW9kcHE=
+  dependencies:
+    babel-core "^6.26.0"
+    babel-runtime "^6.26.0"
+    core-js "^2.5.0"
+    home-or-tmp "^2.0.0"
+    lodash "^4.17.4"
+    mkdirp "^0.5.1"
+    source-map-support "^0.4.15"
+
+babel-runtime@6.x, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+  integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
+  dependencies:
+    core-js "^2.4.0"
+    regenerator-runtime "^0.11.0"
+
+babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
+  integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=
+  dependencies:
+    babel-runtime "^6.26.0"
+    babel-traverse "^6.26.0"
+    babel-types "^6.26.0"
+    babylon "^6.18.0"
+    lodash "^4.17.4"
+
+babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+  integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
+  dependencies:
+    babel-code-frame "^6.26.0"
+    babel-messages "^6.23.0"
+    babel-runtime "^6.26.0"
+    babel-types "^6.26.0"
+    babylon "^6.18.0"
+    debug "^2.6.8"
+    globals "^9.18.0"
+    invariant "^2.2.2"
+    lodash "^4.17.4"
+
+babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+  integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
+  dependencies:
+    babel-runtime "^6.26.0"
+    esutils "^2.0.2"
+    lodash "^4.17.4"
+    to-fast-properties "^1.0.3"
+
+babylon@^6.18.0:
+  version "6.18.0"
+  resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+  integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
+
+balanced-match@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+  integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base64-js@^1.0.2:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
+  integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
+
+base@^0.11.1:
+  version "0.11.2"
+  resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+  integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+  dependencies:
+    cache-base "^1.0.1"
+    class-utils "^0.3.5"
+    component-emitter "^1.2.1"
+    define-property "^1.0.0"
+    isobject "^3.0.1"
+    mixin-deep "^1.2.0"
+    pascalcase "^0.1.1"
+
+batch@0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
+  integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
+
+bcrypt-pbkdf@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+  integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+  dependencies:
+    tweetnacl "^0.14.3"
+
+bfj@^6.1.1:
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f"
+  integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==
+  dependencies:
+    bluebird "^3.5.5"
+    check-types "^8.0.3"
+    hoopy "^0.1.4"
+    tryer "^1.0.1"
+
+big.js@^3.1.3:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
+  integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==
+
+big.js@^5.2.2:
+  version "5.2.2"
+  resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+  integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^1.0.0:
+  version "1.13.1"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+  integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.5:
+  version "3.7.1"
+  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de"
+  integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+  version "4.11.8"
+  resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+  integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
+
+body-parser@1.19.0:
+  version "1.19.0"
+  resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
+  integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
+  dependencies:
+    bytes "3.1.0"
+    content-type "~1.0.4"
+    debug "2.6.9"
+    depd "~1.1.2"
+    http-errors "1.7.2"
+    iconv-lite "0.4.24"
+    on-finished "~2.3.0"
+    qs "6.7.0"
+    raw-body "2.4.0"
+    type-is "~1.6.17"
+
+bonjour@^3.5.0:
+  version "3.5.0"
+  resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
+  integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU=
+  dependencies:
+    array-flatten "^2.1.0"
+    deep-equal "^1.0.1"
+    dns-equal "^1.0.0"
+    dns-txt "^2.0.2"
+    multicast-dns "^6.0.1"
+    multicast-dns-service-types "^1.1.0"
+
+boolbase@^1.0.0, boolbase@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+  integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
+
+brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  dependencies:
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
+
+braces@^1.8.2:
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+  integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
+  dependencies:
+    expand-range "^1.8.1"
+    preserve "^0.2.0"
+    repeat-element "^1.1.2"
+
+braces@^2.3.1, braces@^2.3.2:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+  integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+  dependencies:
+    arr-flatten "^1.1.0"
+    array-unique "^0.3.2"
+    extend-shallow "^2.0.1"
+    fill-range "^4.0.0"
+    isobject "^3.0.1"
+    repeat-element "^1.1.2"
+    snapdragon "^0.8.1"
+    snapdragon-node "^2.0.1"
+    split-string "^3.0.2"
+    to-regex "^3.0.1"
+
+brorand@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+  integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browser-process-hrtime@^0.1.2:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4"
+  integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==
+
+browser-resolve@^1.11.3:
+  version "1.11.3"
+  resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
+  integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
+  dependencies:
+    resolve "1.1.7"
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+  integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+  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"
+
+browserify-cipher@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+  integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+  dependencies:
+    browserify-aes "^1.0.4"
+    browserify-des "^1.0.0"
+    evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+  integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+  dependencies:
+    cipher-base "^1.0.1"
+    des.js "^1.0.0"
+    inherits "^2.0.1"
+    safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+  integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+  dependencies:
+    bn.js "^4.1.0"
+    randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+  integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
+  dependencies:
+    bn.js "^4.1.1"
+    browserify-rsa "^4.0.0"
+    create-hash "^1.1.0"
+    create-hmac "^1.1.2"
+    elliptic "^6.0.0"
+    inherits "^2.0.1"
+    parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+  integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+  dependencies:
+    pako "~1.0.5"
+
+browserslist@^4.0.0, browserslist@^4.3.4, browserslist@^4.5.4, browserslist@^4.6.0, browserslist@^4.7.2:
+  version "4.7.2"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.2.tgz#1bb984531a476b5d389cedecb195b2cd69fb1348"
+  integrity sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw==
+  dependencies:
+    caniuse-lite "^1.0.30001004"
+    electron-to-chromium "^1.3.295"
+    node-releases "^1.1.38"
+
+bser@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+  integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+  dependencies:
+    node-int64 "^0.4.0"
+
+buffer-from@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+  integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-indexof@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
+  integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
+
+buffer-xor@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+  integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+  version "4.9.1"
+  resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+  integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
+  dependencies:
+    base64-js "^1.0.2"
+    ieee754 "^1.1.4"
+    isarray "^1.0.0"
+
+builtin-status-codes@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+  integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+bytes@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+  integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
+
+bytes@3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
+  integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+
+cacache@^10.0.4:
+  version "10.0.4"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460"
+  integrity sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==
+  dependencies:
+    bluebird "^3.5.1"
+    chownr "^1.0.1"
+    glob "^7.1.2"
+    graceful-fs "^4.1.11"
+    lru-cache "^4.1.1"
+    mississippi "^2.0.0"
+    mkdirp "^0.5.1"
+    move-concurrently "^1.0.1"
+    promise-inflight "^1.0.1"
+    rimraf "^2.6.2"
+    ssri "^5.2.4"
+    unique-filename "^1.1.0"
+    y18n "^4.0.0"
+
+cacache@^12.0.2:
+  version "12.0.3"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390"
+  integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==
+  dependencies:
+    bluebird "^3.5.5"
+    chownr "^1.1.1"
+    figgy-pudding "^3.5.1"
+    glob "^7.1.4"
+    graceful-fs "^4.1.15"
+    infer-owner "^1.0.3"
+    lru-cache "^5.1.1"
+    mississippi "^3.0.0"
+    mkdirp "^0.5.1"
+    move-concurrently "^1.0.1"
+    promise-inflight "^1.0.1"
+    rimraf "^2.6.3"
+    ssri "^6.0.1"
+    unique-filename "^1.1.1"
+    y18n "^4.0.0"
+
+cache-base@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+  integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+  dependencies:
+    collection-visit "^1.0.0"
+    component-emitter "^1.2.1"
+    get-value "^2.0.6"
+    has-value "^1.0.0"
+    isobject "^3.0.1"
+    set-value "^2.0.0"
+    to-object-path "^0.3.0"
+    union-value "^1.0.0"
+    unset-value "^1.0.0"
+
+cache-loader@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-2.0.1.tgz#5758f41a62d7c23941e3c3c7016e6faeb03acb07"
+  integrity sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ==
+  dependencies:
+    loader-utils "^1.1.0"
+    mkdirp "^0.5.1"
+    neo-async "^2.6.0"
+    normalize-path "^3.0.0"
+    schema-utils "^1.0.0"
+
+call-me-maybe@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
+  integrity sha1-JtII6onje1y95gJQoV8DHBak1ms=
+
+caller-callsite@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+  integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+  dependencies:
+    callsites "^2.0.0"
+
+caller-path@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+  integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
+  dependencies:
+    callsites "^0.2.0"
+
+caller-path@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+  integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+  dependencies:
+    caller-callsite "^2.0.0"
+
+callsites@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+  integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
+
+callsites@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+  integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+callsites@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camel-case@3.0.x:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
+  integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=
+  dependencies:
+    no-case "^2.2.0"
+    upper-case "^1.1.1"
+
+camelcase@^1.0.2:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+  integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
+
+camelcase@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+  integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
+
+camelcase@^5.0.0:
+  version "5.3.1"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+  integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+caniuse-api@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
+  integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
+  dependencies:
+    browserslist "^4.0.0"
+    caniuse-lite "^1.0.0"
+    lodash.memoize "^4.1.2"
+    lodash.uniq "^4.5.0"
+
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001004:
+  version "1.0.30001005"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001005.tgz#823054210be638c725521edcb869435dae46728d"
+  integrity sha512-g78miZm1Z5njjYR216a5812oPiLgV1ssndgGxITHWUopmjUrCswMisA0a2kSB7a0vZRox6JOKhM51+efmYN8Mg==
+
+capture-exit@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f"
+  integrity sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=
+  dependencies:
+    rsvp "^3.3.3"
+
+case-sensitive-paths-webpack-plugin@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz#3371ef6365ef9c25fa4b81c16ace0e9c7dc58c3e"
+  integrity sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g==
+
+caseless@~0.12.0:
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+  integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+center-align@^0.1.1:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+  integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
+  dependencies:
+    align-text "^0.1.3"
+    lazy-cache "^1.0.3"
+
+chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+  integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+  dependencies:
+    ansi-styles "^2.2.1"
+    escape-string-regexp "^1.0.2"
+    has-ansi "^2.0.0"
+    strip-ansi "^3.0.0"
+    supports-color "^2.0.0"
+
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+  dependencies:
+    ansi-styles "^3.2.1"
+    escape-string-regexp "^1.0.5"
+    supports-color "^5.3.0"
+
+chardet@^0.4.0:
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+  integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
+
+chardet@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+  integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
+charenc@~0.0.1:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
+  integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=
+
+check-types@^8.0.3:
+  version "8.0.3"
+  resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552"
+  integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==
+
+chokidar@^2.0.2, chokidar@^2.1.8:
+  version "2.1.8"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+  integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+  dependencies:
+    anymatch "^2.0.0"
+    async-each "^1.0.1"
+    braces "^2.3.2"
+    glob-parent "^3.1.0"
+    inherits "^2.0.3"
+    is-binary-path "^1.0.0"
+    is-glob "^4.0.0"
+    normalize-path "^3.0.0"
+    path-is-absolute "^1.0.0"
+    readdirp "^2.2.1"
+    upath "^1.1.1"
+  optionalDependencies:
+    fsevents "^1.2.7"
+
+chownr@^1.0.1, chownr@^1.1.1:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142"
+  integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==
+
+chrome-trace-event@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
+  integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
+  dependencies:
+    tslib "^1.9.0"
+
+ci-info@^1.5.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497"
+  integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+  integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+  dependencies:
+    inherits "^2.0.1"
+    safe-buffer "^5.0.1"
+
+circular-json@^0.3.1:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
+  integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
+
+class-utils@^0.3.5:
+  version "0.3.6"
+  resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+  integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+  dependencies:
+    arr-union "^3.1.0"
+    define-property "^0.2.5"
+    isobject "^3.0.0"
+    static-extend "^0.1.1"
+
+classnames@^2.2.5:
+  version "2.2.6"
+  resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
+  integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
+
+clean-css@4.2.x:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17"
+  integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==
+  dependencies:
+    source-map "~0.6.0"
+
+cli-cursor@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+  integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+  dependencies:
+    restore-cursor "^2.0.0"
+
+cli-highlight@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.1.tgz#2180223d51618b112f4509cf96e4a6c750b07e97"
+  integrity sha512-0y0VlNmdD99GXZHYnvrQcmHxP8Bi6T00qucGgBgGv4kJ0RyDthNnnFPupHV7PYv/OXSVk+azFbOeaW6+vGmx9A==
+  dependencies:
+    chalk "^2.3.0"
+    highlight.js "^9.6.0"
+    mz "^2.4.0"
+    parse5 "^4.0.0"
+    yargs "^13.0.0"
+
+cli-spinners@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77"
+  integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==
+
+cli-width@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+  integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
+
+clipboard@^2.0.0:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d"
+  integrity sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==
+  dependencies:
+    good-listener "^1.2.2"
+    select "^1.1.2"
+    tiny-emitter "^2.0.0"
+
+clipboardy@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.1.0.tgz#0123a0c8fac92f256dc56335e0bb8be97a4909a5"
+  integrity sha512-2pzOUxWcLlXWtn+Jd6js3o12TysNOOVes/aQfg+MT/35vrxWzedHlLwyoJpXjsFKWm95BTNEcMGD9+a7mKzZkQ==
+  dependencies:
+    arch "^2.1.1"
+    execa "^1.0.0"
+
+cliui@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+  integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
+  dependencies:
+    center-align "^0.1.1"
+    right-align "^0.1.1"
+    wordwrap "0.0.2"
+
+cliui@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
+  integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==
+  dependencies:
+    string-width "^2.1.1"
+    strip-ansi "^4.0.0"
+    wrap-ansi "^2.0.0"
+
+cliui@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+  integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+  dependencies:
+    string-width "^3.1.0"
+    strip-ansi "^5.2.0"
+    wrap-ansi "^5.1.0"
+
+clone@2.x, clone@^2.1.1, clone@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
+  integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
+
+clone@^1.0.2:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+  integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
+
+co@^4.6.0:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+  integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+coa@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
+  integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==
+  dependencies:
+    "@types/q" "^1.5.1"
+    chalk "^2.4.1"
+    q "^1.1.2"
+
+code-point-at@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+  integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collection-visit@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+  integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+  dependencies:
+    map-visit "^1.0.0"
+    object-visit "^1.0.0"
+
+color-convert@^1.9.0, color-convert@^1.9.1:
+  version "1.9.3"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+  integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+  dependencies:
+    color-name "1.1.3"
+
+color-name@1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+  integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@^1.0.0:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-string@^1.5.2:
+  version "1.5.3"
+  resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
+  integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==
+  dependencies:
+    color-name "^1.0.0"
+    simple-swizzle "^0.2.2"
+
+color@^3.0.0:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10"
+  integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==
+  dependencies:
+    color-convert "^1.9.1"
+    color-string "^1.5.2"
+
+combined-stream@^1.0.6, combined-stream@~1.0.6:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+  dependencies:
+    delayed-stream "~1.0.0"
+
+commander@*:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e"
+  integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==
+
+commander@2, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@~2.20.3:
+  version "2.20.3"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@2.17.x:
+  version "2.17.1"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
+  integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
+
+commander@~2.19.0:
+  version "2.19.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
+  integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
+
+commondir@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+  integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+component-classes@^1.2.6:
+  version "1.2.6"
+  resolved "https://registry.yarnpkg.com/component-classes/-/component-classes-1.2.6.tgz#c642394c3618a4d8b0b8919efccbbd930e5cd691"
+  integrity sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE=
+  dependencies:
+    component-indexof "0.0.3"
+
+component-emitter@^1.2.1:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+  integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+component-indexof@0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/component-indexof/-/component-indexof-0.0.3.tgz#11d091312239eb8f32c8f25ae9cb002ffe8d3c24"
+  integrity sha1-EdCRMSI5648yyPJa6csAL/6NPCQ=
+
+compressible@~2.0.16:
+  version "2.0.17"
+  resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1"
+  integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==
+  dependencies:
+    mime-db ">= 1.40.0 < 2"
+
+compression@^1.7.4:
+  version "1.7.4"
+  resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
+  integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+  dependencies:
+    accepts "~1.3.5"
+    bytes "3.0.0"
+    compressible "~2.0.16"
+    debug "2.6.9"
+    on-headers "~1.0.2"
+    safe-buffer "5.1.2"
+    vary "~1.1.2"
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.5.0, concat-stream@^1.6.0:
+  version "1.6.2"
+  resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+  integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+  dependencies:
+    buffer-from "^1.0.0"
+    inherits "^2.0.3"
+    readable-stream "^2.2.2"
+    typedarray "^0.0.6"
+
+condense-newlines@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/condense-newlines/-/condense-newlines-0.2.1.tgz#3de985553139475d32502c83b02f60684d24c55f"
+  integrity sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-whitespace "^0.3.0"
+    kind-of "^3.0.2"
+
+config-chain@^1.1.12:
+  version "1.1.12"
+  resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa"
+  integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==
+  dependencies:
+    ini "^1.3.4"
+    proto-list "~1.2.1"
+
+connect-history-api-fallback@^1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
+  integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
+
+console-browserify@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+  integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
+  dependencies:
+    date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+  integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+consolidate@^0.15.1:
+  version "0.15.1"
+  resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7"
+  integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==
+  dependencies:
+    bluebird "^3.1.1"
+
+constants-browserify@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+  integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+contains-path@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+  integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+
+content-disposition@0.5.3:
+  version "0.5.3"
+  resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
+  integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
+  dependencies:
+    safe-buffer "5.1.2"
+
+content-type@~1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+  integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+contour_plot@^0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/contour_plot/-/contour_plot-0.0.1.tgz#475870f032b8e338412aa5fc507880f0bf495c77"
+  integrity sha1-R1hw8DK44zhBKqX8UHiA8L9JXHc=
+
+convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
+  integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
+  dependencies:
+    safe-buffer "~5.1.1"
+
+cookie-signature@1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+  integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
+
+cookie@0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
+  integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
+
+copy-concurrently@^1.0.0:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+  integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+  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"
+
+copy-descriptor@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+  integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+copy-webpack-plugin@^4.6.0:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz#e7f40dd8a68477d405dd1b7a854aae324b158bae"
+  integrity sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==
+  dependencies:
+    cacache "^10.0.4"
+    find-cache-dir "^1.0.0"
+    globby "^7.1.1"
+    is-glob "^4.0.0"
+    loader-utils "^1.1.0"
+    minimatch "^3.0.4"
+    p-limit "^1.0.0"
+    serialize-javascript "^1.4.0"
+
+core-js-compat@^3.1.1:
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.3.4.tgz#a151c6cd754edbfe6a4a2a66b9382df2ae74fbcd"
+  integrity sha512-7OK3/LPP8R3Ovasf3GilEOp+o1w0ZKJ75FMou2RDfTwIV69G5RkKCGFnqgBv/ZhR6xo9GCzlfVALyHmydbE7DA==
+  dependencies:
+    browserslist "^4.7.2"
+    semver "^6.3.0"
+
+core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5:
+  version "2.6.10"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f"
+  integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+  integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cosmiconfig@^5.0.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+  integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
+  dependencies:
+    import-fresh "^2.0.0"
+    is-directory "^0.3.1"
+    js-yaml "^3.13.1"
+    parse-json "^4.0.0"
+
+create-ecdh@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
+  integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
+  dependencies:
+    bn.js "^4.1.0"
+    elliptic "^6.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+  integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+  dependencies:
+    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@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+  version "1.1.7"
+  resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+  integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+  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"
+
+cross-spawn@^5.0.1, cross-spawn@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+  integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+  dependencies:
+    lru-cache "^4.0.1"
+    shebang-command "^1.2.0"
+    which "^1.2.9"
+
+cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+  version "6.0.5"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+  integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+  dependencies:
+    nice-try "^1.0.4"
+    path-key "^2.0.1"
+    semver "^5.5.0"
+    shebang-command "^1.2.0"
+    which "^1.2.9"
+
+cross-spawn@^7.0.0:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14"
+  integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==
+  dependencies:
+    path-key "^3.1.0"
+    shebang-command "^2.0.0"
+    which "^2.0.1"
+
+crypt@~0.0.1:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
+  integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=
+
+crypto-browserify@^3.11.0:
+  version "3.12.0"
+  resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+  integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+  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"
+
+css-color-names@0.0.4, css-color-names@^0.0.4:
+  version "0.0.4"
+  resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
+  integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
+
+css-declaration-sorter@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22"
+  integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==
+  dependencies:
+    postcss "^7.0.1"
+    timsort "^0.3.0"
+
+css-loader@^1.0.0, css-loader@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.1.tgz#6885bb5233b35ec47b006057da01cc640b6b79fe"
+  integrity sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==
+  dependencies:
+    babel-code-frame "^6.26.0"
+    css-selector-tokenizer "^0.7.0"
+    icss-utils "^2.1.0"
+    loader-utils "^1.0.2"
+    lodash "^4.17.11"
+    postcss "^6.0.23"
+    postcss-modules-extract-imports "^1.2.0"
+    postcss-modules-local-by-default "^1.2.0"
+    postcss-modules-scope "^1.1.0"
+    postcss-modules-values "^1.3.0"
+    postcss-value-parser "^3.3.0"
+    source-list-map "^2.0.0"
+
+css-select-base-adapter@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
+  integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==
+
+css-select@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+  integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
+  dependencies:
+    boolbase "~1.0.0"
+    css-what "2.1"
+    domutils "1.5.1"
+    nth-check "~1.0.1"
+
+css-select@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.2.tgz#ab4386cec9e1f668855564b17c3733b43b2a5ede"
+  integrity sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^2.1.2"
+    domutils "^1.7.0"
+    nth-check "^1.0.2"
+
+css-selector-tokenizer@^0.7.0:
+  version "0.7.1"
+  resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d"
+  integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==
+  dependencies:
+    cssesc "^0.1.0"
+    fastparse "^1.1.1"
+    regexpu-core "^1.0.0"
+
+css-tree@1.0.0-alpha.29:
+  version "1.0.0-alpha.29"
+  resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39"
+  integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==
+  dependencies:
+    mdn-data "~1.1.0"
+    source-map "^0.5.3"
+
+css-tree@1.0.0-alpha.33:
+  version "1.0.0-alpha.33"
+  resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.33.tgz#970e20e5a91f7a378ddd0fc58d0b6c8d4f3be93e"
+  integrity sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==
+  dependencies:
+    mdn-data "2.0.4"
+    source-map "^0.5.3"
+
+css-unit-converter@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996"
+  integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=
+
+css-what@2.1, css-what@^2.1.2:
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
+  integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
+
+css@^2.1.0:
+  version "2.2.4"
+  resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929"
+  integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==
+  dependencies:
+    inherits "^2.0.3"
+    source-map "^0.6.1"
+    source-map-resolve "^0.5.2"
+    urix "^0.1.0"
+
+cssesc@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
+  integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=
+
+cssesc@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703"
+  integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==
+
+cssnano-preset-default@^4.0.0, cssnano-preset-default@^4.0.7:
+  version "4.0.7"
+  resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76"
+  integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==
+  dependencies:
+    css-declaration-sorter "^4.0.1"
+    cssnano-util-raw-cache "^4.0.1"
+    postcss "^7.0.0"
+    postcss-calc "^7.0.1"
+    postcss-colormin "^4.0.3"
+    postcss-convert-values "^4.0.1"
+    postcss-discard-comments "^4.0.2"
+    postcss-discard-duplicates "^4.0.2"
+    postcss-discard-empty "^4.0.1"
+    postcss-discard-overridden "^4.0.1"
+    postcss-merge-longhand "^4.0.11"
+    postcss-merge-rules "^4.0.3"
+    postcss-minify-font-values "^4.0.2"
+    postcss-minify-gradients "^4.0.2"
+    postcss-minify-params "^4.0.2"
+    postcss-minify-selectors "^4.0.2"
+    postcss-normalize-charset "^4.0.1"
+    postcss-normalize-display-values "^4.0.2"
+    postcss-normalize-positions "^4.0.2"
+    postcss-normalize-repeat-style "^4.0.2"
+    postcss-normalize-string "^4.0.2"
+    postcss-normalize-timing-functions "^4.0.2"
+    postcss-normalize-unicode "^4.0.1"
+    postcss-normalize-url "^4.0.1"
+    postcss-normalize-whitespace "^4.0.2"
+    postcss-ordered-values "^4.1.2"
+    postcss-reduce-initial "^4.0.3"
+    postcss-reduce-transforms "^4.0.2"
+    postcss-svgo "^4.0.2"
+    postcss-unique-selectors "^4.0.1"
+
+cssnano-util-get-arguments@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f"
+  integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=
+
+cssnano-util-get-match@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d"
+  integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=
+
+cssnano-util-raw-cache@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282"
+  integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==
+  dependencies:
+    postcss "^7.0.0"
+
+cssnano-util-same-parent@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3"
+  integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==
+
+cssnano@^4.0.0, cssnano@^4.1.10:
+  version "4.1.10"
+  resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2"
+  integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==
+  dependencies:
+    cosmiconfig "^5.0.0"
+    cssnano-preset-default "^4.0.7"
+    is-resolvable "^1.0.0"
+    postcss "^7.0.0"
+
+csso@^3.5.1:
+  version "3.5.1"
+  resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b"
+  integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==
+  dependencies:
+    css-tree "1.0.0-alpha.29"
+
+cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
+  version "0.3.8"
+  resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+  integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^1.0.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1"
+  integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==
+  dependencies:
+    cssom "0.3.x"
+
+current-script-polyfill@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz#f31cf7e4f3e218b0726e738ca92a02d3488ef615"
+  integrity sha1-8xz35PPiGLBybnOMqSoC00iO9hU=
+
+cyclist@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
+  integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
+
+d3-array@1, d3-array@~1.2.0:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f"
+  integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==
+
+d3-collection@1:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e"
+  integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==
+
+d3-color@1:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.0.tgz#89c45a995ed773b13314f06460df26d60ba0ecaf"
+  integrity sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg==
+
+d3-composite-projections@~1.2.0:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/d3-composite-projections/-/d3-composite-projections-1.2.3.tgz#d4283b32fca77ab0aeab92354f7726410f94b1cc"
+  integrity sha512-RxNBoRGf3epTnQBUKeEpaXpD8BA/Ud0xRuLwWxyI7dWfuuYgJZMKw6ZsZOwfDNC0ZbMWaU0eBFlL05A2jlcsWg==
+  dependencies:
+    d3-geo "^1.11.6"
+    d3-path "^1.0.7"
+
+d3-dispatch@1:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.5.tgz#e25c10a186517cd6c82dd19ea018f07e01e39015"
+  integrity sha512-vwKx+lAqB1UuCeklr6Jh1bvC4SZgbSqbkGBLClItFBIYH4vqDJCA7qfoy14lXmJdnBOdxndAMxjCbImJYW7e6g==
+
+d3-dsv@~1.0.5:
+  version "1.0.10"
+  resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.0.10.tgz#4371c489a2a654a297aca16fcaf605a6f31a6f51"
+  integrity sha512-vqklfpxmtO2ZER3fq/B33R/BIz3A1PV0FaZRuFM8w6jLo7sUX1BZDh73fPlr0s327rzq4H6EN1q9U+eCBCSN8g==
+  dependencies:
+    commander "2"
+    iconv-lite "0.4"
+    rw "1"
+
+d3-ease@1, d3-ease@~1.0.3:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.5.tgz#8ce59276d81241b1b72042d6af2d40e76d936ffb"
+  integrity sha512-Ct1O//ly5y5lFM9YTdu+ygq7LleSgSE4oj7vUt9tPLHUi8VCV7QoizGpdWRWAwCO9LdYzIrQDg97+hGVdsSGPQ==
+
+d3-format@^1.3.0:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.1.tgz#c45f74b17c5a290c072a4ba7039dd19662cd5ce6"
+  integrity sha512-TUswGe6hfguUX1CtKxyG2nymO+1lyThbkS1ifLX0Sr+dOQtAD5gkrffpHnx+yHNKUZ0Bmg5T4AjUQwugPDrm0g==
+
+d3-geo-projection@~2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/d3-geo-projection/-/d3-geo-projection-2.1.2.tgz#7df8e1e9d046d631c6509f7e531357d4adc24aa3"
+  integrity sha1-ffjh6dBG1jHGUJ9+UxNX1K3CSqM=
+  dependencies:
+    commander "2"
+    d3-array "1"
+    d3-geo "^1.1.0"
+
+d3-geo@^1.1.0, d3-geo@^1.11.6:
+  version "1.11.6"
+  resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.11.6.tgz#134f2ef035ff75a448075fafdea92702a2e0e0cf"
+  integrity sha512-z0J8InXR9e9wcgNtmVnPTj0TU8nhYT6lD/ak9may2PdKqXIeHUr8UbFLoCtrPYNsjv6YaLvSDQVl578k6nm7GA==
+  dependencies:
+    d3-array "1"
+
+d3-geo@~1.6.4:
+  version "1.6.4"
+  resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.6.4.tgz#f20e1e461cb1845f5a8be55ab6f876542a7e3199"
+  integrity sha1-8g4eRhyxhF9ai+Vatvh2VCp+MZk=
+  dependencies:
+    d3-array "1"
+
+d3-hexjson@~1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/d3-hexjson/-/d3-hexjson-1.0.1.tgz#6a23111e8359f1e214f5d0afa379c02b2b67df0b"
+  integrity sha512-TeH4T0PSbDazMm3gHgc4ulO0PfrZpz0Uk3y5tCGz+NgC7HnX7KBdem7uAN+j9x3ZshTh7raN3V/bFhaLB2C8DA==
+  dependencies:
+    d3-array "1"
+
+d3-hierarchy@~1.1.5:
+  version "1.1.8"
+  resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz#7a6317bd3ed24e324641b6f1e76e978836b008cc"
+  integrity sha512-L+GHMSZNwTpiq4rt9GEsNcpLa4M96lXMR8M/nMG9p5hBE0jy6C+3hWtyZMenPQdwla249iJy7Nx0uKt3n+u9+w==
+
+d3-interpolate@1:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.3.2.tgz#417d3ebdeb4bc4efcc8fd4361c55e4040211fd68"
+  integrity sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w==
+  dependencies:
+    d3-color "1"
+
+d3-interpolate@~1.1.5:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6"
+  integrity sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==
+  dependencies:
+    d3-color "1"
+
+d3-path@1, d3-path@^1.0.7:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.8.tgz#4a0606a794d104513ec4a8af43525f374b278719"
+  integrity sha512-J6EfUNwcMQ+aM5YPOB8ZbgAZu6wc82f/0WFxrxwV6Ll8wBwLaHLKCqQ5Imub02JriCVVdPjgI+6P3a4EWJCxAg==
+
+d3-sankey@~0.7.1:
+  version "0.7.1"
+  resolved "https://registry.yarnpkg.com/d3-sankey/-/d3-sankey-0.7.1.tgz#d229832268fc69a7fec84803e96c2256a614c521"
+  integrity sha1-0imDImj8aaf+yEgD6WwiVqYUxSE=
+  dependencies:
+    d3-array "1"
+    d3-collection "1"
+    d3-shape "^1.2.0"
+
+d3-selection@^1.0.2, d3-selection@^1.1.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.0.tgz#ab9ac1e664cf967ebf1b479cc07e28ce9908c474"
+  integrity sha512-EYVwBxQGEjLCKF2pJ4+yrErskDnz5v403qvAid96cNdCMr8rmCYfY5RGzWz24mdIbxmDf6/4EAH+K9xperD5jg==
+
+d3-shape@^1.2.0:
+  version "1.3.5"
+  resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.5.tgz#e81aea5940f59f0a79cfccac012232a8987c6033"
+  integrity sha512-VKazVR3phgD+MUCldapHD7P9kcrvPcexeX/PkMJmkUov4JM8IxsSg1DvbYoYich9AtdTsa5nNk2++ImPiDiSxg==
+  dependencies:
+    d3-path "1"
+
+d3-timer@1, d3-timer@~1.0.6:
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.9.tgz#f7bb8c0d597d792ff7131e1c24a36dd471a471ba"
+  integrity sha512-rT34J5HnQUHhcLvhSB9GjCkN0Ddd5Y8nCwDBG2u6wQEeYxT/Lf51fTFFkldeib/sE/J0clIe0pnCfs6g/lRbyg==
+
+d3-transition@^1.0.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.2.0.tgz#f538c0e21b2aa1f05f3e965f8567e81284b3b2b8"
+  integrity sha512-VJ7cmX/FPIPJYuaL2r1o1EMHLttvoIuZhhuAlRoOxDzogV8iQS6jYulDm3xEU3TqL80IZIhI551/ebmCMrkvhw==
+  dependencies:
+    d3-color "1"
+    d3-dispatch "1"
+    d3-ease "1"
+    d3-interpolate "1"
+    d3-selection "^1.1.0"
+    d3-timer "1"
+
+d3-voronoi@~1.1.2:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.4.tgz#dd3c78d7653d2bb359284ae478645d95944c8297"
+  integrity sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==
+
+dagre@~0.8.2:
+  version "0.8.4"
+  resolved "https://registry.yarnpkg.com/dagre/-/dagre-0.8.4.tgz#26b9fb8f7bdc60c6110a0458c375261836786061"
+  integrity sha512-Dj0csFDrWYKdavwROb9FccHfTC4fJbyF/oJdL9LNZJ8WUvl968P6PAKEriGqfbdArVJEmmfA+UyumgWEwcHU6A==
+  dependencies:
+    graphlib "^2.1.7"
+    lodash "^4.17.4"
+
+dashdash@^1.12.0:
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+  integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+  dependencies:
+    assert-plus "^1.0.0"
+
+data-urls@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe"
+  integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==
+  dependencies:
+    abab "^2.0.0"
+    whatwg-mimetype "^2.2.0"
+    whatwg-url "^7.0.0"
+
+date-now@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+  integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
+
+de-indent@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
+  integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
+
+debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
+  version "2.6.9"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+  dependencies:
+    ms "2.0.0"
+
+debug@=3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+  integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+  dependencies:
+    ms "2.0.0"
+
+debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6:
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+  integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+  dependencies:
+    ms "^2.1.1"
+
+debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+  integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+  dependencies:
+    ms "^2.1.1"
+
+decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+  integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decode-uri-component@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+  integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+deep-equal@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.0.tgz#3103cdf8ab6d32cf4a8df7865458f2b8d33f3745"
+  integrity sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==
+  dependencies:
+    is-arguments "^1.0.4"
+    is-date-object "^1.0.1"
+    is-regex "^1.0.4"
+    object-is "^1.0.1"
+    object-keys "^1.1.1"
+    regexp.prototype.flags "^1.2.0"
+
+deep-equal@~1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
+  integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
+
+deep-extend@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+  integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@~0.1.3:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+  integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+deepmerge@^1.5.2:
+  version "1.5.2"
+  resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753"
+  integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==
+
+default-gateway@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
+  integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==
+  dependencies:
+    execa "^1.0.0"
+    ip-regex "^2.1.0"
+
+default-gateway@^5.0.2:
+  version "5.0.4"
+  resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-5.0.4.tgz#d10bf9ec1446b96acb977f88e62d59c7eefe5d01"
+  integrity sha512-RncYZFuHZlB69pT3aAZK/YUjOpllMc3pKm/dIxHR0AyJlhRKSFbLIQbZia1WOrNoY0F1UsqadrHW9mx/lAWAgg==
+  dependencies:
+    execa "^3.0.0"
+
+default-require-extensions@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"
+  integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=
+  dependencies:
+    strip-bom "^2.0.0"
+
+defaults@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
+  integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
+  dependencies:
+    clone "^1.0.2"
+
+define-properties@^1.1.2, define-properties@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+  integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+  dependencies:
+    object-keys "^1.0.12"
+
+define-property@^0.2.5:
+  version "0.2.5"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+  integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+  dependencies:
+    is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+  integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+  dependencies:
+    is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+  integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+  dependencies:
+    is-descriptor "^1.0.2"
+    isobject "^3.0.1"
+
+defined@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+  integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
+
+del@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
+  integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==
+  dependencies:
+    "@types/glob" "^7.1.1"
+    globby "^6.1.0"
+    is-path-cwd "^2.0.0"
+    is-path-in-cwd "^2.0.0"
+    p-map "^2.0.0"
+    pify "^4.0.1"
+    rimraf "^2.6.3"
+
+delayed-stream@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+  integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegate@^3.1.2:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
+  integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
+
+delegates@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+  integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+depd@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+  integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+des.js@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+  integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=
+  dependencies:
+    inherits "^2.0.1"
+    minimalistic-assert "^1.0.0"
+
+destroy@~1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+  integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
+
+detect-indent@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+  integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
+  dependencies:
+    repeating "^2.0.0"
+
+detect-libc@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+  integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
+detect-newline@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
+  integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
+
+detect-node@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
+  integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==
+
+diff@^3.2.0:
+  version "3.5.0"
+  resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
+  integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
+
+diffie-hellman@^5.0.0:
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+  integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+  dependencies:
+    bn.js "^4.1.0"
+    miller-rabin "^4.0.0"
+    randombytes "^2.0.0"
+
+dir-glob@^2.0.0, dir-glob@^2.2.2:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4"
+  integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==
+  dependencies:
+    path-type "^3.0.0"
+
+dns-equal@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
+  integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
+
+dns-packet@^1.3.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
+  integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==
+  dependencies:
+    ip "^1.1.0"
+    safe-buffer "^5.0.1"
+
+dns-txt@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
+  integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=
+  dependencies:
+    buffer-indexof "^1.0.0"
+
+doctrine@1.5.0:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+  integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+  dependencies:
+    esutils "^2.0.2"
+    isarray "^1.0.0"
+
+doctrine@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+  integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+  dependencies:
+    esutils "^2.0.2"
+
+doctrine@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+  integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+  dependencies:
+    esutils "^2.0.2"
+
+dom-align@^1.7.0:
+  version "1.10.2"
+  resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.10.2.tgz#540ea1c9e20462bd11b9fc28c561dc8351ece4c6"
+  integrity sha512-AYZUzLepy05E9bCY4ExoqHrrIlM49PEak9oF93JEFoibqKL0F7w5DLM70/rosLOawerWZ3MlepQcl+EmHskOyw==
+
+dom-closest@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/dom-closest/-/dom-closest-0.2.0.tgz#ebd9f91d1bf22e8d6f477876bbcd3ec90216c0cf"
+  integrity sha1-69n5HRvyLo1vR3h2u80+yQIWwM8=
+  dependencies:
+    dom-matches ">=1.0.1"
+
+dom-converter@^0.2:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+  integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+  dependencies:
+    utila "~0.4"
+
+dom-event-types@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/dom-event-types/-/dom-event-types-1.0.0.tgz#5830a0a29e1bf837fe50a70cd80a597232813cae"
+  integrity sha512-2G2Vwi2zXTHBGqXHsJ4+ak/iP0N8Ar+G8a7LiD2oup5o4sQWytwqqrZu/O6hIMV0KMID2PL69OhpshLO0n7UJQ==
+
+dom-matches@>=1.0.1:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/dom-matches/-/dom-matches-2.0.0.tgz#d2728b416a87533980eb089b848d253cf23a758c"
+  integrity sha1-0nKLQWqHUzmA6wibhI0lPPI6dYw=
+
+dom-scroll-into-view@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz#e8f36732dd089b0201a88d7815dc3f88e6d66c7e"
+  integrity sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4=
+
+dom-serializer@0:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.1.tgz#13650c850daffea35d8b626a4cfc4d3a17643fdb"
+  integrity sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==
+  dependencies:
+    domelementtype "^2.0.1"
+    entities "^2.0.0"
+
+domain-browser@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+  integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
+domelementtype@1, domelementtype@^1.3.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+  integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
+domelementtype@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d"
+  integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==
+
+domexception@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
+  integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==
+  dependencies:
+    webidl-conversions "^4.0.2"
+
+domhandler@^2.3.0:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
+  integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
+  dependencies:
+    domelementtype "1"
+
+domutils@1.5.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+  integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
+  dependencies:
+    dom-serializer "0"
+    domelementtype "1"
+
+domutils@^1.5.1, domutils@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+  integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
+  dependencies:
+    dom-serializer "0"
+    domelementtype "1"
+
+dot-prop@^4.1.1:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
+  integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==
+  dependencies:
+    is-obj "^1.0.0"
+
+dotenv-expand@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0"
+  integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==
+
+dotenv@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c"
+  integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==
+
+duplexer@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+  integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
+duplexify@^3.4.2, duplexify@^3.6.0:
+  version "3.7.1"
+  resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+  integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+  dependencies:
+    end-of-stream "^1.0.0"
+    inherits "^2.0.1"
+    readable-stream "^2.0.0"
+    stream-shift "^1.0.0"
+
+easy-stack@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788"
+  integrity sha1-EskbMIWjfwuqM26UhurEv5Tj54g=
+
+ecc-jsbn@~0.1.1:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+  integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+  dependencies:
+    jsbn "~0.1.0"
+    safer-buffer "^2.1.0"
+
+editorconfig@^0.15.3:
+  version "0.15.3"
+  resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5"
+  integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==
+  dependencies:
+    commander "^2.19.0"
+    lru-cache "^4.1.5"
+    semver "^5.6.0"
+    sigmund "^1.0.1"
+
+ee-first@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+  integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+ejs@^2.6.1:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.1.tgz#5b5ab57f718b79d4aca9254457afecd36fa80228"
+  integrity sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ==
+
+electron-to-chromium@^1.3.295:
+  version "1.3.296"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.296.tgz#a1d4322d742317945285d3ba88966561b67f3ac8"
+  integrity sha512-s5hv+TSJSVRsxH190De66YHb50pBGTweT9XGWYu/LMR20KX6TsjFzObo36CjVAzM+PUeeKSBRtm/mISlCzeojQ==
+
+elliptic@^6.0.0:
+  version "6.5.1"
+  resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b"
+  integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==
+  dependencies:
+    bn.js "^4.4.0"
+    brorand "^1.0.1"
+    hash.js "^1.0.0"
+    hmac-drbg "^1.0.0"
+    inherits "^2.0.1"
+    minimalistic-assert "^1.0.0"
+    minimalistic-crypto-utils "^1.0.0"
+
+emoji-regex@^7.0.1:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+  integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+emojis-list@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+  integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+
+encodeurl@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+  integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+encoding@^0.1.11:
+  version "0.1.12"
+  resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
+  integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
+  dependencies:
+    iconv-lite "~0.4.13"
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+  version "1.4.4"
+  resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+  integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+  dependencies:
+    once "^1.4.0"
+
+enhanced-resolve@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66"
+  integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==
+  dependencies:
+    graceful-fs "^4.1.2"
+    memory-fs "^0.5.0"
+    tapable "^1.0.0"
+
+enquire.js@^2.1.6:
+  version "2.1.6"
+  resolved "https://registry.yarnpkg.com/enquire.js/-/enquire.js-2.1.6.tgz#3e8780c9b8b835084c3f60e166dbc3c2a3c89814"
+  integrity sha1-PoeAybi4NQhMP2DhZtvDwqPImBQ=
+
+entities@^1.1.1:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
+  integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
+
+entities@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4"
+  integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==
+
+errno@^0.1.1, errno@^0.1.3, errno@~0.1.7:
+  version "0.1.7"
+  resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+  integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
+  dependencies:
+    prr "~1.0.1"
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+  dependencies:
+    is-arrayish "^0.2.1"
+
+error-stack-parser@^2.0.0:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.4.tgz#a757397dc5d9de973ac9a5d7d4e8ade7cfae9101"
+  integrity sha512-fZ0KkoxSjLFmhW5lHbUT3tLwy3nX1qEzMYo8koY1vrsAco53CMT1djnBSeC/wUjTEZRhZl9iRw7PaMaxfJ4wzQ==
+  dependencies:
+    stackframe "^1.1.0"
+
+es-abstract@^1.12.0, es-abstract@^1.4.3, es-abstract@^1.5.0, es-abstract@^1.5.1, es-abstract@^1.7.0:
+  version "1.16.0"
+  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.0.tgz#d3a26dc9c3283ac9750dca569586e976d9dcc06d"
+  integrity sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==
+  dependencies:
+    es-to-primitive "^1.2.0"
+    function-bind "^1.1.1"
+    has "^1.0.3"
+    has-symbols "^1.0.0"
+    is-callable "^1.1.4"
+    is-regex "^1.0.4"
+    object-inspect "^1.6.0"
+    object-keys "^1.1.1"
+    string.prototype.trimleft "^2.1.0"
+    string.prototype.trimright "^2.1.0"
+
+es-to-primitive@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
+  integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
+  dependencies:
+    is-callable "^1.1.4"
+    is-date-object "^1.0.1"
+    is-symbol "^1.0.2"
+
+escape-html@~1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+  integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+  integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+escodegen@^1.9.1:
+  version "1.12.0"
+  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541"
+  integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==
+  dependencies:
+    esprima "^3.1.3"
+    estraverse "^4.2.0"
+    esutils "^2.0.2"
+    optionator "^0.8.1"
+  optionalDependencies:
+    source-map "~0.6.1"
+
+eslint-config-standard@^12.0.0:
+  version "12.0.0"
+  resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz#638b4c65db0bd5a41319f96bba1f15ddad2107d9"
+  integrity sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==
+
+eslint-import-resolver-node@^0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
+  integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==
+  dependencies:
+    debug "^2.6.9"
+    resolve "^1.5.0"
+
+eslint-loader@^2.1.2:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337"
+  integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==
+  dependencies:
+    loader-fs-cache "^1.0.0"
+    loader-utils "^1.0.2"
+    object-assign "^4.0.1"
+    object-hash "^1.1.4"
+    rimraf "^2.6.1"
+
+eslint-module-utils@^2.4.0:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c"
+  integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==
+  dependencies:
+    debug "^2.6.8"
+    pkg-dir "^2.0.0"
+
+eslint-plugin-es@^1.3.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz#12acae0f4953e76ba444bfd1b2271081ac620998"
+  integrity sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==
+  dependencies:
+    eslint-utils "^1.4.2"
+    regexpp "^2.0.1"
+
+eslint-plugin-html@^5.0.0:
+  version "5.0.5"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-5.0.5.tgz#e2388f813f75b2287cde884811eab287de8e0f56"
+  integrity sha512-v/33i3OD0fuXcRXexVyXXBOe4mLBLBQoF1UO1Uy9D+XLq4MC8K45GcQKfqjC/FnHAHp3pYUjpHHktYNCtShGmg==
+  dependencies:
+    htmlparser2 "^3.10.0"
+
+eslint-plugin-import@^2.14.0:
+  version "2.18.2"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6"
+  integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==
+  dependencies:
+    array-includes "^3.0.3"
+    contains-path "^0.1.0"
+    debug "^2.6.9"
+    doctrine "1.5.0"
+    eslint-import-resolver-node "^0.3.2"
+    eslint-module-utils "^2.4.0"
+    has "^1.0.3"
+    minimatch "^3.0.4"
+    object.values "^1.1.0"
+    read-pkg-up "^2.0.0"
+    resolve "^1.11.0"
+
+eslint-plugin-node@^8.0.0:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz#55ae3560022863d141fa7a11799532340a685964"
+  integrity sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==
+  dependencies:
+    eslint-plugin-es "^1.3.1"
+    eslint-utils "^1.3.1"
+    ignore "^5.0.2"
+    minimatch "^3.0.4"
+    resolve "^1.8.1"
+    semver "^5.5.0"
+
+eslint-plugin-promise@^4.0.1:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a"
+  integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==
+
+eslint-plugin-standard@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz#ff0519f7ffaff114f76d1bd7c3996eef0f6e20b4"
+  integrity sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==
+
+eslint-plugin-vue@^4.7.1:
+  version "4.7.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz#c829b9fc62582c1897b5a0b94afd44ecca511e63"
+  integrity sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA==
+  dependencies:
+    vue-eslint-parser "^2.0.3"
+
+eslint-plugin-vue@^5.0.0:
+  version "5.2.3"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz#3ee7597d823b5478804b2feba9863b1b74273961"
+  integrity sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw==
+  dependencies:
+    vue-eslint-parser "^5.0.0"
+
+eslint-scope@^3.7.1:
+  version "3.7.3"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535"
+  integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==
+  dependencies:
+    esrecurse "^4.1.0"
+    estraverse "^4.1.1"
+
+eslint-scope@^4.0.0, eslint-scope@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+  integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+  dependencies:
+    esrecurse "^4.1.0"
+    estraverse "^4.1.1"
+
+eslint-utils@^1.3.1, eslint-utils@^1.4.2:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
+  integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
+  dependencies:
+    eslint-visitor-keys "^1.1.0"
+
+eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
+  integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
+
+eslint@^4.19.1:
+  version "4.19.1"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300"
+  integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==
+  dependencies:
+    ajv "^5.3.0"
+    babel-code-frame "^6.22.0"
+    chalk "^2.1.0"
+    concat-stream "^1.6.0"
+    cross-spawn "^5.1.0"
+    debug "^3.1.0"
+    doctrine "^2.1.0"
+    eslint-scope "^3.7.1"
+    eslint-visitor-keys "^1.0.0"
+    espree "^3.5.4"
+    esquery "^1.0.0"
+    esutils "^2.0.2"
+    file-entry-cache "^2.0.0"
+    functional-red-black-tree "^1.0.1"
+    glob "^7.1.2"
+    globals "^11.0.1"
+    ignore "^3.3.3"
+    imurmurhash "^0.1.4"
+    inquirer "^3.0.6"
+    is-resolvable "^1.0.0"
+    js-yaml "^3.9.1"
+    json-stable-stringify-without-jsonify "^1.0.1"
+    levn "^0.3.0"
+    lodash "^4.17.4"
+    minimatch "^3.0.2"
+    mkdirp "^0.5.1"
+    natural-compare "^1.4.0"
+    optionator "^0.8.2"
+    path-is-inside "^1.0.2"
+    pluralize "^7.0.0"
+    progress "^2.0.0"
+    regexpp "^1.0.1"
+    require-uncached "^1.0.3"
+    semver "^5.3.0"
+    strip-ansi "^4.0.0"
+    strip-json-comments "~2.0.1"
+    table "4.0.2"
+    text-table "~0.2.0"
+
+eslint@^5.8.0:
+  version "5.16.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea"
+  integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    ajv "^6.9.1"
+    chalk "^2.1.0"
+    cross-spawn "^6.0.5"
+    debug "^4.0.1"
+    doctrine "^3.0.0"
+    eslint-scope "^4.0.3"
+    eslint-utils "^1.3.1"
+    eslint-visitor-keys "^1.0.0"
+    espree "^5.0.1"
+    esquery "^1.0.1"
+    esutils "^2.0.2"
+    file-entry-cache "^5.0.1"
+    functional-red-black-tree "^1.0.1"
+    glob "^7.1.2"
+    globals "^11.7.0"
+    ignore "^4.0.6"
+    import-fresh "^3.0.0"
+    imurmurhash "^0.1.4"
+    inquirer "^6.2.2"
+    js-yaml "^3.13.0"
+    json-stable-stringify-without-jsonify "^1.0.1"
+    levn "^0.3.0"
+    lodash "^4.17.11"
+    minimatch "^3.0.4"
+    mkdirp "^0.5.1"
+    natural-compare "^1.4.0"
+    optionator "^0.8.2"
+    path-is-inside "^1.0.2"
+    progress "^2.0.0"
+    regexpp "^2.0.1"
+    semver "^5.5.1"
+    strip-ansi "^4.0.0"
+    strip-json-comments "^2.0.1"
+    table "^5.2.3"
+    text-table "^0.2.0"
+
+espree@^3.5.2, espree@^3.5.4:
+  version "3.5.4"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
+  integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
+  dependencies:
+    acorn "^5.5.0"
+    acorn-jsx "^3.0.0"
+
+espree@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f"
+  integrity sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==
+  dependencies:
+    acorn "^6.0.2"
+    acorn-jsx "^5.0.0"
+    eslint-visitor-keys "^1.0.0"
+
+espree@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a"
+  integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==
+  dependencies:
+    acorn "^6.0.7"
+    acorn-jsx "^5.0.0"
+    eslint-visitor-keys "^1.0.0"
+
+esprima@^3.1.3:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+  integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
+
+esprima@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.0.0, esquery@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
+  integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
+  dependencies:
+    estraverse "^4.0.0"
+
+esrecurse@^4.1.0:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+  integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+  dependencies:
+    estraverse "^4.1.0"
+
+estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+esutils@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+etag@~1.8.1:
+  version "1.8.1"
+  resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+  integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+
+event-pubsub@4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e"
+  integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==
+
+eventemitter3@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba"
+  integrity sha1-teEHm1n7XhuidxwKmTvgYKWMmbo=
+
+eventemitter3@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb"
+  integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==
+
+events@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88"
+  integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==
+
+eventsource@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0"
+  integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==
+  dependencies:
+    original "^1.0.0"
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+  integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+  dependencies:
+    md5.js "^1.3.4"
+    safe-buffer "^5.1.1"
+
+exec-sh@^0.2.0:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36"
+  integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==
+  dependencies:
+    merge "^1.2.0"
+
+execa@^0.8.0:
+  version "0.8.0"
+  resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da"
+  integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=
+  dependencies:
+    cross-spawn "^5.0.1"
+    get-stream "^3.0.0"
+    is-stream "^1.1.0"
+    npm-run-path "^2.0.0"
+    p-finally "^1.0.0"
+    signal-exit "^3.0.0"
+    strip-eof "^1.0.0"
+
+execa@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+  integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+  dependencies:
+    cross-spawn "^6.0.0"
+    get-stream "^4.0.0"
+    is-stream "^1.1.0"
+    npm-run-path "^2.0.0"
+    p-finally "^1.0.0"
+    signal-exit "^3.0.0"
+    strip-eof "^1.0.0"
+
+execa@^3.0.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/execa/-/execa-3.2.0.tgz#18326b79c7ab7fbd6610fd900c1b9e95fa48f90a"
+  integrity sha512-kJJfVbI/lZE1PZYDI5VPxp8zXPO9rtxOkhpZ0jMKha56AI9y2gGVC6bkukStQf0ka5Rh15BA5m7cCCH4jmHqkw==
+  dependencies:
+    cross-spawn "^7.0.0"
+    get-stream "^5.0.0"
+    human-signals "^1.1.1"
+    is-stream "^2.0.0"
+    merge-stream "^2.0.0"
+    npm-run-path "^4.0.0"
+    onetime "^5.1.0"
+    p-finally "^2.0.0"
+    signal-exit "^3.0.2"
+    strip-final-newline "^2.0.0"
+
+exit@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+  integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
+
+expand-brackets@^0.1.4:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+  integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
+  dependencies:
+    is-posix-bracket "^0.1.0"
+
+expand-brackets@^2.1.4:
+  version "2.1.4"
+  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+  integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+  dependencies:
+    debug "^2.3.3"
+    define-property "^0.2.5"
+    extend-shallow "^2.0.1"
+    posix-character-classes "^0.1.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+expand-range@^1.8.1:
+  version "1.8.2"
+  resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+  integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
+  dependencies:
+    fill-range "^2.1.0"
+
+expect@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98"
+  integrity sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==
+  dependencies:
+    ansi-styles "^3.2.0"
+    jest-diff "^23.6.0"
+    jest-get-type "^22.1.0"
+    jest-matcher-utils "^23.6.0"
+    jest-message-util "^23.4.0"
+    jest-regex-util "^23.3.0"
+
+express@^4.16.3, express@^4.17.1:
+  version "4.17.1"
+  resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
+  integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
+  dependencies:
+    accepts "~1.3.7"
+    array-flatten "1.1.1"
+    body-parser "1.19.0"
+    content-disposition "0.5.3"
+    content-type "~1.0.4"
+    cookie "0.4.0"
+    cookie-signature "1.0.6"
+    debug "2.6.9"
+    depd "~1.1.2"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    etag "~1.8.1"
+    finalhandler "~1.1.2"
+    fresh "0.5.2"
+    merge-descriptors "1.0.1"
+    methods "~1.1.2"
+    on-finished "~2.3.0"
+    parseurl "~1.3.3"
+    path-to-regexp "0.1.7"
+    proxy-addr "~2.0.5"
+    qs "6.7.0"
+    range-parser "~1.2.1"
+    safe-buffer "5.1.2"
+    send "0.17.1"
+    serve-static "1.14.1"
+    setprototypeof "1.1.1"
+    statuses "~1.5.0"
+    type-is "~1.6.18"
+    utils-merge "1.0.1"
+    vary "~1.1.2"
+
+extend-shallow@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+  integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+  dependencies:
+    is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+  integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+  dependencies:
+    assign-symbols "^1.0.0"
+    is-extendable "^1.0.1"
+
+extend@^3.0.2, extend@~3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+  integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+external-editor@^2.0.1, external-editor@^2.0.4:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
+  integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
+  dependencies:
+    chardet "^0.4.0"
+    iconv-lite "^0.4.17"
+    tmp "^0.0.33"
+
+external-editor@^3.0.3:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+  integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+  dependencies:
+    chardet "^0.7.0"
+    iconv-lite "^0.4.24"
+    tmp "^0.0.33"
+
+extglob@^0.3.1:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+  integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
+  dependencies:
+    is-extglob "^1.0.0"
+
+extglob@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+  integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+  dependencies:
+    array-unique "^0.3.2"
+    define-property "^1.0.0"
+    expand-brackets "^2.1.4"
+    extend-shallow "^2.0.1"
+    fragment-cache "^0.2.1"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+extract-from-css@^0.4.4:
+  version "0.4.4"
+  resolved "https://registry.yarnpkg.com/extract-from-css/-/extract-from-css-0.4.4.tgz#1ea7df2e7c7c6eb9922fa08e8adaea486f6f8f92"
+  integrity sha1-HqffLnx8brmSL6COitrqSG9vj5I=
+  dependencies:
+    css "^2.1.0"
+
+extsprintf@1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+  integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+extsprintf@^1.2.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+  integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+
+fast-deep-equal@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
+  integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=
+
+fast-deep-equal@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
+  integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
+
+fast-diff@1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154"
+  integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==
+
+fast-glob@^2.2.6:
+  version "2.2.7"
+  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d"
+  integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==
+  dependencies:
+    "@mrmlnc/readdir-enhanced" "^2.2.1"
+    "@nodelib/fs.stat" "^1.1.2"
+    glob-parent "^3.1.0"
+    is-glob "^4.0.0"
+    merge2 "^1.2.3"
+    micromatch "^3.1.10"
+
+fast-json-stable-stringify@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+  integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+
+fast-levenshtein@~2.0.4:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+  integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fastparse@^1.1.1:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9"
+  integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==
+
+faye-websocket@^0.10.0:
+  version "0.10.0"
+  resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
+  integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=
+  dependencies:
+    websocket-driver ">=0.5.1"
+
+faye-websocket@~0.11.1:
+  version "0.11.3"
+  resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e"
+  integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==
+  dependencies:
+    websocket-driver ">=0.5.1"
+
+fb-watchman@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
+  integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=
+  dependencies:
+    bser "^2.0.0"
+
+fecha@~2.3.3:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd"
+  integrity sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==
+
+figgy-pudding@^3.5.1:
+  version "3.5.1"
+  resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
+  integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
+
+figures@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+  integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+  dependencies:
+    escape-string-regexp "^1.0.5"
+
+file-entry-cache@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+  integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
+  dependencies:
+    flat-cache "^1.2.1"
+    object-assign "^4.0.1"
+
+file-entry-cache@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
+  integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+  dependencies:
+    flat-cache "^2.0.1"
+
+file-loader@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa"
+  integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==
+  dependencies:
+    loader-utils "^1.0.2"
+    schema-utils "^1.0.0"
+
+filename-regex@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+  integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=
+
+fileset@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0"
+  integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=
+  dependencies:
+    glob "^7.0.3"
+    minimatch "^3.0.3"
+
+filesize@^3.6.1:
+  version "3.6.1"
+  resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
+  integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==
+
+fill-range@^2.1.0:
+  version "2.2.4"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
+  integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==
+  dependencies:
+    is-number "^2.1.0"
+    isobject "^2.0.0"
+    randomatic "^3.0.0"
+    repeat-element "^1.1.2"
+    repeat-string "^1.5.2"
+
+fill-range@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+  integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-number "^3.0.0"
+    repeat-string "^1.6.1"
+    to-regex-range "^2.1.0"
+
+finalhandler@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
+  integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
+  dependencies:
+    debug "2.6.9"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    on-finished "~2.3.0"
+    parseurl "~1.3.3"
+    statuses "~1.5.0"
+    unpipe "~1.0.0"
+
+find-babel-config@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2"
+  integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==
+  dependencies:
+    json5 "^0.5.1"
+    path-exists "^3.0.0"
+
+find-cache-dir@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
+  integrity sha1-yN765XyKUqinhPnjHFfHQumToLk=
+  dependencies:
+    commondir "^1.0.1"
+    mkdirp "^0.5.1"
+    pkg-dir "^1.0.0"
+
+find-cache-dir@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f"
+  integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=
+  dependencies:
+    commondir "^1.0.1"
+    make-dir "^1.0.0"
+    pkg-dir "^2.0.0"
+
+find-cache-dir@^2.0.0, find-cache-dir@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+  integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+  dependencies:
+    commondir "^1.0.1"
+    make-dir "^2.0.0"
+    pkg-dir "^3.0.0"
+
+find-up@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+  integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+  dependencies:
+    path-exists "^2.0.0"
+    pinkie-promise "^2.0.0"
+
+find-up@^2.0.0, find-up@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+  integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+  dependencies:
+    locate-path "^2.0.0"
+
+find-up@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+  integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+  dependencies:
+    locate-path "^3.0.0"
+
+flat-cache@^1.2.1:
+  version "1.3.4"
+  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
+  integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==
+  dependencies:
+    circular-json "^0.3.1"
+    graceful-fs "^4.1.2"
+    rimraf "~2.6.2"
+    write "^0.2.1"
+
+flat-cache@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+  integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+  dependencies:
+    flatted "^2.0.0"
+    rimraf "2.6.3"
+    write "1.0.3"
+
+flatted@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
+  integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
+
+flush-write-stream@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+  integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+  dependencies:
+    inherits "^2.0.3"
+    readable-stream "^2.3.6"
+
+fmin@0.0.2:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/fmin/-/fmin-0.0.2.tgz#59bbb40d43ffdc1c94cd00a568c41f95f1973017"
+  integrity sha1-Wbu0DUP/3ByUzQClaMQflfGXMBc=
+  dependencies:
+    contour_plot "^0.0.1"
+    json2module "^0.0.3"
+    rollup "^0.25.8"
+    tape "^4.5.1"
+    uglify-js "^2.6.2"
+
+follow-redirects@1.5.10:
+  version "1.5.10"
+  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
+  integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
+  dependencies:
+    debug "=3.1.0"
+
+follow-redirects@^1.0.0:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f"
+  integrity sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==
+  dependencies:
+    debug "^3.0.0"
+
+for-each@~0.3.3:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
+  integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
+  dependencies:
+    is-callable "^1.1.3"
+
+for-in@^1.0.1, for-in@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+  integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+for-own@^0.1.4:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+  integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
+  dependencies:
+    for-in "^1.0.1"
+
+forever-agent@~0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+  integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.3.2:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+  integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.6"
+    mime-types "^2.1.12"
+
+forwarded@~0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+  integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
+
+fragment-cache@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+  integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+  dependencies:
+    map-cache "^0.2.2"
+
+fresh@0.5.2:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+  integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+
+from2@^2.1.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+  integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+  dependencies:
+    inherits "^2.0.1"
+    readable-stream "^2.0.0"
+
+fs-extra@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
+  integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
+  dependencies:
+    graceful-fs "^4.1.2"
+    jsonfile "^4.0.0"
+    universalify "^0.1.0"
+
+fs-minipass@^1.2.5:
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
+  integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
+  dependencies:
+    minipass "^2.6.0"
+
+fs-write-stream-atomic@^1.0.8:
+  version "1.0.10"
+  resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+  integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
+  dependencies:
+    graceful-fs "^4.1.2"
+    iferr "^0.1.5"
+    imurmurhash "^0.1.4"
+    readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.2.3, fsevents@^1.2.7:
+  version "1.2.9"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f"
+  integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==
+  dependencies:
+    nan "^2.12.1"
+    node-pre-gyp "^0.12.0"
+
+function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+functional-red-black-tree@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+  integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+gauge@~2.7.3:
+  version "2.7.4"
+  resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+  integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+  dependencies:
+    aproba "^1.0.3"
+    console-control-strings "^1.0.0"
+    has-unicode "^2.0.0"
+    object-assign "^4.1.0"
+    signal-exit "^3.0.0"
+    string-width "^1.0.1"
+    strip-ansi "^3.0.1"
+    wide-align "^1.1.0"
+
+get-caller-file@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
+  integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
+
+get-caller-file@^2.0.1:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-stream@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+  integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-stream@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+  integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+  dependencies:
+    pump "^3.0.0"
+
+get-stream@^5.0.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9"
+  integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==
+  dependencies:
+    pump "^3.0.0"
+
+get-value@^2.0.3, get-value@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+  integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+getpass@^0.1.1:
+  version "0.1.7"
+  resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+  integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+  dependencies:
+    assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+  integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
+  dependencies:
+    glob-parent "^2.0.0"
+    is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+  integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
+  dependencies:
+    is-glob "^2.0.0"
+
+glob-parent@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+  integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+  dependencies:
+    is-glob "^3.1.0"
+    path-dirname "^1.0.0"
+
+glob-to-regexp@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
+  integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
+
+glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.4:
+  version "7.1.5"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0"
+  integrity sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.4"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+globals@^11.0.1, globals@^11.1.0, globals@^11.7.0:
+  version "11.12.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^9.18.0:
+  version "9.18.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+  integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
+
+globby@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+  integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
+  dependencies:
+    array-union "^1.0.1"
+    glob "^7.0.3"
+    object-assign "^4.0.1"
+    pify "^2.0.0"
+    pinkie-promise "^2.0.0"
+
+globby@^7.1.1:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680"
+  integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA=
+  dependencies:
+    array-union "^1.0.1"
+    dir-glob "^2.0.0"
+    glob "^7.1.2"
+    ignore "^3.3.5"
+    pify "^3.0.0"
+    slash "^1.0.0"
+
+globby@^9.2.0:
+  version "9.2.0"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d"
+  integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==
+  dependencies:
+    "@types/glob" "^7.1.1"
+    array-union "^1.0.2"
+    dir-glob "^2.2.2"
+    fast-glob "^2.2.6"
+    glob "^7.1.3"
+    ignore "^4.0.3"
+    pify "^4.0.1"
+    slash "^2.0.0"
+
+good-listener@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50"
+  integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=
+  dependencies:
+    delegate "^3.1.2"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
+  integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
+
+graphlib@^2.1.7:
+  version "2.1.7"
+  resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.7.tgz#b6a69f9f44bd9de3963ce6804a2fc9e73d86aecc"
+  integrity sha512-TyI9jIy2J4j0qgPmOOrHTCtpPqJGN/aurBwc6ZT+bRii+di1I+Wv3obRhVrmBEXet+qkMaEX67dXrwsd3QQM6w==
+  dependencies:
+    lodash "^4.17.5"
+
+growly@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+  integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
+
+gzip-size@^5.0.0:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274"
+  integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==
+  dependencies:
+    duplexer "^0.1.1"
+    pify "^4.0.1"
+
+handle-thing@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754"
+  integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==
+
+handlebars@^4.0.3:
+  version "4.4.5"
+  resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.4.5.tgz#1b1f94f9bfe7379adda86a8b73fb570265a0dddd"
+  integrity sha512-0Ce31oWVB7YidkaTq33ZxEbN+UDxMMgThvCe8ptgQViymL5DPis9uLdTA13MiRPhgvqyxIegugrP97iK3JeBHg==
+  dependencies:
+    neo-async "^2.6.0"
+    optimist "^0.6.1"
+    source-map "^0.6.1"
+  optionalDependencies:
+    uglify-js "^3.1.4"
+
+har-schema@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+  integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+
+har-validator@~5.1.0:
+  version "5.1.3"
+  resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
+  integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
+  dependencies:
+    ajv "^6.5.5"
+    har-schema "^2.0.0"
+
+has-ansi@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+  integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+  dependencies:
+    ansi-regex "^2.0.0"
+
+has-flag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+  integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
+
+has-flag@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+  integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-symbols@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
+  integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
+
+has-unicode@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+  integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+  integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+  dependencies:
+    get-value "^2.0.3"
+    has-values "^0.1.4"
+    isobject "^2.0.0"
+
+has-value@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+  integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+  dependencies:
+    get-value "^2.0.6"
+    has-values "^1.0.0"
+    isobject "^3.0.0"
+
+has-values@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+  integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+  integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+  dependencies:
+    is-number "^3.0.0"
+    kind-of "^4.0.0"
+
+has@^1.0.0, has@^1.0.1, has@^1.0.3, has@~1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+  dependencies:
+    function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+  integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
+  dependencies:
+    inherits "^2.0.1"
+    safe-buffer "^5.0.1"
+
+hash-sum@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04"
+  integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+  version "1.1.7"
+  resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+  integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+  dependencies:
+    inherits "^2.0.3"
+    minimalistic-assert "^1.0.1"
+
+he@1.2.x, he@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+hex-color-regex@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
+  integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
+
+highlight.js@^9.6.0:
+  version "9.15.10"
+  resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.15.10.tgz#7b18ed75c90348c045eef9ed08ca1319a2219ad2"
+  integrity sha512-RoV7OkQm0T3os3Dd2VHLNMoaoDVx77Wygln3n9l5YV172XonWG6rgQD3XnF/BuFFZw9A0TJgmMSO8FEWQgvcXw==
+
+hmac-drbg@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+  integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+  dependencies:
+    hash.js "^1.0.3"
+    minimalistic-assert "^1.0.0"
+    minimalistic-crypto-utils "^1.0.1"
+
+home-or-tmp@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+  integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
+  dependencies:
+    os-homedir "^1.0.0"
+    os-tmpdir "^1.0.1"
+
+hoopy@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d"
+  integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==
+
+hosted-git-info@^2.1.4:
+  version "2.8.5"
+  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c"
+  integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==
+
+hpack.js@^2.1.6:
+  version "2.1.6"
+  resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
+  integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=
+  dependencies:
+    inherits "^2.0.1"
+    obuf "^1.0.0"
+    readable-stream "^2.0.1"
+    wbuf "^1.1.0"
+
+hsl-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e"
+  integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=
+
+hsla-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"
+  integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg=
+
+html-comment-regex@^1.1.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
+  integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
+
+html-encoding-sniffer@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
+  integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==
+  dependencies:
+    whatwg-encoding "^1.0.1"
+
+html-entities@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
+  integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=
+
+html-minifier@^3.2.3:
+  version "3.5.21"
+  resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c"
+  integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==
+  dependencies:
+    camel-case "3.0.x"
+    clean-css "4.2.x"
+    commander "2.17.x"
+    he "1.2.x"
+    param-case "2.1.x"
+    relateurl "0.2.x"
+    uglify-js "3.4.x"
+
+html-tags@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b"
+  integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=
+
+html-webpack-plugin@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b"
+  integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s=
+  dependencies:
+    html-minifier "^3.2.3"
+    loader-utils "^0.2.16"
+    lodash "^4.17.3"
+    pretty-error "^2.0.2"
+    tapable "^1.0.0"
+    toposort "^1.0.0"
+    util.promisify "1.0.0"
+
+htmlparser2@^3.10.0, htmlparser2@^3.3.0:
+  version "3.10.1"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
+  integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
+  dependencies:
+    domelementtype "^1.3.1"
+    domhandler "^2.3.0"
+    domutils "^1.5.1"
+    entities "^1.1.1"
+    inherits "^2.0.1"
+    readable-stream "^3.1.1"
+
+http-deceiver@^1.2.7:
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
+  integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=
+
+http-errors@1.7.2:
+  version "1.7.2"
+  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
+  integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
+  dependencies:
+    depd "~1.1.2"
+    inherits "2.0.3"
+    setprototypeof "1.1.1"
+    statuses ">= 1.5.0 < 2"
+    toidentifier "1.0.0"
+
+http-errors@~1.6.2:
+  version "1.6.3"
+  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+  integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
+  dependencies:
+    depd "~1.1.2"
+    inherits "2.0.3"
+    setprototypeof "1.1.0"
+    statuses ">= 1.4.0 < 2"
+
+http-errors@~1.7.2:
+  version "1.7.3"
+  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
+  integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
+  dependencies:
+    depd "~1.1.2"
+    inherits "2.0.4"
+    setprototypeof "1.1.1"
+    statuses ">= 1.5.0 < 2"
+    toidentifier "1.0.0"
+
+"http-parser-js@>=0.4.0 <0.4.11":
+  version "0.4.10"
+  resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4"
+  integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=
+
+http-proxy-middleware@0.19.1:
+  version "0.19.1"
+  resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
+  integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==
+  dependencies:
+    http-proxy "^1.17.0"
+    is-glob "^4.0.0"
+    lodash "^4.17.11"
+    micromatch "^3.1.10"
+
+http-proxy@^1.17.0:
+  version "1.18.0"
+  resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a"
+  integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==
+  dependencies:
+    eventemitter3 "^4.0.0"
+    follow-redirects "^1.0.0"
+    requires-port "^1.0.0"
+
+http-signature@~1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+  integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+  dependencies:
+    assert-plus "^1.0.0"
+    jsprim "^1.2.2"
+    sshpk "^1.7.0"
+
+https-browserify@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+  integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+human-signals@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+  integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
+
+iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
+  version "0.4.24"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3"
+
+icss-replace-symbols@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
+  integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
+
+icss-utils@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962"
+  integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=
+  dependencies:
+    postcss "^6.0.1"
+
+ieee754@^1.1.4:
+  version "1.1.13"
+  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
+  integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+
+iferr@^0.1.5:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+  integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+
+ignore-walk@^3.0.1:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37"
+  integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==
+  dependencies:
+    minimatch "^3.0.4"
+
+ignore@^3.3.3, ignore@^3.3.5:
+  version "3.3.10"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+  integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
+
+ignore@^4.0.3, ignore@^4.0.6:
+  version "4.0.6"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+  integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.0.2:
+  version "5.1.4"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf"
+  integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==
+
+image-size@~0.5.0:
+  version "0.5.5"
+  resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
+  integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=
+
+import-cwd@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
+  integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=
+  dependencies:
+    import-from "^2.1.0"
+
+import-fresh@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+  integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+  dependencies:
+    caller-path "^2.0.0"
+    resolve-from "^3.0.0"
+
+import-fresh@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118"
+  integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==
+  dependencies:
+    parent-module "^1.0.0"
+    resolve-from "^4.0.0"
+
+import-from@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
+  integrity sha1-M1238qev/VOqpHHUuAId7ja387E=
+  dependencies:
+    resolve-from "^3.0.0"
+
+import-local@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"
+  integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==
+  dependencies:
+    pkg-dir "^2.0.0"
+    resolve-cwd "^2.0.0"
+
+import-local@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+  integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+  dependencies:
+    pkg-dir "^3.0.0"
+    resolve-cwd "^2.0.0"
+
+imurmurhash@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+  integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indexes-of@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+  integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
+
+infer-owner@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+  integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+  dependencies:
+    once "^1.3.0"
+    wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+  integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+inherits@2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+  integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@^1.3.4, ini@~1.3.0:
+  version "1.3.5"
+  resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+  integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+
+inquirer@3.0.6:
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347"
+  integrity sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=
+  dependencies:
+    ansi-escapes "^1.1.0"
+    chalk "^1.0.0"
+    cli-cursor "^2.1.0"
+    cli-width "^2.0.0"
+    external-editor "^2.0.1"
+    figures "^2.0.0"
+    lodash "^4.3.0"
+    mute-stream "0.0.7"
+    run-async "^2.2.0"
+    rx "^4.1.0"
+    string-width "^2.0.0"
+    strip-ansi "^3.0.0"
+    through "^2.3.6"
+
+inquirer@^3.0.6:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
+  integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==
+  dependencies:
+    ansi-escapes "^3.0.0"
+    chalk "^2.0.0"
+    cli-cursor "^2.1.0"
+    cli-width "^2.0.0"
+    external-editor "^2.0.4"
+    figures "^2.0.0"
+    lodash "^4.3.0"
+    mute-stream "0.0.7"
+    run-async "^2.2.0"
+    rx-lite "^4.0.8"
+    rx-lite-aggregates "^4.0.8"
+    string-width "^2.1.0"
+    strip-ansi "^4.0.0"
+    through "^2.3.6"
+
+inquirer@^6.2.2:
+  version "6.5.2"
+  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
+  integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
+  dependencies:
+    ansi-escapes "^3.2.0"
+    chalk "^2.4.2"
+    cli-cursor "^2.1.0"
+    cli-width "^2.0.0"
+    external-editor "^3.0.3"
+    figures "^2.0.0"
+    lodash "^4.17.12"
+    mute-stream "0.0.7"
+    run-async "^2.2.0"
+    rxjs "^6.4.0"
+    string-width "^2.1.0"
+    strip-ansi "^5.1.0"
+    through "^2.3.6"
+
+internal-ip@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
+  integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==
+  dependencies:
+    default-gateway "^4.2.0"
+    ipaddr.js "^1.9.0"
+
+intersperse@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/intersperse/-/intersperse-1.0.0.tgz#f2561fb1cfef9f5277cc3347a22886b4351a5181"
+  integrity sha1-8lYfsc/vn1J3zDNHoiiGtDUaUYE=
+
+invariant@^2.2.2, invariant@^2.2.4:
+  version "2.2.4"
+  resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+  integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+  dependencies:
+    loose-envify "^1.0.0"
+
+invert-kv@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
+  integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
+
+ip-regex@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
+  integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
+
+ip@^1.1.0, ip@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+  integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
+
+ipaddr.js@1.9.0:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65"
+  integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==
+
+ipaddr.js@^1.9.0:
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+  integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
+is-absolute-url@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+  integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
+
+is-absolute-url@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698"
+  integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==
+
+is-accessor-descriptor@^0.1.6:
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+  integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+  dependencies:
+    kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+  integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+  dependencies:
+    kind-of "^6.0.0"
+
+is-arguments@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
+  integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
+
+is-arrayish@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+  integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-arrayish@^0.3.1:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+  integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+
+is-binary-path@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+  integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+  dependencies:
+    binary-extensions "^1.0.0"
+
+is-buffer@^1.1.5, is-buffer@~1.1.1:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-buffer@^2.0.2:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623"
+  integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==
+
+is-callable@^1.1.3, is-callable@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
+  integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
+
+is-ci@^1.0.10:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
+  integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==
+  dependencies:
+    ci-info "^1.5.0"
+
+is-color-stop@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
+  integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=
+  dependencies:
+    css-color-names "^0.0.4"
+    hex-color-regex "^1.1.0"
+    hsl-regex "^1.0.0"
+    hsla-regex "^1.0.0"
+    rgb-regex "^1.0.1"
+    rgba-regex "^1.0.0"
+
+is-data-descriptor@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+  integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+  dependencies:
+    kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+  integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+  dependencies:
+    kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+  integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
+
+is-descriptor@^0.1.0:
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+  integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+  dependencies:
+    is-accessor-descriptor "^0.1.6"
+    is-data-descriptor "^0.1.4"
+    kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+  integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+  dependencies:
+    is-accessor-descriptor "^1.0.0"
+    is-data-descriptor "^1.0.0"
+    kind-of "^6.0.2"
+
+is-directory@^0.3.1:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+  integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
+
+is-dotfile@^1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
+  integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=
+
+is-equal-shallow@^0.1.3:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+  integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
+  dependencies:
+    is-primitive "^2.0.0"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+  integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+  integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+  dependencies:
+    is-plain-object "^2.0.4"
+
+is-extglob@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+  integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-finite@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+  integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
+  dependencies:
+    number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+  integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+  dependencies:
+    number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+  integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-generator-fn@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a"
+  integrity sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+  integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+  dependencies:
+    is-extglob "^1.0.0"
+
+is-glob@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+  integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+  dependencies:
+    is-extglob "^2.1.0"
+
+is-glob@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+  integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+  dependencies:
+    is-extglob "^2.1.1"
+
+is-negative-zero@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461"
+  integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=
+
+is-number@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+  integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
+  dependencies:
+    kind-of "^3.0.2"
+
+is-number@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+  integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+  dependencies:
+    kind-of "^3.0.2"
+
+is-number@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
+  integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
+
+is-obj@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+  integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-path-cwd@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
+  integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
+
+is-path-in-cwd@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
+  integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==
+  dependencies:
+    is-path-inside "^2.1.0"
+
+is-path-inside@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
+  integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==
+  dependencies:
+    path-is-inside "^1.0.2"
+
+is-plain-obj@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+  integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+  dependencies:
+    isobject "^3.0.1"
+
+is-posix-bracket@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+  integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
+
+is-primitive@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+  integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
+
+is-promise@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+  integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
+
+is-regex@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
+  integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
+  dependencies:
+    has "^1.0.1"
+
+is-resolvable@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+  integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
+
+is-stream@^1.0.1, is-stream@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+  integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-stream@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
+  integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
+
+is-svg@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75"
+  integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==
+  dependencies:
+    html-comment-regex "^1.1.0"
+
+is-symbol@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
+  integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
+  dependencies:
+    has-symbols "^1.0.0"
+
+is-typedarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+  integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-utf8@^0.2.0:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+  integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+is-whitespace@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f"
+  integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38=
+
+is-windows@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+  integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-wsl@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+  integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isarray@~0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+  integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+ismobilejs@^0.5.1:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/ismobilejs/-/ismobilejs-0.5.2.tgz#e81bacf6187c532ad8348355f4fecd6e6adfdce1"
+  integrity sha512-ta9UdV60xVZk/ZafFtSFslQaE76SvNkcs1r73d2PVR21zVzx9xuYv9tNe4MxA1NN7WoeCc2RjGot3Bz1eHDx3Q==
+
+isobject@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+  integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+  dependencies:
+    isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+  integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isstream@~0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+  integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+istanbul-api@^1.3.1:
+  version "1.3.7"
+  resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa"
+  integrity sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==
+  dependencies:
+    async "^2.1.4"
+    fileset "^2.0.2"
+    istanbul-lib-coverage "^1.2.1"
+    istanbul-lib-hook "^1.2.2"
+    istanbul-lib-instrument "^1.10.2"
+    istanbul-lib-report "^1.1.5"
+    istanbul-lib-source-maps "^1.2.6"
+    istanbul-reports "^1.5.1"
+    js-yaml "^3.7.0"
+    mkdirp "^0.5.1"
+    once "^1.4.0"
+
+istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0"
+  integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==
+
+istanbul-lib-hook@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86"
+  integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==
+  dependencies:
+    append-transform "^0.4.0"
+
+istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2:
+  version "1.10.2"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca"
+  integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==
+  dependencies:
+    babel-generator "^6.18.0"
+    babel-template "^6.16.0"
+    babel-traverse "^6.18.0"
+    babel-types "^6.18.0"
+    babylon "^6.18.0"
+    istanbul-lib-coverage "^1.2.1"
+    semver "^5.3.0"
+
+istanbul-lib-report@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c"
+  integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==
+  dependencies:
+    istanbul-lib-coverage "^1.2.1"
+    mkdirp "^0.5.1"
+    path-parse "^1.0.5"
+    supports-color "^3.1.2"
+
+istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6:
+  version "1.2.6"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f"
+  integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==
+  dependencies:
+    debug "^3.1.0"
+    istanbul-lib-coverage "^1.2.1"
+    mkdirp "^0.5.1"
+    rimraf "^2.6.1"
+    source-map "^0.5.3"
+
+istanbul-reports@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a"
+  integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==
+  dependencies:
+    handlebars "^4.0.3"
+
+javascript-stringify@^1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3"
+  integrity sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=
+
+jest-changed-files@^23.4.2:
+  version "23.4.2"
+  resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83"
+  integrity sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==
+  dependencies:
+    throat "^4.0.0"
+
+jest-cli@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.6.0.tgz#61ab917744338f443ef2baa282ddffdd658a5da4"
+  integrity sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==
+  dependencies:
+    ansi-escapes "^3.0.0"
+    chalk "^2.0.1"
+    exit "^0.1.2"
+    glob "^7.1.2"
+    graceful-fs "^4.1.11"
+    import-local "^1.0.0"
+    is-ci "^1.0.10"
+    istanbul-api "^1.3.1"
+    istanbul-lib-coverage "^1.2.0"
+    istanbul-lib-instrument "^1.10.1"
+    istanbul-lib-source-maps "^1.2.4"
+    jest-changed-files "^23.4.2"
+    jest-config "^23.6.0"
+    jest-environment-jsdom "^23.4.0"
+    jest-get-type "^22.1.0"
+    jest-haste-map "^23.6.0"
+    jest-message-util "^23.4.0"
+    jest-regex-util "^23.3.0"
+    jest-resolve-dependencies "^23.6.0"
+    jest-runner "^23.6.0"
+    jest-runtime "^23.6.0"
+    jest-snapshot "^23.6.0"
+    jest-util "^23.4.0"
+    jest-validate "^23.6.0"
+    jest-watcher "^23.4.0"
+    jest-worker "^23.2.0"
+    micromatch "^2.3.11"
+    node-notifier "^5.2.1"
+    prompts "^0.1.9"
+    realpath-native "^1.0.0"
+    rimraf "^2.5.4"
+    slash "^1.0.0"
+    string-length "^2.0.0"
+    strip-ansi "^4.0.0"
+    which "^1.2.12"
+    yargs "^11.0.0"
+
+jest-config@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.6.0.tgz#f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d"
+  integrity sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==
+  dependencies:
+    babel-core "^6.0.0"
+    babel-jest "^23.6.0"
+    chalk "^2.0.1"
+    glob "^7.1.1"
+    jest-environment-jsdom "^23.4.0"
+    jest-environment-node "^23.4.0"
+    jest-get-type "^22.1.0"
+    jest-jasmine2 "^23.6.0"
+    jest-regex-util "^23.3.0"
+    jest-resolve "^23.6.0"
+    jest-util "^23.4.0"
+    jest-validate "^23.6.0"
+    micromatch "^2.3.11"
+    pretty-format "^23.6.0"
+
+jest-diff@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d"
+  integrity sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==
+  dependencies:
+    chalk "^2.0.1"
+    diff "^3.2.0"
+    jest-get-type "^22.1.0"
+    pretty-format "^23.6.0"
+
+jest-docblock@^23.2.0:
+  version "23.2.0"
+  resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7"
+  integrity sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=
+  dependencies:
+    detect-newline "^2.1.0"
+
+jest-each@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.6.0.tgz#ba0c3a82a8054387016139c733a05242d3d71575"
+  integrity sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==
+  dependencies:
+    chalk "^2.0.1"
+    pretty-format "^23.6.0"
+
+jest-environment-jsdom@^23.4.0:
+  version "23.4.0"
+  resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023"
+  integrity sha1-BWp5UrP+pROsYqFAosNox52eYCM=
+  dependencies:
+    jest-mock "^23.2.0"
+    jest-util "^23.4.0"
+    jsdom "^11.5.1"
+
+jest-environment-node@^23.4.0:
+  version "23.4.0"
+  resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10"
+  integrity sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=
+  dependencies:
+    jest-mock "^23.2.0"
+    jest-util "^23.4.0"
+
+jest-get-type@^22.1.0:
+  version "22.4.3"
+  resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4"
+  integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==
+
+jest-haste-map@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.6.0.tgz#2e3eb997814ca696d62afdb3f2529f5bbc935e16"
+  integrity sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==
+  dependencies:
+    fb-watchman "^2.0.0"
+    graceful-fs "^4.1.11"
+    invariant "^2.2.4"
+    jest-docblock "^23.2.0"
+    jest-serializer "^23.0.1"
+    jest-worker "^23.2.0"
+    micromatch "^2.3.11"
+    sane "^2.0.0"
+
+jest-jasmine2@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0"
+  integrity sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==
+  dependencies:
+    babel-traverse "^6.0.0"
+    chalk "^2.0.1"
+    co "^4.6.0"
+    expect "^23.6.0"
+    is-generator-fn "^1.0.0"
+    jest-diff "^23.6.0"
+    jest-each "^23.6.0"
+    jest-matcher-utils "^23.6.0"
+    jest-message-util "^23.4.0"
+    jest-snapshot "^23.6.0"
+    jest-util "^23.4.0"
+    pretty-format "^23.6.0"
+
+jest-leak-detector@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz#e4230fd42cf381a1a1971237ad56897de7e171de"
+  integrity sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==
+  dependencies:
+    pretty-format "^23.6.0"
+
+jest-matcher-utils@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80"
+  integrity sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==
+  dependencies:
+    chalk "^2.0.1"
+    jest-get-type "^22.1.0"
+    pretty-format "^23.6.0"
+
+jest-message-util@^23.4.0:
+  version "23.4.0"
+  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f"
+  integrity sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=
+  dependencies:
+    "@babel/code-frame" "^7.0.0-beta.35"
+    chalk "^2.0.1"
+    micromatch "^2.3.11"
+    slash "^1.0.0"
+    stack-utils "^1.0.1"
+
+jest-mock@^23.2.0:
+  version "23.2.0"
+  resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134"
+  integrity sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=
+
+jest-regex-util@^23.3.0:
+  version "23.3.0"
+  resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5"
+  integrity sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=
+
+jest-resolve-dependencies@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz#b4526af24c8540d9a3fab102c15081cf509b723d"
+  integrity sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==
+  dependencies:
+    jest-regex-util "^23.3.0"
+    jest-snapshot "^23.6.0"
+
+jest-resolve@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.6.0.tgz#cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae"
+  integrity sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==
+  dependencies:
+    browser-resolve "^1.11.3"
+    chalk "^2.0.1"
+    realpath-native "^1.0.0"
+
+jest-runner@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.6.0.tgz#3894bd219ffc3f3cb94dc48a4170a2e6f23a5a38"
+  integrity sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==
+  dependencies:
+    exit "^0.1.2"
+    graceful-fs "^4.1.11"
+    jest-config "^23.6.0"
+    jest-docblock "^23.2.0"
+    jest-haste-map "^23.6.0"
+    jest-jasmine2 "^23.6.0"
+    jest-leak-detector "^23.6.0"
+    jest-message-util "^23.4.0"
+    jest-runtime "^23.6.0"
+    jest-util "^23.4.0"
+    jest-worker "^23.2.0"
+    source-map-support "^0.5.6"
+    throat "^4.0.0"
+
+jest-runtime@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.6.0.tgz#059e58c8ab445917cd0e0d84ac2ba68de8f23082"
+  integrity sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==
+  dependencies:
+    babel-core "^6.0.0"
+    babel-plugin-istanbul "^4.1.6"
+    chalk "^2.0.1"
+    convert-source-map "^1.4.0"
+    exit "^0.1.2"
+    fast-json-stable-stringify "^2.0.0"
+    graceful-fs "^4.1.11"
+    jest-config "^23.6.0"
+    jest-haste-map "^23.6.0"
+    jest-message-util "^23.4.0"
+    jest-regex-util "^23.3.0"
+    jest-resolve "^23.6.0"
+    jest-snapshot "^23.6.0"
+    jest-util "^23.4.0"
+    jest-validate "^23.6.0"
+    micromatch "^2.3.11"
+    realpath-native "^1.0.0"
+    slash "^1.0.0"
+    strip-bom "3.0.0"
+    write-file-atomic "^2.1.0"
+    yargs "^11.0.0"
+
+jest-serializer-vue@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/jest-serializer-vue/-/jest-serializer-vue-2.0.2.tgz#b238ef286357ec6b480421bd47145050987d59b3"
+  integrity sha1-sjjvKGNX7GtIBCG9RxRQUJh9WbM=
+  dependencies:
+    pretty "2.0.0"
+
+jest-serializer@^23.0.1:
+  version "23.0.1"
+  resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165"
+  integrity sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=
+
+jest-snapshot@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a"
+  integrity sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==
+  dependencies:
+    babel-types "^6.0.0"
+    chalk "^2.0.1"
+    jest-diff "^23.6.0"
+    jest-matcher-utils "^23.6.0"
+    jest-message-util "^23.4.0"
+    jest-resolve "^23.6.0"
+    mkdirp "^0.5.1"
+    natural-compare "^1.4.0"
+    pretty-format "^23.6.0"
+    semver "^5.5.0"
+
+jest-transform-stub@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/jest-transform-stub/-/jest-transform-stub-2.0.0.tgz#19018b0851f7568972147a5d60074b55f0225a7d"
+  integrity sha512-lspHaCRx/mBbnm3h4uMMS3R5aZzMwyNpNIJLXj4cEsV0mIUtS4IjYJLSoyjRCtnxb6RIGJ4NL2quZzfIeNhbkg==
+
+jest-util@^23.4.0:
+  version "23.4.0"
+  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561"
+  integrity sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=
+  dependencies:
+    callsites "^2.0.0"
+    chalk "^2.0.1"
+    graceful-fs "^4.1.11"
+    is-ci "^1.0.10"
+    jest-message-util "^23.4.0"
+    mkdirp "^0.5.1"
+    slash "^1.0.0"
+    source-map "^0.6.0"
+
+jest-validate@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474"
+  integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==
+  dependencies:
+    chalk "^2.0.1"
+    jest-get-type "^22.1.0"
+    leven "^2.1.0"
+    pretty-format "^23.6.0"
+
+jest-watch-typeahead@0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.2.1.tgz#6c40f232996ca6c39977e929e9f79b189e7d87e4"
+  integrity sha512-xdhEtKSj0gmnkDQbPTIHvcMmXNUDzYpHLEJ5TFqlaI+schi2NI96xhWiZk9QoesAS7oBmKwWWsHazTrYl2ORgg==
+  dependencies:
+    ansi-escapes "^3.0.0"
+    chalk "^2.4.1"
+    jest-watcher "^23.1.0"
+    slash "^2.0.0"
+    string-length "^2.0.0"
+    strip-ansi "^5.0.0"
+
+jest-watcher@^23.1.0, jest-watcher@^23.4.0:
+  version "23.4.0"
+  resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c"
+  integrity sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=
+  dependencies:
+    ansi-escapes "^3.0.0"
+    chalk "^2.0.1"
+    string-length "^2.0.0"
+
+jest-worker@^23.2.0:
+  version "23.2.0"
+  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9"
+  integrity sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=
+  dependencies:
+    merge-stream "^1.0.1"
+
+jest@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d"
+  integrity sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==
+  dependencies:
+    import-local "^1.0.0"
+    jest-cli "^23.6.0"
+
+jquery@^3.4.1:
+  version "3.4.1"
+  resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2"
+  integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==
+
+js-beautify@^1.6.12, js-beautify@^1.6.14:
+  version "1.10.2"
+  resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.10.2.tgz#88c9099cd6559402b124cfab18754936f8a7b178"
+  integrity sha512-ZtBYyNUYJIsBWERnQP0rPN9KjkrDfJcMjuVGcvXOUJrD1zmOGwhRwQ4msG+HJ+Ni/FA7+sRQEMYVzdTQDvnzvQ==
+  dependencies:
+    config-chain "^1.1.12"
+    editorconfig "^0.15.3"
+    glob "^7.1.3"
+    mkdirp "~0.5.1"
+    nopt "~4.0.1"
+
+js-cookie@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8"
+  integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==
+
+js-levenshtein@^1.1.3:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"
+  integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==
+
+js-message@1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/js-message/-/js-message-1.0.5.tgz#2300d24b1af08e89dd095bc1a4c9c9cfcb892d15"
+  integrity sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=
+
+js-queue@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/js-queue/-/js-queue-2.0.0.tgz#362213cf860f468f0125fc6c96abc1742531f948"
+  integrity sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=
+  dependencies:
+    easy-stack "^1.0.0"
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-tokens@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+  integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+
+js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.7.0, js-yaml@^3.9.1:
+  version "3.13.1"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
+  integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
+  dependencies:
+    argparse "^1.0.7"
+    esprima "^4.0.0"
+
+jsbn@~0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+  integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+jsdom@^11.5.1:
+  version "11.12.0"
+  resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8"
+  integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==
+  dependencies:
+    abab "^2.0.0"
+    acorn "^5.5.3"
+    acorn-globals "^4.1.0"
+    array-equal "^1.0.0"
+    cssom ">= 0.3.2 < 0.4.0"
+    cssstyle "^1.0.0"
+    data-urls "^1.0.0"
+    domexception "^1.0.1"
+    escodegen "^1.9.1"
+    html-encoding-sniffer "^1.0.2"
+    left-pad "^1.3.0"
+    nwsapi "^2.0.7"
+    parse5 "4.0.0"
+    pn "^1.1.0"
+    request "^2.87.0"
+    request-promise-native "^1.0.5"
+    sax "^1.2.4"
+    symbol-tree "^3.2.2"
+    tough-cookie "^2.3.4"
+    w3c-hr-time "^1.0.1"
+    webidl-conversions "^4.0.2"
+    whatwg-encoding "^1.0.3"
+    whatwg-mimetype "^2.1.0"
+    whatwg-url "^6.4.1"
+    ws "^5.2.0"
+    xml-name-validator "^3.0.0"
+
+jsesc@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+  integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
+
+jsesc@^2.5.1:
+  version "2.5.2"
+  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+  integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+  integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+
+json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+  integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.3.0:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+  integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=
+
+json-schema-traverse@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema@0.2.3:
+  version "0.2.3"
+  resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+  integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stable-stringify-without-jsonify@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+  integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+json-stringify-safe@~5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+  integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json2module@^0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/json2module/-/json2module-0.0.3.tgz#00fb5f4a9b7adfc3f0647c29cb17bcd1979be9b2"
+  integrity sha1-APtfSpt638PwZHwpyxe80Zeb6bI=
+  dependencies:
+    rw "^1.3.2"
+
+json2mq@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a"
+  integrity sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=
+  dependencies:
+    string-convert "^0.2.0"
+
+json3@^3.3.2:
+  version "3.3.3"
+  resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
+  integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==
+
+json5@^0.5.0, json5@^0.5.1:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+  integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+json5@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+  integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+  dependencies:
+    minimist "^1.2.0"
+
+json5@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6"
+  integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==
+  dependencies:
+    minimist "^1.2.0"
+
+jsonfile@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+  integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
+jsprim@^1.2.2:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+  integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+  dependencies:
+    assert-plus "1.0.0"
+    extsprintf "1.3.0"
+    json-schema "0.2.3"
+    verror "1.10.0"
+
+killable@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
+  integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+  integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+  dependencies:
+    is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+  integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+  dependencies:
+    is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+  integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+  integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
+
+kleur@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300"
+  integrity sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==
+
+launch-editor-middleware@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157"
+  integrity sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==
+  dependencies:
+    launch-editor "^2.2.1"
+
+launch-editor@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.2.1.tgz#871b5a3ee39d6680fcc26d37930b6eeda89db0ca"
+  integrity sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==
+  dependencies:
+    chalk "^2.3.0"
+    shell-quote "^1.6.1"
+
+lazy-cache@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+  integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
+
+lcid@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
+  integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
+  dependencies:
+    invert-kv "^2.0.0"
+
+left-pad@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
+  integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==
+
+less-loader@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.1.0.tgz#2c1352c5b09a4f84101490274fd51674de41363e"
+  integrity sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==
+  dependencies:
+    clone "^2.1.1"
+    loader-utils "^1.1.0"
+    pify "^3.0.0"
+
+less@^3.8.1:
+  version "3.10.3"
+  resolved "https://registry.yarnpkg.com/less/-/less-3.10.3.tgz#417a0975d5eeecc52cff4bcfa3c09d35781e6792"
+  integrity sha512-vz32vqfgmoxF1h3K4J+yKCtajH0PWmjkIFgbs5d78E/c/e+UQTnI+lWK+1eQRE95PXM2mC3rJlLSSP9VQHnaow==
+  dependencies:
+    clone "^2.1.2"
+  optionalDependencies:
+    errno "^0.1.1"
+    graceful-fs "^4.1.2"
+    image-size "~0.5.0"
+    mime "^1.4.1"
+    mkdirp "^0.5.0"
+    promise "^7.1.1"
+    request "^2.83.0"
+    source-map "~0.6.0"
+
+leven@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
+  integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA=
+
+levn@^0.3.0, levn@~0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+  integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+  dependencies:
+    prelude-ls "~1.1.2"
+    type-check "~0.3.2"
+
+lines-and-columns@^1.1.6:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
+  integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
+
+load-json-file@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+  integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+  dependencies:
+    graceful-fs "^4.1.2"
+    parse-json "^2.2.0"
+    pify "^2.0.0"
+    pinkie-promise "^2.0.0"
+    strip-bom "^2.0.0"
+
+load-json-file@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+  integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+  dependencies:
+    graceful-fs "^4.1.2"
+    parse-json "^2.2.0"
+    pify "^2.0.0"
+    strip-bom "^3.0.0"
+
+loader-fs-cache@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz#54cedf6b727e1779fd8f01205f05f6e88706f086"
+  integrity sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==
+  dependencies:
+    find-cache-dir "^0.1.1"
+    mkdirp "0.5.1"
+
+loader-runner@^2.3.1, loader-runner@^2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+  integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
+loader-utils@1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
+  integrity sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=
+  dependencies:
+    big.js "^3.1.3"
+    emojis-list "^2.0.0"
+    json5 "^0.5.0"
+
+loader-utils@^0.2.16:
+  version "0.2.17"
+  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
+  integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=
+  dependencies:
+    big.js "^3.1.3"
+    emojis-list "^2.0.0"
+    json5 "^0.5.0"
+    object-assign "^4.0.1"
+
+loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
+  integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
+  dependencies:
+    big.js "^5.2.2"
+    emojis-list "^2.0.0"
+    json5 "^1.0.1"
+
+locate-path@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+  integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+  dependencies:
+    p-locate "^2.0.0"
+    path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+  integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+  dependencies:
+    p-locate "^3.0.0"
+    path-exists "^3.0.0"
+
+lodash.defaultsdeep@^4.6.1:
+  version "4.6.1"
+  resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6"
+  integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==
+
+lodash.get@^4.4.2:
+  version "4.4.2"
+  resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
+  integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
+
+lodash.kebabcase@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
+  integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY=
+
+lodash.mapvalues@^4.6.0:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c"
+  integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=
+
+lodash.memoize@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+  integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
+
+lodash.pick@^4.4.0:
+  version "4.4.0"
+  resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
+  integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=
+
+lodash.sortby@^4.7.0:
+  version "4.7.0"
+  resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+  integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
+
+lodash.toarray@^4.4.0:
+  version "4.4.0"
+  resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561"
+  integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE=
+
+lodash.transform@^4.6.0:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0"
+  integrity sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=
+
+lodash.uniq@^4.5.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+  integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
+
+lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0:
+  version "4.17.15"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+  integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+
+log-symbols@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
+  integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
+  dependencies:
+    chalk "^2.0.1"
+
+loglevel@^1.6.4:
+  version "1.6.4"
+  resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.4.tgz#f408f4f006db8354d0577dcf6d33485b3cb90d56"
+  integrity sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==
+
+longest@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+  integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
+
+loose-envify@^1.0.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+  integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+  dependencies:
+    js-tokens "^3.0.0 || ^4.0.0"
+
+lower-case@^1.1.1:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
+  integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw=
+
+lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2, lru-cache@^4.1.5:
+  version "4.1.5"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+  integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+  dependencies:
+    pseudomap "^1.0.2"
+    yallist "^2.1.2"
+
+lru-cache@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+  integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+  dependencies:
+    yallist "^3.0.2"
+
+make-dir@^1.0.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
+  integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
+  dependencies:
+    pify "^3.0.0"
+
+make-dir@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+  integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+  dependencies:
+    pify "^4.0.1"
+    semver "^5.6.0"
+
+makeerror@1.0.x:
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+  integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=
+  dependencies:
+    tmpl "1.0.x"
+
+mamacro@^0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4"
+  integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==
+
+map-age-cleaner@^0.1.1:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
+  integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
+  dependencies:
+    p-defer "^1.0.0"
+
+map-cache@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+  integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-visit@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+  integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+  dependencies:
+    object-visit "^1.0.0"
+
+math-random@^1.0.1:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c"
+  integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==
+
+md5.js@^1.3.4:
+  version "1.3.5"
+  resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+  integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+  dependencies:
+    hash-base "^3.0.0"
+    inherits "^2.0.1"
+    safe-buffer "^5.1.2"
+
+md5@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9"
+  integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=
+  dependencies:
+    charenc "~0.0.1"
+    crypt "~0.0.1"
+    is-buffer "~1.1.1"
+
+mdn-data@2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
+  integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==
+
+mdn-data@~1.1.0:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01"
+  integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==
+
+media-typer@0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+  integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+
+mem@^4.0.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
+  integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
+  dependencies:
+    map-age-cleaner "^0.1.1"
+    mimic-fn "^2.0.0"
+    p-is-promise "^2.0.0"
+
+memory-fs@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+  integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+  dependencies:
+    errno "^0.1.3"
+    readable-stream "^2.0.1"
+
+memory-fs@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+  integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+  dependencies:
+    errno "^0.1.3"
+    readable-stream "^2.0.1"
+
+merge-descriptors@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+  integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
+
+merge-source-map@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
+  integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==
+  dependencies:
+    source-map "^0.6.1"
+
+merge-stream@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
+  integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=
+  dependencies:
+    readable-stream "^2.0.1"
+
+merge-stream@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.2.3:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81"
+  integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==
+
+merge@^1.2.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
+  integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
+
+methods@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+  integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+
+micromatch@^2.3.11:
+  version "2.3.11"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+  integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
+  dependencies:
+    arr-diff "^2.0.0"
+    array-unique "^0.2.1"
+    braces "^1.8.2"
+    expand-brackets "^0.1.4"
+    extglob "^0.3.1"
+    filename-regex "^2.0.0"
+    is-extglob "^1.0.0"
+    is-glob "^2.0.1"
+    kind-of "^3.0.2"
+    normalize-path "^2.0.1"
+    object.omit "^2.0.0"
+    parse-glob "^3.0.4"
+    regex-cache "^0.4.2"
+
+micromatch@^3.1.10, micromatch@^3.1.4:
+  version "3.1.10"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+  integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+  dependencies:
+    arr-diff "^4.0.0"
+    array-unique "^0.3.2"
+    braces "^2.3.1"
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    extglob "^2.0.4"
+    fragment-cache "^0.2.1"
+    kind-of "^6.0.2"
+    nanomatch "^1.2.9"
+    object.pick "^1.3.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.2"
+
+miller-rabin@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+  integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+  dependencies:
+    bn.js "^4.0.0"
+    brorand "^1.0.1"
+
+mime-db@1.40.0:
+  version "1.40.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
+  integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==
+
+"mime-db@>= 1.40.0 < 2":
+  version "1.42.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac"
+  integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==
+
+mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
+  version "2.1.24"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81"
+  integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==
+  dependencies:
+    mime-db "1.40.0"
+
+mime@1.6.0, mime@^1.4.1:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+  integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mime@^2.0.3, mime@^2.4.4:
+  version "2.4.4"
+  resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5"
+  integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==
+
+mimic-fn@^1.0.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+  integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+mimic-fn@^2.0.0, mimic-fn@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+mini-css-extract-plugin@^0.8.0:
+  version "0.8.0"
+  resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz#81d41ec4fe58c713a96ad7c723cdb2d0bd4d70e1"
+  integrity sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw==
+  dependencies:
+    loader-utils "^1.1.0"
+    normalize-url "1.9.1"
+    schema-utils "^1.0.0"
+    webpack-sources "^1.1.0"
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+  integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+  integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+  version "0.0.8"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+  integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@1.2.0, minimist@^1.1.1, minimist@^1.2.0, minimist@~1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+  integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+minimist@~0.0.1:
+  version "0.0.10"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+  integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
+
+minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
+  version "2.9.0"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
+  integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
+  dependencies:
+    safe-buffer "^5.1.2"
+    yallist "^3.0.0"
+
+minizlib@^1.2.1:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
+  integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
+  dependencies:
+    minipass "^2.9.0"
+
+mississippi@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f"
+  integrity sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==
+  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 "^2.0.1"
+    pumpify "^1.3.3"
+    stream-each "^1.1.0"
+    through2 "^2.0.0"
+
+mississippi@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+  integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+  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"
+
+mixin-deep@^1.2.0:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+  integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+  dependencies:
+    for-in "^1.0.2"
+    is-extendable "^1.0.1"
+
+mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+  integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+  dependencies:
+    minimist "0.0.8"
+
+mockjs2@^1.0.5:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/mockjs2/-/mockjs2-1.0.8.tgz#37ca061d6c3319d888292aef656434380971c94c"
+  integrity sha512-IXY9wzq3Pr2tybkJnT+dzrTz0GBRTtgXc7Cke/UUQyyWtbjDrck8uZ3NmMF4LaWgAD8vm8EMGcBk4Itc6nzpRg==
+  dependencies:
+    commander "*"
+
+moment@^2.21.0, moment@^2.24.0:
+  version "2.24.0"
+  resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
+  integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
+
+move-concurrently@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+  integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+  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"
+
+ms@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+  integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+  integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+
+ms@^2.1.1:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+multicast-dns-service-types@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
+  integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=
+
+multicast-dns@^6.0.1:
+  version "6.2.3"
+  resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
+  integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==
+  dependencies:
+    dns-packet "^1.3.1"
+    thunky "^1.0.2"
+
+mutationobserver-shim@^0.3.2:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz#65869630bc89d7bf8c9cd9cb82188cd955aacd2b"
+  integrity sha512-gciOLNN8Vsf7YzcqRjKzlAJ6y7e+B86u7i3KXes0xfxx/nfLmozlW1Vn+Sc9x3tPIePFgc1AeIFhtRgkqTjzDQ==
+
+mute-stream@0.0.7:
+  version "0.0.7"
+  resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+  integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+
+mz@^2.4.0:
+  version "2.7.0"
+  resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+  integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
+  dependencies:
+    any-promise "^1.0.0"
+    object-assign "^4.0.1"
+    thenify-all "^1.0.0"
+
+nan@^2.12.1:
+  version "2.14.0"
+  resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
+  integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
+
+nanomatch@^1.2.9:
+  version "1.2.13"
+  resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+  integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+  dependencies:
+    arr-diff "^4.0.0"
+    array-unique "^0.3.2"
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    fragment-cache "^0.2.1"
+    is-windows "^1.0.2"
+    kind-of "^6.0.2"
+    object.pick "^1.3.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+natural-compare@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+  integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+needle@^2.2.1:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c"
+  integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==
+  dependencies:
+    debug "^3.2.6"
+    iconv-lite "^0.4.4"
+    sax "^1.2.4"
+
+negotiator@0.6.2:
+  version "0.6.2"
+  resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+  integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+
+neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1:
+  version "2.6.1"
+  resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
+  integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
+
+nice-try@^1.0.4:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+  integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+no-case@^2.2.0:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
+  integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==
+  dependencies:
+    lower-case "^1.1.1"
+
+node-cache@^4.1.1:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-4.2.1.tgz#efd8474dee4edec4138cdded580f5516500f7334"
+  integrity sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A==
+  dependencies:
+    clone "2.x"
+    lodash "^4.17.15"
+
+node-emoji@^1.10.0:
+  version "1.10.0"
+  resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da"
+  integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==
+  dependencies:
+    lodash.toarray "^4.4.0"
+
+node-fetch@1.6.3:
+  version "1.6.3"
+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04"
+  integrity sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=
+  dependencies:
+    encoding "^0.1.11"
+    is-stream "^1.0.1"
+
+node-forge@0.9.0:
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
+  integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==
+
+node-int64@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+  integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
+
+node-ipc@^9.1.1:
+  version "9.1.1"
+  resolved "https://registry.yarnpkg.com/node-ipc/-/node-ipc-9.1.1.tgz#4e245ed6938e65100e595ebc5dc34b16e8dd5d69"
+  integrity sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w==
+  dependencies:
+    event-pubsub "4.3.0"
+    js-message "1.0.5"
+    js-queue "2.0.0"
+
+node-libs-browser@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+  integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+  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-notifier@^5.2.1:
+  version "5.4.3"
+  resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50"
+  integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==
+  dependencies:
+    growly "^1.3.0"
+    is-wsl "^1.1.0"
+    semver "^5.5.0"
+    shellwords "^0.1.1"
+    which "^1.3.0"
+
+node-pre-gyp@^0.12.0:
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149"
+  integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==
+  dependencies:
+    detect-libc "^1.0.2"
+    mkdirp "^0.5.1"
+    needle "^2.2.1"
+    nopt "^4.0.1"
+    npm-packlist "^1.1.6"
+    npmlog "^4.0.2"
+    rc "^1.2.7"
+    rimraf "^2.6.1"
+    semver "^5.3.0"
+    tar "^4"
+
+node-releases@^1.1.38:
+  version "1.1.39"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.39.tgz#c1011f30343aff5b633153b10ff691d278d08e8d"
+  integrity sha512-8MRC/ErwNCHOlAFycy9OPca46fQYUjbJRDcZTHVWIGXIjYLM73k70vv3WkYutVnM4cCo4hE0MqBVVZjP6vjISA==
+  dependencies:
+    semver "^6.3.0"
+
+nopt@^4.0.1, nopt@~4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+  integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
+  dependencies:
+    abbrev "1"
+    osenv "^0.1.4"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
+  version "2.5.0"
+  resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+  integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+  dependencies:
+    hosted-git-info "^2.1.4"
+    resolve "^1.10.0"
+    semver "2 || 3 || 4 || 5"
+    validate-npm-package-license "^3.0.1"
+
+normalize-path@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379"
+  integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=
+
+normalize-path@^2.0.1, normalize-path@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+  integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+  dependencies:
+    remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+  integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
+
+normalize-url@1.9.1:
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
+  integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=
+  dependencies:
+    object-assign "^4.0.1"
+    prepend-http "^1.0.0"
+    query-string "^4.1.0"
+    sort-keys "^1.0.0"
+
+normalize-url@^3.0.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"
+  integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==
+
+npm-bundled@^1.0.1:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd"
+  integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==
+
+npm-packlist@^1.1.6:
+  version "1.4.6"
+  resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4"
+  integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg==
+  dependencies:
+    ignore-walk "^3.0.1"
+    npm-bundled "^1.0.1"
+
+npm-run-path@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+  integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+  dependencies:
+    path-key "^2.0.0"
+
+npm-run-path@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.0.tgz#d644ec1bd0569187d2a52909971023a0a58e8438"
+  integrity sha512-8eyAOAH+bYXFPSnNnKr3J+yoybe8O87Is5rtAQ8qRczJz1ajcsjg8l2oZqP+Ppx15Ii3S1vUTjQN2h4YO2tWWQ==
+  dependencies:
+    path-key "^3.0.0"
+
+npmlog@^4.0.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+  integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+  dependencies:
+    are-we-there-yet "~1.1.2"
+    console-control-strings "~1.1.0"
+    gauge "~2.7.3"
+    set-blocking "~2.0.0"
+
+nprogress@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1"
+  integrity sha1-y480xTIT2JVyP8urkH6UIq28r7E=
+
+nth-check@^1.0.2, nth-check@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+  integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
+  dependencies:
+    boolbase "~1.0.0"
+
+num2fraction@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+  integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
+
+number-is-nan@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+  integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+nwsapi@^2.0.7:
+  version "2.1.4"
+  resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f"
+  integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==
+
+oauth-sign@~0.9.0:
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+  integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@4.x, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+  integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+  integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+  dependencies:
+    copy-descriptor "^0.1.0"
+    define-property "^0.2.5"
+    kind-of "^3.0.3"
+
+object-hash@^1.1.4:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df"
+  integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==
+
+object-inspect@^1.6.0, object-inspect@~1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b"
+  integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==
+
+object-is@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6"
+  integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=
+
+object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-visit@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+  integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+  dependencies:
+    isobject "^3.0.0"
+
+object.assign@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+  integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
+  dependencies:
+    define-properties "^1.1.2"
+    function-bind "^1.1.1"
+    has-symbols "^1.0.0"
+    object-keys "^1.0.11"
+
+object.getownpropertydescriptors@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
+  integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=
+  dependencies:
+    define-properties "^1.1.2"
+    es-abstract "^1.5.1"
+
+object.omit@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+  integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+  dependencies:
+    for-own "^0.1.4"
+    is-extendable "^0.1.1"
+
+object.pick@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+  integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+  dependencies:
+    isobject "^3.0.1"
+
+object.values@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9"
+  integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.12.0"
+    function-bind "^1.1.1"
+    has "^1.0.3"
+
+obuf@^1.0.0, obuf@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
+  integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
+
+omit.js@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/omit.js/-/omit.js-1.0.2.tgz#91a14f0eba84066dfa015bf30e474c47f30bc858"
+  integrity sha512-/QPc6G2NS+8d4L/cQhbk6Yit1WTB6Us2g84A7A/1+w9d/eRGHyEqC5kkQtHVoHZ5NFWGG7tUGgrhVZwgZanKrQ==
+  dependencies:
+    babel-runtime "^6.23.0"
+
+on-finished@~2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+  integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
+  dependencies:
+    ee-first "1.1.1"
+
+on-headers@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+  integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+  dependencies:
+    wrappy "1"
+
+onetime@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+  integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+  dependencies:
+    mimic-fn "^1.0.0"
+
+onetime@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
+  integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
+  dependencies:
+    mimic-fn "^2.1.0"
+
+open@^6.3.0:
+  version "6.4.0"
+  resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9"
+  integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==
+  dependencies:
+    is-wsl "^1.1.0"
+
+opencollective-postinstall@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89"
+  integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==
+
+opencollective@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/opencollective/-/opencollective-1.0.3.tgz#aee6372bc28144583690c3ca8daecfc120dd0ef1"
+  integrity sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=
+  dependencies:
+    babel-polyfill "6.23.0"
+    chalk "1.1.3"
+    inquirer "3.0.6"
+    minimist "1.2.0"
+    node-fetch "1.6.3"
+    opn "4.0.2"
+
+opener@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"
+  integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==
+
+opn@4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95"
+  integrity sha1-erwi5kTf9jsKltWrfyeQwPAavJU=
+  dependencies:
+    object-assign "^4.0.1"
+    pinkie-promise "^2.0.0"
+
+opn@^5.5.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
+  integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==
+  dependencies:
+    is-wsl "^1.1.0"
+
+optimist@^0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+  integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
+  dependencies:
+    minimist "~0.0.1"
+    wordwrap "~0.0.2"
+
+optionator@^0.8.1, optionator@^0.8.2:
+  version "0.8.2"
+  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+  integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
+  dependencies:
+    deep-is "~0.1.3"
+    fast-levenshtein "~2.0.4"
+    levn "~0.3.0"
+    prelude-ls "~1.1.2"
+    type-check "~0.3.2"
+    wordwrap "~1.0.0"
+
+ora@^3.4.0:
+  version "3.4.0"
+  resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318"
+  integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==
+  dependencies:
+    chalk "^2.4.2"
+    cli-cursor "^2.1.0"
+    cli-spinners "^2.0.0"
+    log-symbols "^2.2.0"
+    strip-ansi "^5.2.0"
+    wcwidth "^1.0.1"
+
+original@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
+  integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==
+  dependencies:
+    url-parse "^1.4.3"
+
+os-browserify@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+  integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
+os-homedir@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+  integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-locale@^3.0.0, os-locale@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
+  integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
+  dependencies:
+    execa "^1.0.0"
+    lcid "^2.0.0"
+    mem "^4.0.0"
+
+os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+  integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@^0.1.4:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+  integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+  dependencies:
+    os-homedir "^1.0.0"
+    os-tmpdir "^1.0.0"
+
+p-defer@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
+  integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
+
+p-finally@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+  integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-finally@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561"
+  integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==
+
+p-is-promise@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
+  integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
+
+p-limit@^1.0.0, p-limit@^1.1.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+  integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+  dependencies:
+    p-try "^1.0.0"
+
+p-limit@^2.0.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537"
+  integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==
+  dependencies:
+    p-try "^2.0.0"
+
+p-locate@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+  integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+  dependencies:
+    p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+  integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+  dependencies:
+    p-limit "^2.0.0"
+
+p-map@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+  integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+
+p-retry@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328"
+  integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==
+  dependencies:
+    retry "^0.12.0"
+
+p-try@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+  integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+pako@~1.0.5:
+  version "1.0.10"
+  resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
+  integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
+
+parallel-transform@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
+  integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
+  dependencies:
+    cyclist "^1.0.1"
+    inherits "^2.0.3"
+    readable-stream "^2.1.5"
+
+param-case@2.1.x:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
+  integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc=
+  dependencies:
+    no-case "^2.2.0"
+
+parchment@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/parchment/-/parchment-1.1.4.tgz#aeded7ab938fe921d4c34bc339ce1168bc2ffde5"
+  integrity sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==
+
+parent-module@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+  integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+  dependencies:
+    callsites "^3.0.0"
+
+parse-asn1@^5.0.0:
+  version "5.1.5"
+  resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
+  integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==
+  dependencies:
+    asn1.js "^4.0.0"
+    browserify-aes "^1.0.0"
+    create-hash "^1.1.0"
+    evp_bytestokey "^1.0.0"
+    pbkdf2 "^3.0.3"
+    safe-buffer "^5.1.1"
+
+parse-glob@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+  integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
+  dependencies:
+    glob-base "^0.3.0"
+    is-dotfile "^1.0.0"
+    is-extglob "^1.0.0"
+    is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+  integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+  dependencies:
+    error-ex "^1.2.0"
+
+parse-json@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+  integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+  dependencies:
+    error-ex "^1.3.1"
+    json-parse-better-errors "^1.0.1"
+
+parse-json@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f"
+  integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    error-ex "^1.3.1"
+    json-parse-better-errors "^1.0.1"
+    lines-and-columns "^1.1.6"
+
+parse-svg-path@~0.1.1:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb"
+  integrity sha1-en7A0esG+lMlx9PgCbhZoJtdSes=
+
+parse5@4.0.0, parse5@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
+  integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==
+
+parseurl@~1.3.2, parseurl@~1.3.3:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+  integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascalcase@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+  integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-browserify@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+  integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+  integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+path-exists@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+  integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+  dependencies:
+    pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+  integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-is-inside@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+  integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
+path-key@^2.0.0, path-key@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+  integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-key@^3.0.0, path-key@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3"
+  integrity sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==
+
+path-parse@^1.0.5, path-parse@^1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+  integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-to-regexp@0.1.7:
+  version "0.1.7"
+  resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+  integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
+
+path-type@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+  integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+  dependencies:
+    graceful-fs "^4.1.2"
+    pify "^2.0.0"
+    pinkie-promise "^2.0.0"
+
+path-type@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+  integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+  dependencies:
+    pify "^2.0.0"
+
+path-type@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+  integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+  dependencies:
+    pify "^3.0.0"
+
+pbkdf2@^3.0.3:
+  version "3.0.17"
+  resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
+  integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
+  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"
+
+performance-now@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+  integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+pify@^2.0.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+  integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+  integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
+pify@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+  integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pinkie-promise@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+  integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+  dependencies:
+    pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+  integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pkg-dir@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+  integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q=
+  dependencies:
+    find-up "^1.0.0"
+
+pkg-dir@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+  integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+  dependencies:
+    find-up "^2.1.0"
+
+pkg-dir@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+  integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+  dependencies:
+    find-up "^3.0.0"
+
+pkg-up@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f"
+  integrity sha1-yBmscoBZpGHKscOImivjxJoATX8=
+  dependencies:
+    find-up "^2.1.0"
+
+pluralize@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
+  integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
+
+pn@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
+  integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
+
+point-at-length@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/point-at-length/-/point-at-length-1.0.2.tgz#9176d8d6d7c8162f12b646f707db9f0ea728125e"
+  integrity sha1-kXbY1tfIFi8Stkb3B9ufDqcoEl4=
+  dependencies:
+    abs-svg-path "~0.1.1"
+    isarray "~0.0.1"
+    parse-svg-path "~0.1.1"
+
+portfinder@^1.0.20, portfinder@^1.0.25:
+  version "1.0.25"
+  resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca"
+  integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==
+  dependencies:
+    async "^2.6.2"
+    debug "^3.1.1"
+    mkdirp "^0.5.1"
+
+posix-character-classes@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+  integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+postcss-calc@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436"
+  integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==
+  dependencies:
+    css-unit-converter "^1.1.1"
+    postcss "^7.0.5"
+    postcss-selector-parser "^5.0.0-rc.4"
+    postcss-value-parser "^3.3.1"
+
+postcss-colormin@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381"
+  integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==
+  dependencies:
+    browserslist "^4.0.0"
+    color "^3.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-convert-values@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f"
+  integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==
+  dependencies:
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-discard-comments@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033"
+  integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-discard-duplicates@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb"
+  integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-discard-empty@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765"
+  integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-discard-overridden@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57"
+  integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-load-config@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003"
+  integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==
+  dependencies:
+    cosmiconfig "^5.0.0"
+    import-cwd "^2.0.0"
+
+postcss-loader@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d"
+  integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==
+  dependencies:
+    loader-utils "^1.1.0"
+    postcss "^7.0.0"
+    postcss-load-config "^2.0.0"
+    schema-utils "^1.0.0"
+
+postcss-merge-longhand@^4.0.11:
+  version "4.0.11"
+  resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24"
+  integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==
+  dependencies:
+    css-color-names "0.0.4"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+    stylehacks "^4.0.0"
+
+postcss-merge-rules@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650"
+  integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==
+  dependencies:
+    browserslist "^4.0.0"
+    caniuse-api "^3.0.0"
+    cssnano-util-same-parent "^4.0.0"
+    postcss "^7.0.0"
+    postcss-selector-parser "^3.0.0"
+    vendors "^1.0.0"
+
+postcss-minify-font-values@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6"
+  integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==
+  dependencies:
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-minify-gradients@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471"
+  integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==
+  dependencies:
+    cssnano-util-get-arguments "^4.0.0"
+    is-color-stop "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-minify-params@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874"
+  integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==
+  dependencies:
+    alphanum-sort "^1.0.0"
+    browserslist "^4.0.0"
+    cssnano-util-get-arguments "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+    uniqs "^2.0.0"
+
+postcss-minify-selectors@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8"
+  integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==
+  dependencies:
+    alphanum-sort "^1.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-selector-parser "^3.0.0"
+
+postcss-modules-extract-imports@^1.2.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a"
+  integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==
+  dependencies:
+    postcss "^6.0.1"
+
+postcss-modules-local-by-default@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
+  integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=
+  dependencies:
+    css-selector-tokenizer "^0.7.0"
+    postcss "^6.0.1"
+
+postcss-modules-scope@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
+  integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A=
+  dependencies:
+    css-selector-tokenizer "^0.7.0"
+    postcss "^6.0.1"
+
+postcss-modules-values@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
+  integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=
+  dependencies:
+    icss-replace-symbols "^1.1.0"
+    postcss "^6.0.1"
+
+postcss-normalize-charset@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4"
+  integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-normalize-display-values@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a"
+  integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==
+  dependencies:
+    cssnano-util-get-match "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-positions@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f"
+  integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==
+  dependencies:
+    cssnano-util-get-arguments "^4.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-repeat-style@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c"
+  integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==
+  dependencies:
+    cssnano-util-get-arguments "^4.0.0"
+    cssnano-util-get-match "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-string@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c"
+  integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==
+  dependencies:
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-timing-functions@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9"
+  integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==
+  dependencies:
+    cssnano-util-get-match "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-unicode@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb"
+  integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==
+  dependencies:
+    browserslist "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-url@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1"
+  integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==
+  dependencies:
+    is-absolute-url "^2.0.0"
+    normalize-url "^3.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-whitespace@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82"
+  integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==
+  dependencies:
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-ordered-values@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee"
+  integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==
+  dependencies:
+    cssnano-util-get-arguments "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-reduce-initial@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df"
+  integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==
+  dependencies:
+    browserslist "^4.0.0"
+    caniuse-api "^3.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+
+postcss-reduce-transforms@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29"
+  integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==
+  dependencies:
+    cssnano-util-get-match "^4.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-selector-parser@^3.0.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865"
+  integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=
+  dependencies:
+    dot-prop "^4.1.1"
+    indexes-of "^1.0.1"
+    uniq "^1.0.1"
+
+postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.4:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c"
+  integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==
+  dependencies:
+    cssesc "^2.0.0"
+    indexes-of "^1.0.1"
+    uniq "^1.0.1"
+
+postcss-svgo@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258"
+  integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==
+  dependencies:
+    is-svg "^3.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+    svgo "^1.0.0"
+
+postcss-unique-selectors@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac"
+  integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==
+  dependencies:
+    alphanum-sort "^1.0.0"
+    postcss "^7.0.0"
+    uniqs "^2.0.0"
+
+postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1:
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
+  integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
+
+postcss-value-parser@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9"
+  integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==
+
+postcss@^6.0.1, postcss@^6.0.23:
+  version "6.0.23"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
+  integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
+  dependencies:
+    chalk "^2.4.1"
+    source-map "^0.6.1"
+    supports-color "^5.4.0"
+
+postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.19, postcss@^7.0.5:
+  version "7.0.21"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17"
+  integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==
+  dependencies:
+    chalk "^2.4.2"
+    source-map "^0.6.1"
+    supports-color "^6.1.0"
+
+prelude-ls@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+prepend-http@^1.0.0:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+  integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
+
+preserve@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+  integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
+
+prettier@1.16.3:
+  version "1.16.3"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.3.tgz#8c62168453badef702f34b45b6ee899574a6a65d"
+  integrity sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==
+
+pretty-error@^2.0.2:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
+  integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=
+  dependencies:
+    renderkid "^2.0.1"
+    utila "~0.4"
+
+pretty-format@^23.6.0:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760"
+  integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==
+  dependencies:
+    ansi-regex "^3.0.0"
+    ansi-styles "^3.2.0"
+
+pretty@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/pretty/-/pretty-2.0.0.tgz#adbc7960b7bbfe289a557dc5f737619a220d06a5"
+  integrity sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=
+  dependencies:
+    condense-newlines "^0.2.1"
+    extend-shallow "^2.0.1"
+    js-beautify "^1.6.12"
+
+private@^0.1.6, private@^0.1.8:
+  version "0.1.8"
+  resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+  integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
+
+process-nextick-args@~2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@^0.11.10:
+  version "0.11.10"
+  resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+  integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+progress@^2.0.0:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise-inflight@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+  integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
+promise@^7.1.1:
+  version "7.3.1"
+  resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
+  integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
+  dependencies:
+    asap "~2.0.3"
+
+prompts@^0.1.9:
+  version "0.1.14"
+  resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2"
+  integrity sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==
+  dependencies:
+    kleur "^2.0.1"
+    sisteransi "^0.1.1"
+
+proto-list@~1.2.1:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+  integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
+
+proxy-addr@~2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34"
+  integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==
+  dependencies:
+    forwarded "~0.1.2"
+    ipaddr.js "1.9.0"
+
+prr@~1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+  integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
+pseudomap@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+  integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+psl@^1.1.24, psl@^1.1.28:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2"
+  integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==
+
+public-encrypt@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+  integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+  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"
+
+pump@^2.0.0, pump@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+  integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+  dependencies:
+    end-of-stream "^1.1.0"
+    once "^1.3.1"
+
+pump@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+  dependencies:
+    end-of-stream "^1.1.0"
+    once "^1.3.1"
+
+pumpify@^1.3.3:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+  integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+  dependencies:
+    duplexify "^3.6.0"
+    inherits "^2.0.3"
+    pump "^2.0.0"
+
+punycode@1.3.2:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+  integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4, punycode@^1.4.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+  integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0, punycode@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+  integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+q@^1.1.2:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+  integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
+qs@6.7.0:
+  version "6.7.0"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
+  integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
+
+qs@~6.5.2:
+  version "6.5.2"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+  integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+query-string@^4.1.0:
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
+  integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s=
+  dependencies:
+    object-assign "^4.1.0"
+    strict-uri-encode "^1.0.0"
+
+querystring-es3@^0.2.0:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+  integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+  integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+querystringify@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
+  integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
+
+quill-delta@^3.6.2:
+  version "3.6.3"
+  resolved "https://registry.yarnpkg.com/quill-delta/-/quill-delta-3.6.3.tgz#b19fd2b89412301c60e1ff213d8d860eac0f1032"
+  integrity sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==
+  dependencies:
+    deep-equal "^1.0.1"
+    extend "^3.0.2"
+    fast-diff "1.1.2"
+
+quill@^1.3.4:
+  version "1.3.7"
+  resolved "https://registry.yarnpkg.com/quill/-/quill-1.3.7.tgz#da5b2f3a2c470e932340cdbf3668c9f21f9286e8"
+  integrity sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==
+  dependencies:
+    clone "^2.1.1"
+    deep-equal "^1.0.1"
+    eventemitter3 "^2.0.3"
+    extend "^3.0.2"
+    parchment "^1.1.4"
+    quill-delta "^3.6.2"
+
+raf@^3.4.0:
+  version "3.4.1"
+  resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
+  integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
+  dependencies:
+    performance-now "^2.1.0"
+
+randomatic@^3.0.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed"
+  integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==
+  dependencies:
+    is-number "^4.0.0"
+    kind-of "^6.0.0"
+    math-random "^1.0.1"
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+  integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+  dependencies:
+    safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+  integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+  dependencies:
+    randombytes "^2.0.5"
+    safe-buffer "^5.1.0"
+
+range-parser@^1.2.1, range-parser@~1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+  integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
+  integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
+  dependencies:
+    bytes "3.1.0"
+    http-errors "1.7.2"
+    iconv-lite "0.4.24"
+    unpipe "1.0.0"
+
+rc@^1.2.7:
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+  integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+  dependencies:
+    deep-extend "^0.6.0"
+    ini "~1.3.0"
+    minimist "^1.2.0"
+    strip-json-comments "~2.0.1"
+
+read-pkg-up@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+  integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+  dependencies:
+    find-up "^1.0.0"
+    read-pkg "^1.0.0"
+
+read-pkg-up@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+  integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+  dependencies:
+    find-up "^2.0.0"
+    read-pkg "^2.0.0"
+
+read-pkg@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+  integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+  dependencies:
+    load-json-file "^1.0.0"
+    normalize-package-data "^2.3.2"
+    path-type "^1.0.0"
+
+read-pkg@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+  integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+  dependencies:
+    load-json-file "^2.0.0"
+    normalize-package-data "^2.3.2"
+    path-type "^2.0.0"
+
+read-pkg@^5.0.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
+  integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
+  dependencies:
+    "@types/normalize-package-data" "^2.4.0"
+    normalize-package-data "^2.5.0"
+    parse-json "^5.0.0"
+    type-fest "^0.6.0"
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
+  version "2.3.6"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+  integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+  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"
+
+readable-stream@^3.0.6, readable-stream@^3.1.1:
+  version "3.4.0"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
+  integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
+readdirp@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+  integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+  dependencies:
+    graceful-fs "^4.1.11"
+    micromatch "^3.1.10"
+    readable-stream "^2.0.2"
+
+realpath-native@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c"
+  integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==
+  dependencies:
+    util.promisify "^1.0.0"
+
+regenerate-unicode-properties@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e"
+  integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==
+  dependencies:
+    regenerate "^1.4.0"
+
+regenerate@^1.2.1, regenerate@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
+  integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
+
+regenerator-runtime@^0.10.0:
+  version "0.10.5"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
+  integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=
+
+regenerator-runtime@^0.11.0:
+  version "0.11.1"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+  integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.13.2:
+  version "0.13.3"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
+  integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==
+
+regenerator-transform@^0.14.0:
+  version "0.14.1"
+  resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb"
+  integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==
+  dependencies:
+    private "^0.1.6"
+
+regex-cache@^0.4.2:
+  version "0.4.4"
+  resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
+  integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
+  dependencies:
+    is-equal-shallow "^0.1.3"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+  integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+  dependencies:
+    extend-shallow "^3.0.2"
+    safe-regex "^1.1.0"
+
+regexp.prototype.flags@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c"
+  integrity sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==
+  dependencies:
+    define-properties "^1.1.2"
+
+regexpp@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab"
+  integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==
+
+regexpp@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
+  integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+
+regexpu-core@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
+  integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=
+  dependencies:
+    regenerate "^1.2.1"
+    regjsgen "^0.2.0"
+    regjsparser "^0.1.4"
+
+regexpu-core@^4.6.0:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6"
+  integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==
+  dependencies:
+    regenerate "^1.4.0"
+    regenerate-unicode-properties "^8.1.0"
+    regjsgen "^0.5.0"
+    regjsparser "^0.6.0"
+    unicode-match-property-ecmascript "^1.0.4"
+    unicode-match-property-value-ecmascript "^1.1.0"
+
+regjsgen@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
+  integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=
+
+regjsgen@^0.5.0:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c"
+  integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==
+
+regjsparser@^0.1.4:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
+  integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=
+  dependencies:
+    jsesc "~0.5.0"
+
+regjsparser@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c"
+  integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==
+  dependencies:
+    jsesc "~0.5.0"
+
+regression@~2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/regression/-/regression-2.0.1.tgz#8d29c3e8224a10850c35e337e85a8b2fac3b0c87"
+  integrity sha1-jSnD6CJKEIUMNeM36FqLL6w7DIc=
+
+relateurl@0.2.x:
+  version "0.2.7"
+  resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+  integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
+
+remove-trailing-separator@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+  integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+renderkid@^2.0.1:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149"
+  integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==
+  dependencies:
+    css-select "^1.1.0"
+    dom-converter "^0.2"
+    htmlparser2 "^3.3.0"
+    strip-ansi "^3.0.0"
+    utila "^0.4.0"
+
+repeat-element@^1.1.2:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+  integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^1.5.2, repeat-string@^1.6.1:
+  version "1.6.1"
+  resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+  integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+  integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+  dependencies:
+    is-finite "^1.0.0"
+
+request-promise-core@1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346"
+  integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==
+  dependencies:
+    lodash "^4.17.11"
+
+request-promise-native@^1.0.5, request-promise-native@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59"
+  integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==
+  dependencies:
+    request-promise-core "1.1.2"
+    stealthy-require "^1.1.1"
+    tough-cookie "^2.3.3"
+
+request@^2.83.0, request@^2.87.0:
+  version "2.88.0"
+  resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
+  integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
+  dependencies:
+    aws-sign2 "~0.7.0"
+    aws4 "^1.8.0"
+    caseless "~0.12.0"
+    combined-stream "~1.0.6"
+    extend "~3.0.2"
+    forever-agent "~0.6.1"
+    form-data "~2.3.2"
+    har-validator "~5.1.0"
+    http-signature "~1.2.0"
+    is-typedarray "~1.0.0"
+    isstream "~0.1.2"
+    json-stringify-safe "~5.0.1"
+    mime-types "~2.1.19"
+    oauth-sign "~0.9.0"
+    performance-now "^2.1.0"
+    qs "~6.5.2"
+    safe-buffer "^5.1.2"
+    tough-cookie "~2.4.3"
+    tunnel-agent "^0.6.0"
+    uuid "^3.3.2"
+
+require-directory@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+  integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+  integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
+
+require-main-filename@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+  integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+require-uncached@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+  integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
+  dependencies:
+    caller-path "^0.1.0"
+    resolve-from "^1.0.0"
+
+requires-port@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+  integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
+
+reselect@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147"
+  integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=
+
+resize-observer-polyfill@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
+  integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
+
+resolve-cwd@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+  integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+  dependencies:
+    resolve-from "^3.0.0"
+
+resolve-from@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+  integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
+
+resolve-from@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+  integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-from@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-url@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+  integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@1.1.7:
+  version "1.1.7"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+  integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
+
+resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1:
+  version "1.12.0"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6"
+  integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==
+  dependencies:
+    path-parse "^1.0.6"
+
+resolve@~1.11.1:
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e"
+  integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==
+  dependencies:
+    path-parse "^1.0.6"
+
+restore-cursor@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+  integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+  dependencies:
+    onetime "^2.0.0"
+    signal-exit "^3.0.2"
+
+resumer@~0.0.0:
+  version "0.0.0"
+  resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759"
+  integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=
+  dependencies:
+    through "~2.3.4"
+
+ret@~0.1.10:
+  version "0.1.15"
+  resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+  integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+retry@^0.12.0:
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+  integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
+
+rgb-regex@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1"
+  integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE=
+
+rgba-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3"
+  integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=
+
+right-align@^0.1.1:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+  integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
+  dependencies:
+    align-text "^0.1.1"
+
+rimraf@2.6.3, rimraf@~2.6.2:
+  version "2.6.3"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+  integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+  dependencies:
+    glob "^7.1.3"
+
+rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+  dependencies:
+    glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+  integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+  dependencies:
+    hash-base "^3.0.0"
+    inherits "^2.0.1"
+
+rollup@^0.25.8:
+  version "0.25.8"
+  resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.25.8.tgz#bf6ce83b87510d163446eeaa577ed6a6fc5835e0"
+  integrity sha1-v2zoO4dRDRY0Ru6qV37WpvxYNeA=
+  dependencies:
+    chalk "^1.1.1"
+    minimist "^1.2.0"
+    source-map-support "^0.3.2"
+
+rsvp@^3.3.3:
+  version "3.6.2"
+  resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a"
+  integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==
+
+run-async@^2.2.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
+  integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
+  dependencies:
+    is-promise "^2.1.0"
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+  integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+  dependencies:
+    aproba "^1.1.1"
+
+rw@1, rw@^1.3.2:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
+  integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=
+
+rx-lite-aggregates@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
+  integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=
+  dependencies:
+    rx-lite "*"
+
+rx-lite@*, rx-lite@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
+  integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
+
+rx@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782"
+  integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=
+
+rxjs@^6.4.0:
+  version "6.5.3"
+  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a"
+  integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==
+  dependencies:
+    tslib "^1.9.0"
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
+  integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
+
+safe-regex@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+  integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+  dependencies:
+    ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sane@^2.0.0:
+  version "2.5.2"
+  resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa"
+  integrity sha1-tNwYYcIbQn6SlQej51HiosuKs/o=
+  dependencies:
+    anymatch "^2.0.0"
+    capture-exit "^1.2.0"
+    exec-sh "^0.2.0"
+    fb-watchman "^2.0.0"
+    micromatch "^3.1.4"
+    minimist "^1.1.1"
+    walker "~1.0.5"
+    watch "~0.18.0"
+  optionalDependencies:
+    fsevents "^1.2.3"
+
+sax@^1.2.4, sax@~1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+  integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+schema-utils@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+  integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+  dependencies:
+    ajv "^6.1.0"
+    ajv-errors "^1.0.0"
+    ajv-keywords "^3.1.0"
+
+select-hose@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
+  integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
+
+select@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
+  integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
+
+selfsigned@^1.10.7:
+  version "1.10.7"
+  resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b"
+  integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==
+  dependencies:
+    node-forge "0.9.0"
+
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@^6.0.0, semver@^6.3.0:
+  version "6.3.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+send@0.17.1:
+  version "0.17.1"
+  resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
+  integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
+  dependencies:
+    debug "2.6.9"
+    depd "~1.1.2"
+    destroy "~1.0.4"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    etag "~1.8.1"
+    fresh "0.5.2"
+    http-errors "~1.7.2"
+    mime "1.6.0"
+    ms "2.1.1"
+    on-finished "~2.3.0"
+    range-parser "~1.2.1"
+    statuses "~1.5.0"
+
+serialize-javascript@^1.4.0, serialize-javascript@^1.7.0:
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb"
+  integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==
+
+serve-index@^1.9.1:
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
+  integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=
+  dependencies:
+    accepts "~1.3.4"
+    batch "0.6.1"
+    debug "2.6.9"
+    escape-html "~1.0.3"
+    http-errors "~1.6.2"
+    mime-types "~2.1.17"
+    parseurl "~1.3.2"
+
+serve-static@1.14.1:
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
+  integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
+  dependencies:
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    parseurl "~1.3.3"
+    send "0.17.1"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+  integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+  integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-extendable "^0.1.1"
+    is-plain-object "^2.0.3"
+    split-string "^3.0.1"
+
+setimmediate@^1.0.4:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+  integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+setprototypeof@1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+  integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+
+setprototypeof@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
+  integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+  version "2.4.11"
+  resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+  integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+  dependencies:
+    inherits "^2.0.1"
+    safe-buffer "^5.0.1"
+
+shallow-equal@^1.0.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.0.tgz#fd828d2029ff4e19569db7e19e535e94e2d1f5cc"
+  integrity sha512-Z21pVxR4cXsfwpMKMhCEIO1PCi5sp7KEp+CmOpBQ+E8GpHwKOw2sEzk7sgblM3d/j4z4gakoWEoPcjK0VJQogA==
+
+shallowequal@^1.0.2:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
+  integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
+
+shebang-command@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+  integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+  dependencies:
+    shebang-regex "^1.0.0"
+
+shebang-command@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+  dependencies:
+    shebang-regex "^3.0.0"
+
+shebang-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+  integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shebang-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shell-quote@^1.6.1:
+  version "1.7.2"
+  resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2"
+  integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==
+
+shellwords@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
+  integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
+
+sigmund@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
+  integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+  integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+simple-statistics@~6.1.0:
+  version "6.1.1"
+  resolved "https://registry.yarnpkg.com/simple-statistics/-/simple-statistics-6.1.1.tgz#e3a0799ffc49914d6f421c5a4ac585f6a13e2bad"
+  integrity sha512-zGwn0DDRa9Zel4H4n2pjTFIyGoAGpnpjrGIctreCxj5XWrcx9v7Xy7270FkC967WMmcvuc8ZU7m0ZG+hGN7gAA==
+
+simple-swizzle@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+  integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=
+  dependencies:
+    is-arrayish "^0.3.1"
+
+sisteransi@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce"
+  integrity sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==
+
+slash@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+  integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+slash@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+  integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
+slice-ansi@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
+  integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==
+  dependencies:
+    is-fullwidth-code-point "^2.0.0"
+
+slice-ansi@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+  integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+  dependencies:
+    ansi-styles "^3.2.0"
+    astral-regex "^1.0.0"
+    is-fullwidth-code-point "^2.0.0"
+
+snapdragon-node@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+  integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+  dependencies:
+    define-property "^1.0.0"
+    isobject "^3.0.0"
+    snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+  integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+  dependencies:
+    kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+  version "0.8.2"
+  resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+  integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+  dependencies:
+    base "^0.11.1"
+    debug "^2.2.0"
+    define-property "^0.2.5"
+    extend-shallow "^2.0.1"
+    map-cache "^0.2.2"
+    source-map "^0.5.6"
+    source-map-resolve "^0.5.0"
+    use "^3.1.0"
+
+sockjs-client@1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5"
+  integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==
+  dependencies:
+    debug "^3.2.5"
+    eventsource "^1.0.7"
+    faye-websocket "~0.11.1"
+    inherits "^2.0.3"
+    json3 "^3.3.2"
+    url-parse "^1.4.3"
+
+sockjs@0.3.19:
+  version "0.3.19"
+  resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d"
+  integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==
+  dependencies:
+    faye-websocket "^0.10.0"
+    uuid "^3.0.1"
+
+sort-keys@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+  integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0=
+  dependencies:
+    is-plain-obj "^1.0.0"
+
+source-list-map@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+  integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
+  integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
+  dependencies:
+    atob "^2.1.1"
+    decode-uri-component "^0.2.0"
+    resolve-url "^0.2.1"
+    source-map-url "^0.4.0"
+    urix "^0.1.0"
+
+source-map-support@^0.3.2:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.3.3.tgz#34900977d5ba3f07c7757ee72e73bb1a9b53754f"
+  integrity sha1-NJAJd9W6PwfHdX7nLnO7GptTdU8=
+  dependencies:
+    source-map "0.1.32"
+
+source-map-support@^0.4.15:
+  version "0.4.18"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
+  integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==
+  dependencies:
+    source-map "^0.5.6"
+
+source-map-support@^0.5.6, source-map-support@~0.5.12:
+  version "0.5.13"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
+  integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
+  dependencies:
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+  integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@0.1.32:
+  version "0.1.32"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266"
+  integrity sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=
+  dependencies:
+    amdefine ">=0.0.4"
+
+source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
+  version "0.5.7"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+  integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+spdx-correct@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
+  integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
+  dependencies:
+    spdx-expression-parse "^3.0.0"
+    spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
+  integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
+
+spdx-expression-parse@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+  integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
+  dependencies:
+    spdx-exceptions "^2.1.0"
+    spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+  version "3.0.5"
+  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
+  integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
+
+spdy-transport@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
+  integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
+  dependencies:
+    debug "^4.1.0"
+    detect-node "^2.0.4"
+    hpack.js "^2.1.6"
+    obuf "^1.1.2"
+    readable-stream "^3.0.6"
+    wbuf "^1.7.3"
+
+spdy@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2"
+  integrity sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==
+  dependencies:
+    debug "^4.1.0"
+    handle-thing "^2.0.0"
+    http-deceiver "^1.2.7"
+    select-hose "^2.0.0"
+    spdy-transport "^3.0.0"
+
+split-string@^3.0.1, split-string@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+  integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+  dependencies:
+    extend-shallow "^3.0.0"
+
+sprintf-js@~1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+  integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+sshpk@^1.7.0:
+  version "1.16.1"
+  resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+  integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+  dependencies:
+    asn1 "~0.2.3"
+    assert-plus "^1.0.0"
+    bcrypt-pbkdf "^1.0.0"
+    dashdash "^1.12.0"
+    ecc-jsbn "~0.1.1"
+    getpass "^0.1.1"
+    jsbn "~0.1.0"
+    safer-buffer "^2.0.2"
+    tweetnacl "~0.14.0"
+
+ssri@^5.2.4:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06"
+  integrity sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==
+  dependencies:
+    safe-buffer "^5.1.1"
+
+ssri@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
+  integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
+  dependencies:
+    figgy-pudding "^3.5.1"
+
+stable@^0.1.8:
+  version "0.1.8"
+  resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
+  integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
+
+stack-utils@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
+  integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==
+
+stackframe@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.1.0.tgz#e3fc2eb912259479c9822f7d1f1ff365bd5cbc83"
+  integrity sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg==
+
+static-extend@^0.1.1:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+  integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+  dependencies:
+    define-property "^0.2.5"
+    object-copy "^0.1.0"
+
+"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+  integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+stealthy-require@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+  integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
+
+stream-browserify@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+  integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+  dependencies:
+    inherits "~2.0.1"
+    readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+  integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+  dependencies:
+    end-of-stream "^1.1.0"
+    stream-shift "^1.0.0"
+
+stream-http@^2.7.2:
+  version "2.8.3"
+  resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+  integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+  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"
+
+stream-shift@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+  integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=
+
+strict-uri-encode@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+  integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
+
+string-convert@^0.2.0:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97"
+  integrity sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c=
+
+string-length@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"
+  integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=
+  dependencies:
+    astral-regex "^1.0.0"
+    strip-ansi "^4.0.0"
+
+string-width@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+  integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+  dependencies:
+    code-point-at "^1.0.0"
+    is-fullwidth-code-point "^1.0.0"
+    strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+  integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+  dependencies:
+    is-fullwidth-code-point "^2.0.0"
+    strip-ansi "^4.0.0"
+
+string-width@^3.0.0, string-width@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+  integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+  dependencies:
+    emoji-regex "^7.0.1"
+    is-fullwidth-code-point "^2.0.0"
+    strip-ansi "^5.1.0"
+
+string.prototype.padend@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0"
+  integrity sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=
+  dependencies:
+    define-properties "^1.1.2"
+    es-abstract "^1.4.3"
+    function-bind "^1.0.2"
+
+string.prototype.padstart@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz#5bcfad39f4649bb2d031292e19bcf0b510d4b242"
+  integrity sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI=
+  dependencies:
+    define-properties "^1.1.2"
+    es-abstract "^1.4.3"
+    function-bind "^1.0.2"
+
+string.prototype.trim@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea"
+  integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=
+  dependencies:
+    define-properties "^1.1.2"
+    es-abstract "^1.5.0"
+    function-bind "^1.0.2"
+
+string.prototype.trimleft@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634"
+  integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==
+  dependencies:
+    define-properties "^1.1.3"
+    function-bind "^1.1.1"
+
+string.prototype.trimright@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58"
+  integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==
+  dependencies:
+    define-properties "^1.1.3"
+    function-bind "^1.1.1"
+
+string_decoder@^1.0.0, string_decoder@^1.1.1:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+  integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+  dependencies:
+    safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+  dependencies:
+    safe-buffer "~5.1.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+  integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+  dependencies:
+    ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+  integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+  dependencies:
+    ansi-regex "^3.0.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+  integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+  dependencies:
+    ansi-regex "^4.1.0"
+
+strip-bom@3.0.0, strip-bom@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+  integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-bom@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+  integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+  dependencies:
+    is-utf8 "^0.2.0"
+
+strip-eof@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+  integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-final-newline@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+  integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-indent@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
+  integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=
+
+strip-json-comments@^2.0.0, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+  integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+style-loader@^0.23.1:
+  version "0.23.1"
+  resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925"
+  integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==
+  dependencies:
+    loader-utils "^1.1.0"
+    schema-utils "^1.0.0"
+
+stylehacks@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
+  integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==
+  dependencies:
+    browserslist "^4.0.0"
+    postcss "^7.0.0"
+    postcss-selector-parser "^3.0.0"
+
+supports-color@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+  integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^3.1.2:
+  version "3.2.3"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+  integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
+  dependencies:
+    has-flag "^1.0.0"
+
+supports-color@^5.3.0, supports-color@^5.4.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+  dependencies:
+    has-flag "^3.0.0"
+
+supports-color@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+  integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+  dependencies:
+    has-flag "^3.0.0"
+
+svg-tags@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
+  integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=
+
+svgo@^1.0.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.0.tgz#bae51ba95ded9a33a36b7c46ce9c359ae9154313"
+  integrity sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==
+  dependencies:
+    chalk "^2.4.1"
+    coa "^2.0.2"
+    css-select "^2.0.0"
+    css-select-base-adapter "^0.1.1"
+    css-tree "1.0.0-alpha.33"
+    csso "^3.5.1"
+    js-yaml "^3.13.1"
+    mkdirp "~0.5.1"
+    object.values "^1.1.0"
+    sax "~1.2.4"
+    stable "^0.1.8"
+    unquote "~1.1.1"
+    util.promisify "~1.0.0"
+
+symbol-tree@^3.2.2:
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+  integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
+table@4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
+  integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==
+  dependencies:
+    ajv "^5.2.3"
+    ajv-keywords "^2.1.0"
+    chalk "^2.1.0"
+    lodash "^4.17.4"
+    slice-ansi "1.0.0"
+    string-width "^2.1.1"
+
+table@^5.2.3:
+  version "5.4.6"
+  resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
+  integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+  dependencies:
+    ajv "^6.10.2"
+    lodash "^4.17.14"
+    slice-ansi "^2.1.0"
+    string-width "^3.0.0"
+
+tapable@^1.0.0, tapable@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+  integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+tape@^4.5.1:
+  version "4.11.0"
+  resolved "https://registry.yarnpkg.com/tape/-/tape-4.11.0.tgz#63d41accd95e45a23a874473051c57fdbc58edc1"
+  integrity sha512-yixvDMX7q7JIs/omJSzSZrqulOV51EC9dK8dM0TzImTIkHWfe2/kFyL5v+d9C+SrCMaICk59ujsqFAVidDqDaA==
+  dependencies:
+    deep-equal "~1.0.1"
+    defined "~1.0.0"
+    for-each "~0.3.3"
+    function-bind "~1.1.1"
+    glob "~7.1.4"
+    has "~1.0.3"
+    inherits "~2.0.4"
+    minimist "~1.2.0"
+    object-inspect "~1.6.0"
+    resolve "~1.11.1"
+    resumer "~0.0.0"
+    string.prototype.trim "~1.1.2"
+    through "~2.3.8"
+
+tar@^4:
+  version "4.4.13"
+  resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
+  integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
+  dependencies:
+    chownr "^1.1.1"
+    fs-minipass "^1.2.5"
+    minipass "^2.8.6"
+    minizlib "^1.2.1"
+    mkdirp "^0.5.0"
+    safe-buffer "^5.1.2"
+    yallist "^3.0.3"
+
+terser-webpack-plugin@^1.2.3, terser-webpack-plugin@^1.4.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4"
+  integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==
+  dependencies:
+    cacache "^12.0.2"
+    find-cache-dir "^2.1.0"
+    is-wsl "^1.1.0"
+    schema-utils "^1.0.0"
+    serialize-javascript "^1.7.0"
+    source-map "^0.6.1"
+    terser "^4.1.2"
+    webpack-sources "^1.4.0"
+    worker-farm "^1.7.0"
+
+terser@^4.1.2:
+  version "4.3.9"
+  resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.9.tgz#e4be37f80553d02645668727777687dad26bbca8"
+  integrity sha512-NFGMpHjlzmyOtPL+fDw3G7+6Ueh/sz4mkaUYa4lJCxOPTNzd0Uj0aZJOmsDYoSQyfuVoWDMSWTPU3huyOm2zdA==
+  dependencies:
+    commander "^2.20.0"
+    source-map "~0.6.1"
+    source-map-support "~0.5.12"
+
+test-exclude@^4.2.1:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20"
+  integrity sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==
+  dependencies:
+    arrify "^1.0.1"
+    micromatch "^2.3.11"
+    object-assign "^4.1.0"
+    read-pkg-up "^1.0.1"
+    require-main-filename "^1.0.1"
+
+text-table@^0.2.0, text-table@~0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+  integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+thenify-all@^1.0.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+  integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
+  dependencies:
+    thenify ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839"
+  integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=
+  dependencies:
+    any-promise "^1.0.0"
+
+thread-loader@^2.1.2:
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.3.tgz#cbd2c139fc2b2de6e9d28f62286ab770c1acbdda"
+  integrity sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==
+  dependencies:
+    loader-runner "^2.3.1"
+    loader-utils "^1.1.0"
+    neo-async "^2.6.0"
+
+throat@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
+  integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=
+
+throttle-debounce@^2.0.1:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.1.0.tgz#257e648f0a56bd9e54fe0f132c4ab8611df4e1d5"
+  integrity sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg==
+
+through2@^2.0.0:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+  integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+  dependencies:
+    readable-stream "~2.3.6"
+    xtend "~4.0.1"
+
+through@^2.3.6, through@~2.3.4, through@~2.3.8:
+  version "2.3.8"
+  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+  integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+thunky@^1.0.2:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
+  integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
+
+timers-browserify@^2.0.4:
+  version "2.0.11"
+  resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f"
+  integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==
+  dependencies:
+    setimmediate "^1.0.4"
+
+timsort@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
+  integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
+
+tiny-emitter@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
+  integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
+
+tinycolor2@^1.4.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
+  integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=
+
+tmp@^0.0.33:
+  version "0.0.33"
+  resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+  integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+  dependencies:
+    os-tmpdir "~1.0.2"
+
+tmpl@1.0.x:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+  integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
+
+to-arraybuffer@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+  integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-fast-properties@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+  integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
+
+to-fast-properties@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+  integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-object-path@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+  integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+  dependencies:
+    kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+  integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+  dependencies:
+    is-number "^3.0.0"
+    repeat-string "^1.6.1"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+  integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+  dependencies:
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    regex-not "^1.0.2"
+    safe-regex "^1.1.0"
+
+toidentifier@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
+  integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+
+topojson-client@~3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.0.1.tgz#774c0343b44fc4ec29c3a2274d7a1a9c3b213cd9"
+  integrity sha512-rfGGzyqefpxOaxvV9OTF9t+1g+WhjGEbAIuCcmKYrQkxr0nttjMMyzZsK+NhLW4cTl2g1bz2jQczPUtEshpbVQ==
+  dependencies:
+    commander "2"
+
+toposort@^1.0.0:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029"
+  integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk=
+
+tough-cookie@^2.3.3, tough-cookie@^2.3.4:
+  version "2.5.0"
+  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+  integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+  dependencies:
+    psl "^1.1.28"
+    punycode "^2.1.1"
+
+tough-cookie@~2.4.3:
+  version "2.4.3"
+  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
+  integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
+  dependencies:
+    psl "^1.1.24"
+    punycode "^1.4.1"
+
+tr46@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+  integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
+  dependencies:
+    punycode "^2.1.0"
+
+trim-right@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+  integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
+
+tryer@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
+  integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==
+
+tsconfig@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7"
+  integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==
+  dependencies:
+    "@types/strip-bom" "^3.0.0"
+    "@types/strip-json-comments" "0.0.30"
+    strip-bom "^3.0.0"
+    strip-json-comments "^2.0.0"
+
+tslib@^1.9.0:
+  version "1.10.0"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
+  integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
+
+tty-browserify@0.0.0:
+  version "0.0.0"
+  resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+  integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+tunnel-agent@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+  integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+  dependencies:
+    safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+  version "0.14.5"
+  resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+  integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+type-check@~0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+  integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+  dependencies:
+    prelude-ls "~1.1.2"
+
+type-fest@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
+  integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
+
+type-is@~1.6.17, type-is@~1.6.18:
+  version "1.6.18"
+  resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+  integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+  dependencies:
+    media-typer "0.3.0"
+    mime-types "~2.1.24"
+
+typedarray@^0.0.6:
+  version "0.0.6"
+  resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+  integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+uglify-js@3.4.x:
+  version "3.4.10"
+  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f"
+  integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==
+  dependencies:
+    commander "~2.19.0"
+    source-map "~0.6.1"
+
+uglify-js@^2.6.2:
+  version "2.8.29"
+  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
+  integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0=
+  dependencies:
+    source-map "~0.5.1"
+    yargs "~3.10.0"
+  optionalDependencies:
+    uglify-to-browserify "~1.0.0"
+
+uglify-js@^3.1.4:
+  version "3.6.4"
+  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.4.tgz#88cc880c6ed5cf9868fdfa0760654e7bed463f1d"
+  integrity sha512-9Yc2i881pF4BPGhjteCXQNaXx1DCwm3dtOyBaG2hitHjLWOczw/ki8vD1bqyT3u6K0Ms/FpCShkmfg+FtlOfYA==
+  dependencies:
+    commander "~2.20.3"
+    source-map "~0.6.1"
+
+uglify-to-browserify@~1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+  integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
+
+unicode-canonical-property-names-ecmascript@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
+  integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
+
+unicode-match-property-ecmascript@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
+  integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
+  dependencies:
+    unicode-canonical-property-names-ecmascript "^1.0.4"
+    unicode-property-aliases-ecmascript "^1.0.4"
+
+unicode-match-property-value-ecmascript@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277"
+  integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==
+
+unicode-property-aliases-ecmascript@^1.0.4:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57"
+  integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==
+
+union-value@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+  integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+  dependencies:
+    arr-union "^3.1.0"
+    get-value "^2.0.6"
+    is-extendable "^0.1.1"
+    set-value "^2.0.1"
+
+uniq@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+  integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
+
+uniqs@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
+  integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI=
+
+unique-filename@^1.1.0, unique-filename@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+  integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+  dependencies:
+    unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+  integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+  dependencies:
+    imurmurhash "^0.1.4"
+
+universalify@^0.1.0:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+  integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+unpipe@1.0.0, unpipe@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+  integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+
+unquote@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
+  integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=
+
+unset-value@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+  integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+  dependencies:
+    has-value "^0.3.1"
+    isobject "^3.0.0"
+
+upath@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+  integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
+upper-case@^1.1.1:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+  integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=
+
+uri-js@^4.2.2:
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+  integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+  dependencies:
+    punycode "^2.1.0"
+
+urix@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+  integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url-loader@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8"
+  integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==
+  dependencies:
+    loader-utils "^1.1.0"
+    mime "^2.0.3"
+    schema-utils "^1.0.0"
+
+url-parse@^1.4.3:
+  version "1.4.7"
+  resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
+  integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==
+  dependencies:
+    querystringify "^2.1.1"
+    requires-port "^1.0.0"
+
+url-search-params-polyfill@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/url-search-params-polyfill/-/url-search-params-polyfill-7.0.0.tgz#98b56ed29e67710588fdc3c361083b0f78303d95"
+  integrity sha512-0SEH3s+wCNbxEE/rWUalN004ICNi23Q74Ksc0gS2kG8EXnbayxGOrV97JdwnIVPKZ75Xk0hvKXvtIC4xReLMgg==
+
+url@^0.11.0:
+  version "0.11.0"
+  resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+  integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+  dependencies:
+    punycode "1.3.2"
+    querystring "0.2.0"
+
+use@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+  integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
+  integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
+  dependencies:
+    define-properties "^1.1.2"
+    object.getownpropertydescriptors "^2.0.3"
+
+util@0.10.3:
+  version "0.10.3"
+  resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+  integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+  dependencies:
+    inherits "2.0.1"
+
+util@^0.11.0:
+  version "0.11.1"
+  resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+  integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+  dependencies:
+    inherits "2.0.3"
+
+utila@^0.4.0, utila@~0.4:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+  integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=
+
+utils-merge@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+  integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
+
+uuid@^3.0.1, uuid@^3.3.2:
+  version "3.3.3"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866"
+  integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==
+
+v-viewer@^1.4.2:
+  version "1.4.2"
+  resolved "https://registry.yarnpkg.com/v-viewer/-/v-viewer-1.4.2.tgz#23c31a037091445b6cba8aaa287e7e00a73f0971"
+  integrity sha512-WEslW+dKPHg10f9jl1v0ilH0uk4ZFOz4vUp4wJjomwl+VQEnsWLjSzHCeFoayxjE9KyZspVu9lYLNxk+o3xzkw==
+  dependencies:
+    throttle-debounce "^2.0.1"
+    viewerjs "^1.3.2"
+
+validate-npm-package-license@^3.0.1:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+  integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+  dependencies:
+    spdx-correct "^3.0.0"
+    spdx-expression-parse "^3.0.0"
+
+vary@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+  integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+
+vendors@^1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0"
+  integrity sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==
+
+venn.js@~0.2.20:
+  version "0.2.20"
+  resolved "https://registry.yarnpkg.com/venn.js/-/venn.js-0.2.20.tgz#3f0e50cc75cba1f58692a8a32f67bd7aaf1aa6fa"
+  integrity sha512-bb5SYq/wamY9fvcuErb9a0FJkgIFHJjkLZWonQ+DoKKuDX3WPH2B4ouI1ce4K2iejBklQy6r1ly8nOGIyOCO6w==
+  dependencies:
+    d3-selection "^1.0.2"
+    d3-transition "^1.0.1"
+    fmin "0.0.2"
+
+verror@1.10.0:
+  version "1.10.0"
+  resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+  integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+  dependencies:
+    assert-plus "^1.0.0"
+    core-util-is "1.0.2"
+    extsprintf "^1.2.0"
+
+viewerjs@^1.3.2:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/viewerjs/-/viewerjs-1.4.0.tgz#f63aa06aa471a36152a316f81f3c7083f2c876c9"
+  integrity sha512-HTtR44rzdX76VrDfZGaYNciUL3EEexGX4HkvdJHP0VFSR+d2I/ZXFqdx6Q4Cc+X5VwhEf0Fx1Hi3wQy7msmKOA==
+
+viser-vue@^2.3.3:
+  version "2.4.6"
+  resolved "https://registry.yarnpkg.com/viser-vue/-/viser-vue-2.4.6.tgz#4ee2731313f3d7c2b8091fb6aeebe9db61b84c4a"
+  integrity sha512-M6MtTx6NM3ao7nt0YUIkg9HPBn0T3+OTv4PZZDFmz4gvCCP5jwYsqdyeEEJQ+QEF58CL66f5/VFbWLNawqE5Hw==
+  dependencies:
+    "@types/node" "*"
+    viser "^2.0.0"
+    vue "^2.5.3"
+
+viser@^2.0.0:
+  version "2.4.6"
+  resolved "https://registry.yarnpkg.com/viser/-/viser-2.4.6.tgz#d18ee18cea329d4bc3db00f0bcd7368f419912e0"
+  integrity sha512-iIodwrdhDedqKb4cT6gp35wUCysfdNnzEZlFg1u7xa6wfuEcQuWKQYTiiqGhUkJwWv2isSQvCJDAbDjFsgohsw==
+  dependencies:
+    "@antv/g2" "3.5.3"
+    "@antv/g2-brush" "^0.0.2"
+    "@antv/g2-plugin-slider" "^2.1.0"
+    "@types/d3-format" "*"
+    "@types/lodash" "*"
+    "@types/node" "^8.0.53"
+    d3-format "^1.3.0"
+    lodash "^4.17.4"
+
+vm-browserify@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019"
+  integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==
+
+vue-clipboard2@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/vue-clipboard2/-/vue-clipboard2-0.2.1.tgz#9f06690af1c98aef344be1fc4beb00cdc5307ee1"
+  integrity sha512-n6ie/0g0bKohmLlC/5ja1esq2Q0jQ5hWmhNSZcvCsWfDeDnVARjl6cBB9p72XV1nlVfuqsZcfV8HTjjZAIlLBA==
+  dependencies:
+    clipboard "^2.0.0"
+
+vue-cropper@0.4.4:
+  version "0.4.4"
+  resolved "https://registry.yarnpkg.com/vue-cropper/-/vue-cropper-0.4.4.tgz#63c85ba5c7f9d9779370930c8522b61deb177c97"
+  integrity sha512-5xJ3jWyTnsx3JM+lFV5mwdPjKfpYi2rvByEh4H0sFtCMILo3YTmMti2pq9YeoPLybJz04ho+wemYw5TqidYV5g==
+  dependencies:
+    "@babel/core" "^7.1.2"
+    "@babel/plugin-transform-runtime" "^7.1.0"
+    "@babel/preset-env" "^7.1.0"
+    babel-loader "^8.0.0-beta.0"
+    babel-plugin-transform-runtime "^6.23.0"
+    babel-runtime "^6.26.0"
+    css-loader "^1.0.0"
+    style-loader "^0.23.1"
+    vue "^2.5.17"
+    vue-template-compiler "^2.5.17"
+    webpack "^4.20.2"
+
+vue-eslint-parser@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz#c268c96c6d94cfe3d938a5f7593959b0ca3360d1"
+  integrity sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==
+  dependencies:
+    debug "^3.1.0"
+    eslint-scope "^3.7.1"
+    eslint-visitor-keys "^1.0.0"
+    espree "^3.5.2"
+    esquery "^1.0.0"
+    lodash "^4.17.4"
+
+vue-eslint-parser@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz#00f4e4da94ec974b821a26ff0ed0f7a78402b8a1"
+  integrity sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==
+  dependencies:
+    debug "^4.1.0"
+    eslint-scope "^4.0.0"
+    eslint-visitor-keys "^1.0.0"
+    espree "^4.1.0"
+    esquery "^1.0.1"
+    lodash "^4.17.11"
+
+vue-hot-reload-api@^2.3.0:
+  version "2.3.4"
+  resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
+  integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
+
+vue-input-tag@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/vue-input-tag/-/vue-input-tag-2.0.6.tgz#e5421317c9a89584980be011b95bedc2e4e8ef22"
+  integrity sha512-PFz6XyWjLUsKJdxlK11ojqfw2vWAYFwWb5dlvB0l+U6ES+xtD0MkXTRd9HSeq7KnARA+n16yHtouVoTa9AOU7w==
+  dependencies:
+    vue "^2.5.17"
+
+vue-jest@^3.0.4:
+  version "3.0.5"
+  resolved "https://registry.yarnpkg.com/vue-jest/-/vue-jest-3.0.5.tgz#d6f124b542dcbff207bf9296c19413f4c40b70c9"
+  integrity sha512-xWDxde91pDqYBGDlODENZ3ezPgw+IQFoVDtf+5Awlg466w3KvMSqWzs8PxcTeTr+wmAHi0j+a+Lm3R7aUJa1jA==
+  dependencies:
+    babel-plugin-transform-es2015-modules-commonjs "^6.26.0"
+    chalk "^2.1.0"
+    extract-from-css "^0.4.4"
+    find-babel-config "^1.1.0"
+    js-beautify "^1.6.14"
+    node-cache "^4.1.1"
+    object-assign "^4.1.1"
+    source-map "^0.5.6"
+    tsconfig "^7.0.0"
+    vue-template-es2015-compiler "^1.6.0"
+
+vue-loader@^15.7.0:
+  version "15.7.1"
+  resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.7.1.tgz#6ccacd4122aa80f69baaac08ff295a62e3aefcfd"
+  integrity sha512-fwIKtA23Pl/rqfYP5TSGK7gkEuLhoTvRYW+TU7ER3q9GpNLt/PjG5NLv3XHRDiTg7OPM1JcckBgds+VnAc+HbA==
+  dependencies:
+    "@vue/component-compiler-utils" "^3.0.0"
+    hash-sum "^1.0.2"
+    loader-utils "^1.1.0"
+    vue-hot-reload-api "^2.3.0"
+    vue-style-loader "^4.1.0"
+
+vue-ls@^3.2.0:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/vue-ls/-/vue-ls-3.2.1.tgz#25d1c75b3a51c17018129de607b44bb120a3385a"
+  integrity sha512-JoZDpSu0qV5AM50vspEzOut2lcm8R0tr5WG99jMHh14qFXkUes3ZdmDMG/p8iSQVQpg0pd/svGwM9Nd7OI2oaw==
+
+vue-quill-editor@^3.0.6:
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/vue-quill-editor/-/vue-quill-editor-3.0.6.tgz#1f85646211d68a31a80a72cb7f45bb2f119bc8fb"
+  integrity sha512-g20oSZNWg8Hbu41Kinjd55e235qVWPLfg4NvsLW6d+DhgBTFbEuMpcWlUdrD6qT3+Noim6DRu18VLM9lVShXOQ==
+  dependencies:
+    object-assign "^4.1.1"
+    quill "^1.3.4"
+
+vue-ref@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/vue-ref/-/vue-ref-1.0.6.tgz#b9b3d7d0e290ee2fd3d50d5d7bdac520806cb265"
+  integrity sha512-UzD8t1CG+aoWVOOpGd5KcaCNtCgUc0byaKhJMH+6N7H/p1ThVkYl/VCt7DmCrdhUlzZK+hT5JPTKAdrbWi0nNw==
+
+vue-router@^3.0.1:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.1.3.tgz#e6b14fabc0c0ee9fda0e2cbbda74b350e28e412b"
+  integrity sha512-8iSa4mGNXBjyuSZFCCO4fiKfvzqk+mhL0lnKuGcQtO1eoj8nq3CmbEG8FwK5QqoqwDgsjsf1GDuisDX4cdb/aQ==
+
+vue-style-loader@^4.1.0:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8"
+  integrity sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==
+  dependencies:
+    hash-sum "^1.0.2"
+    loader-utils "^1.0.2"
+
+vue-svg-component-builder@2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/vue-svg-component-builder/-/vue-svg-component-builder-2.0.3.tgz#c4e0a19073587ab882fd6f72bb7b3b63b4396801"
+  integrity sha512-We9ZLSYPQx9y3v5+HNWyjkGFaxZMlWPTqYBU08y4YT46f453BQ4JxIoS8rV0a8PIxnKap7m/YIzrdIfoHxrpaA==
+
+vue-svg-component-runtime@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/vue-svg-component-runtime/-/vue-svg-component-runtime-1.0.1.tgz#c4c241cdf92fead742ef33133b997ff42d8b9ee6"
+  integrity sha512-TkmZ1qwFeFJSRH6b6KVqDU2f8DCSdoNoo/veKqog7FsyF0UETTI66ALKX1rrLXy/KT6LSaJB5IfZkuuSfaQsEA==
+
+vue-svg-icon-loader@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/vue-svg-icon-loader/-/vue-svg-icon-loader-2.1.1.tgz#7b999ccb0647ce3b3903bfbf535fe247e11b032a"
+  integrity sha512-JOL4fyh9rnbcqMLTF5NVG8YVupnLIMHMY+3CLMaEb9xDUmfk6Cp3RqyI/8gBea7d51i4lyNdzZ3tQ/EJLQxQDA==
+  dependencies:
+    "@types/loader-utils" "1.1.3"
+    "@types/node" "8.9"
+    loader-utils "1.1.0"
+    vue-svg-component-builder "2.0.3"
+
+vue-template-compiler@^2.5.17, vue-template-compiler@^2.5.22:
+  version "2.6.10"
+  resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz#323b4f3495f04faa3503337a82f5d6507799c9cc"
+  integrity sha512-jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg==
+  dependencies:
+    de-indent "^1.0.2"
+    he "^1.1.0"
+
+vue-template-es2015-compiler@^1.6.0, vue-template-es2015-compiler@^1.9.0:
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
+  integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
+
+vue@^2.5.17, vue@^2.5.22, vue@^2.5.3:
+  version "2.6.10"
+  resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.10.tgz#a72b1a42a4d82a721ea438d1b6bf55e66195c637"
+  integrity sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ==
+
+vuex@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.1.1.tgz#0c264bfe30cdbccf96ab9db3177d211828a5910e"
+  integrity sha512-ER5moSbLZuNSMBFnEBVGhQ1uCBNJslH9W/Dw2W7GZN23UQA69uapP5GTT9Vm8Trc0PzBSVt6LzF3hGjmv41xcg==
+
+w3c-hr-time@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045"
+  integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=
+  dependencies:
+    browser-process-hrtime "^0.1.2"
+
+walker@~1.0.5:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+  integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=
+  dependencies:
+    makeerror "1.0.x"
+
+wangeditor@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/wangeditor/-/wangeditor-3.1.1.tgz#fbd3c1d4976923c9edebb85b29d30b35512ad039"
+  integrity sha1-+9PB1JdpI8nt67hbKdMLNVEq0Dk=
+
+warning@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
+  integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=
+  dependencies:
+    loose-envify "^1.0.0"
+
+watch@~0.18.0:
+  version "0.18.0"
+  resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986"
+  integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY=
+  dependencies:
+    exec-sh "^0.2.0"
+    minimist "^1.2.0"
+
+watchpack@^1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
+  integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==
+  dependencies:
+    chokidar "^2.0.2"
+    graceful-fs "^4.1.2"
+    neo-async "^2.5.0"
+
+wbuf@^1.1.0, wbuf@^1.7.3:
+  version "1.7.3"
+  resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
+  integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
+  dependencies:
+    minimalistic-assert "^1.0.0"
+
+wcwidth@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+  integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
+  dependencies:
+    defaults "^1.0.3"
+
+webidl-conversions@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+  integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+
+webpack-bundle-analyzer@^3.3.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.6.0.tgz#39b3a8f829ca044682bc6f9e011c95deb554aefd"
+  integrity sha512-orUfvVYEfBMDXgEKAKVvab5iQ2wXneIEorGNsyuOyVYpjYrI7CUOhhXNDd3huMwQ3vNNWWlGP+hzflMFYNzi2g==
+  dependencies:
+    acorn "^6.0.7"
+    acorn-walk "^6.1.1"
+    bfj "^6.1.1"
+    chalk "^2.4.1"
+    commander "^2.18.0"
+    ejs "^2.6.1"
+    express "^4.16.3"
+    filesize "^3.6.1"
+    gzip-size "^5.0.0"
+    lodash "^4.17.15"
+    mkdirp "^0.5.1"
+    opener "^1.5.1"
+    ws "^6.0.0"
+
+webpack-chain@^4.11.0:
+  version "4.12.1"
+  resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-4.12.1.tgz#6c8439bbb2ab550952d60e1ea9319141906c02a6"
+  integrity sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ==
+  dependencies:
+    deepmerge "^1.5.2"
+    javascript-stringify "^1.6.0"
+
+webpack-dev-middleware@^3.7.2:
+  version "3.7.2"
+  resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3"
+  integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==
+  dependencies:
+    memory-fs "^0.4.1"
+    mime "^2.4.4"
+    mkdirp "^0.5.1"
+    range-parser "^1.2.1"
+    webpack-log "^2.0.0"
+
+webpack-dev-server@^3.4.1:
+  version "3.9.0"
+  resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz#27c3b5d0f6b6677c4304465ac817623c8b27b89c"
+  integrity sha512-E6uQ4kRrTX9URN9s/lIbqTAztwEPdvzVrcmHE8EQ9YnuT9J8Es5Wrd8n9BKg1a0oZ5EgEke/EQFgUsp18dSTBw==
+  dependencies:
+    ansi-html "0.0.7"
+    bonjour "^3.5.0"
+    chokidar "^2.1.8"
+    compression "^1.7.4"
+    connect-history-api-fallback "^1.6.0"
+    debug "^4.1.1"
+    del "^4.1.1"
+    express "^4.17.1"
+    html-entities "^1.2.1"
+    http-proxy-middleware "0.19.1"
+    import-local "^2.0.0"
+    internal-ip "^4.3.0"
+    ip "^1.1.5"
+    is-absolute-url "^3.0.3"
+    killable "^1.0.1"
+    loglevel "^1.6.4"
+    opn "^5.5.0"
+    p-retry "^3.0.1"
+    portfinder "^1.0.25"
+    schema-utils "^1.0.0"
+    selfsigned "^1.10.7"
+    semver "^6.3.0"
+    serve-index "^1.9.1"
+    sockjs "0.3.19"
+    sockjs-client "1.4.0"
+    spdy "^4.0.1"
+    strip-ansi "^3.0.1"
+    supports-color "^6.1.0"
+    url "^0.11.0"
+    webpack-dev-middleware "^3.7.2"
+    webpack-log "^2.0.0"
+    ws "^6.2.1"
+    yargs "12.0.5"
+
+webpack-log@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f"
+  integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==
+  dependencies:
+    ansi-colors "^3.0.0"
+    uuid "^3.3.2"
+
+webpack-merge@^4.2.1:
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d"
+  integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==
+  dependencies:
+    lodash "^4.17.15"
+
+webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+  integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+  dependencies:
+    source-list-map "^2.0.0"
+    source-map "~0.6.1"
+
+webpack-theme-color-replacer@^1.2.15:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/webpack-theme-color-replacer/-/webpack-theme-color-replacer-1.3.2.tgz#56eda4042c1dbbd909f9d2e9398dda354321bb35"
+  integrity sha512-nCxEZUXfI+DYrdI05wGrKAuO24weIzpn2Emwssm8Yzlw0Q1i1C8xTdFaf8dz60OVgpxy8oPMlfo4pR7UvxLPCQ==
+
+webpack@^4.0.0, webpack@^4.20.2:
+  version "4.41.2"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.2.tgz#c34ec76daa3a8468c9b61a50336d8e3303dce74e"
+  integrity sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/helper-module-context" "1.8.5"
+    "@webassemblyjs/wasm-edit" "1.8.5"
+    "@webassemblyjs/wasm-parser" "1.8.5"
+    acorn "^6.2.1"
+    ajv "^6.10.2"
+    ajv-keywords "^3.4.1"
+    chrome-trace-event "^1.0.2"
+    enhanced-resolve "^4.1.0"
+    eslint-scope "^4.0.3"
+    json-parse-better-errors "^1.0.2"
+    loader-runner "^2.4.0"
+    loader-utils "^1.2.3"
+    memory-fs "^0.4.1"
+    micromatch "^3.1.10"
+    mkdirp "^0.5.1"
+    neo-async "^2.6.1"
+    node-libs-browser "^2.2.1"
+    schema-utils "^1.0.0"
+    tapable "^1.1.3"
+    terser-webpack-plugin "^1.4.1"
+    watchpack "^1.6.0"
+    webpack-sources "^1.4.1"
+
+websocket-driver@>=0.5.1:
+  version "0.7.3"
+  resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9"
+  integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==
+  dependencies:
+    http-parser-js ">=0.4.0 <0.4.11"
+    safe-buffer ">=5.1.0"
+    websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
+  integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==
+
+whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+  integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
+  dependencies:
+    iconv-lite "0.4.24"
+
+whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
+  integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+
+whatwg-url@^6.4.1:
+  version "6.5.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8"
+  integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==
+  dependencies:
+    lodash.sortby "^4.7.0"
+    tr46 "^1.0.1"
+    webidl-conversions "^4.0.2"
+
+whatwg-url@^7.0.0:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
+  integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
+  dependencies:
+    lodash.sortby "^4.7.0"
+    tr46 "^1.0.1"
+    webidl-conversions "^4.0.2"
+
+which-module@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+  integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@^1.2.12, which@^1.2.9, which@^1.3.0:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+  integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+  dependencies:
+    isexe "^2.0.0"
+
+which@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/which/-/which-2.0.1.tgz#f1cf94d07a8e571b6ff006aeb91d0300c47ef0a4"
+  integrity sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w==
+  dependencies:
+    isexe "^2.0.0"
+
+wide-align@^1.1.0:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+  integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+  dependencies:
+    string-width "^1.0.2 || 2"
+
+window-size@0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+  integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
+
+wolfy87-eventemitter@~5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/wolfy87-eventemitter/-/wolfy87-eventemitter-5.1.0.tgz#35c1ac0dd1ac0c15e35d981508fc22084a13a011"
+  integrity sha1-NcGsDdGsDBXjXZgVCPwiCEoToBE=
+
+wordwrap@0.0.2:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+  integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
+
+wordwrap@~0.0.2:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+  integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+
+wordwrap@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+  integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+
+worker-farm@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+  integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+  dependencies:
+    errno "~0.1.7"
+
+wrap-ansi@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+  integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
+  dependencies:
+    string-width "^1.0.1"
+    strip-ansi "^3.0.1"
+
+wrap-ansi@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+  integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+  dependencies:
+    ansi-styles "^3.2.0"
+    string-width "^3.0.0"
+    strip-ansi "^5.0.0"
+
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write-file-atomic@^2.1.0:
+  version "2.4.3"
+  resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481"
+  integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==
+  dependencies:
+    graceful-fs "^4.1.11"
+    imurmurhash "^0.1.4"
+    signal-exit "^3.0.2"
+
+write@1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+  integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+  dependencies:
+    mkdirp "^0.5.1"
+
+write@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+  integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=
+  dependencies:
+    mkdirp "^0.5.1"
+
+ws@^5.2.0:
+  version "5.2.2"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
+  integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==
+  dependencies:
+    async-limiter "~1.0.0"
+
+ws@^6.0.0, ws@^6.2.1:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
+  integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
+  dependencies:
+    async-limiter "~1.0.0"
+
+xml-name-validator@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+  integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+
+xtend@^4.0.0, xtend@~4.0.1:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+  integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+y18n@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+  integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
+
+"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+  integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+
+yallist@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+  integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+  integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yargs-parser@^11.1.1:
+  version "11.1.1"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
+  integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==
+  dependencies:
+    camelcase "^5.0.0"
+    decamelize "^1.2.0"
+
+yargs-parser@^13.1.1:
+  version "13.1.1"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
+  integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==
+  dependencies:
+    camelcase "^5.0.0"
+    decamelize "^1.2.0"
+
+yargs-parser@^9.0.2:
+  version "9.0.2"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
+  integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=
+  dependencies:
+    camelcase "^4.1.0"
+
+yargs@12.0.5:
+  version "12.0.5"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
+  integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
+  dependencies:
+    cliui "^4.0.0"
+    decamelize "^1.2.0"
+    find-up "^3.0.0"
+    get-caller-file "^1.0.1"
+    os-locale "^3.0.0"
+    require-directory "^2.1.1"
+    require-main-filename "^1.0.1"
+    set-blocking "^2.0.0"
+    string-width "^2.0.0"
+    which-module "^2.0.0"
+    y18n "^3.2.1 || ^4.0.0"
+    yargs-parser "^11.1.1"
+
+yargs@^11.0.0:
+  version "11.1.1"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766"
+  integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==
+  dependencies:
+    cliui "^4.0.0"
+    decamelize "^1.1.1"
+    find-up "^2.1.0"
+    get-caller-file "^1.0.1"
+    os-locale "^3.1.0"
+    require-directory "^2.1.1"
+    require-main-filename "^1.0.1"
+    set-blocking "^2.0.0"
+    string-width "^2.0.0"
+    which-module "^2.0.0"
+    y18n "^3.2.1"
+    yargs-parser "^9.0.2"
+
+yargs@^13.0.0:
+  version "13.3.0"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83"
+  integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==
+  dependencies:
+    cliui "^5.0.0"
+    find-up "^3.0.0"
+    get-caller-file "^2.0.1"
+    require-directory "^2.1.1"
+    require-main-filename "^2.0.0"
+    set-blocking "^2.0.0"
+    string-width "^3.0.0"
+    which-module "^2.0.0"
+    y18n "^4.0.0"
+    yargs-parser "^13.1.1"
+
+yargs@~3.10.0:
+  version "3.10.0"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+  integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
+  dependencies:
+    camelcase "^1.0.2"
+    cliui "^2.1.0"
+    decamelize "^1.0.0"
+    window-size "0.1.0"
+
+yorkie@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9"
+  integrity sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==
+  dependencies:
+    execa "^0.8.0"
+    is-ci "^1.0.10"
+    normalize-path "^1.0.0"
+    strip-indent "^2.0.0"