hanyaolong 3 anni fa
parent
commit
df6ffcd9e1

+ 317 - 53
package-lock.json

@@ -2047,14 +2047,12 @@
     "ansi-regex": {
       "version": "4.1.0",
       "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz",
-      "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
-      "dev": true
+      "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc="
     },
     "ansi-styles": {
       "version": "3.2.1",
       "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
       "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
-      "dev": true,
       "requires": {
         "color-convert": "^1.9.0"
       }
@@ -2230,6 +2228,14 @@
       "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=",
       "dev": true
     },
+    "async-validator": {
+      "version": "1.8.5",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/async-validator/-/async-validator-1.8.5.tgz",
+      "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
+      "requires": {
+        "babel-runtime": "6.x"
+      }
+    },
     "asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz",
@@ -2269,6 +2275,20 @@
       "integrity": "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk=",
       "dev": true
     },
+    "axios": {
+      "version": "0.21.1",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/axios/-/axios-0.21.1.tgz",
+      "integrity": "sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg=",
+      "dev": true,
+      "requires": {
+        "follow-redirects": "^1.10.0"
+      }
+    },
+    "babel-helper-vue-jsx-merge-props": {
+      "version": "2.0.3",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
+      "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY="
+    },
     "babel-loader": {
       "version": "8.2.2",
       "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.2.2.tgz?cache=0&sync_timestamp=1606424647115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-loader%2Fdownload%2Fbabel-loader-8.2.2.tgz",
@@ -2320,6 +2340,27 @@
         "@babel/helper-define-polyfill-provider": "^0.2.2"
       }
     },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/babel-runtime/-/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "requires": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "2.6.12",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/core-js/-/core-js-2.6.12.tgz",
+          "integrity": "sha1-2TM9+nsGXjR8xWgiGdb2kIWcwuw="
+        },
+        "regenerator-runtime": {
+          "version": "0.11.1",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+          "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk="
+        }
+      }
+    },
     "balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz?cache=0&sync_timestamp=1617714233441&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbalanced-match%2Fdownload%2Fbalanced-match-1.0.2.tgz",
@@ -2384,8 +2425,7 @@
     "base64-js": {
       "version": "1.5.1",
       "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.5.1.tgz",
-      "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=",
-      "dev": true
+      "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo="
     },
     "batch": {
       "version": "0.6.1",
@@ -2679,11 +2719,29 @@
         "isarray": "^1.0.0"
       }
     },
+    "buffer-alloc": {
+      "version": "1.2.0",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+      "integrity": "sha1-iQ3ZDZI6hz4I4Q5f1RpX5bfM4Ow=",
+      "requires": {
+        "buffer-alloc-unsafe": "^1.1.0",
+        "buffer-fill": "^1.0.0"
+      }
+    },
+    "buffer-alloc-unsafe": {
+      "version": "1.1.0",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+      "integrity": "sha1-vX3CauKXLQ7aJTvgYdupkjScGfA="
+    },
+    "buffer-fill": {
+      "version": "1.0.0",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/buffer-fill/-/buffer-fill-1.0.0.tgz",
+      "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
+    },
     "buffer-from": {
       "version": "1.1.1",
       "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz",
-      "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=",
-      "dev": true
+      "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8="
     },
     "buffer-indexof": {
       "version": "1.1.1",
@@ -3198,7 +3256,6 @@
       "version": "1.9.3",
       "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz",
       "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
-      "dev": true,
       "requires": {
         "color-name": "1.1.3"
       }
@@ -3206,8 +3263,7 @@
     "color-name": {
       "version": "1.1.3",
       "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz",
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
-      "dev": true
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
     },
     "color-string": {
       "version": "1.5.5",
@@ -3581,8 +3637,7 @@
     "core-util-is": {
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
-      "dev": true
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
     },
     "cosmiconfig": {
       "version": "5.2.1",
@@ -3929,8 +3984,7 @@
     "decamelize": {
       "version": "1.2.0",
       "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz?cache=0&sync_timestamp=1610348654744&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-      "dev": true
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
     },
     "decode-uri-component": {
       "version": "0.2.0",
@@ -3955,8 +4009,7 @@
     "deepmerge": {
       "version": "1.5.2",
       "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz?cache=0&sync_timestamp=1572279720382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-1.5.2.tgz",
-      "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=",
-      "dev": true
+      "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M="
     },
     "default-gateway": {
       "version": "5.0.5",
@@ -4223,6 +4276,11 @@
         }
       }
     },
+    "dijkstrajs": {
+      "version": "1.0.2",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/dijkstrajs/-/dijkstrajs-1.0.2.tgz",
+      "integrity": "sha1-LkjA07glRir+datK1egpyOzjYlc="
+    },
     "dir-glob": {
       "version": "2.2.2",
       "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.2.2.tgz",
@@ -4388,6 +4446,19 @@
       "integrity": "sha1-yNa8Yl/ng/UGrudxB3Ktq0ewvyk=",
       "dev": true
     },
+    "element-ui": {
+      "version": "2.15.1",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/element-ui/-/element-ui-2.15.1.tgz",
+      "integrity": "sha512-TqlScAKGH97XndSScUDeEHIzL1x7yg7DvQdKPEOUdiDcyIz3y3FJJBlpHYaJT96FOn1xpIcUZb+I2FJeU9EcrQ==",
+      "requires": {
+        "async-validator": "~1.8.1",
+        "babel-helper-vue-jsx-merge-props": "^2.0.0",
+        "deepmerge": "^1.2.0",
+        "normalize-wheel": "^1.0.1",
+        "resize-observer-polyfill": "^1.5.0",
+        "throttle-debounce": "^1.0.1"
+      }
+    },
     "elliptic": {
       "version": "6.5.4",
       "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.4.tgz?cache=0&sync_timestamp=1612290836352&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felliptic%2Fdownload%2Felliptic-6.5.4.tgz",
@@ -4933,6 +5004,11 @@
         "schema-utils": "^2.5.0"
       }
     },
+    "file-saver": {
+      "version": "2.0.2",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/file-saver/-/file-saver-2.0.2.tgz",
+      "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw=="
+    },
     "file-uri-to-path": {
       "version": "1.0.0",
       "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz",
@@ -5143,8 +5219,7 @@
     "get-caller-file": {
       "version": "2.0.5",
       "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz",
-      "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=",
-      "dev": true
+      "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34="
     },
     "get-intrinsic": {
       "version": "1.1.1",
@@ -5726,8 +5801,7 @@
     "ieee754": {
       "version": "1.2.1",
       "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.2.1.tgz?cache=0&sync_timestamp=1603838364836&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fieee754%2Fdownload%2Fieee754-1.2.1.tgz",
-      "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=",
-      "dev": true
+      "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I="
     },
     "iferr": {
       "version": "0.1.5",
@@ -5748,6 +5822,11 @@
       "dev": true,
       "optional": true
     },
+    "immediate": {
+      "version": "3.0.6",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/immediate/-/immediate-3.0.6.tgz",
+      "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
+    },
     "import-cwd": {
       "version": "2.1.0",
       "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz",
@@ -5862,8 +5941,7 @@
     "inherits": {
       "version": "2.0.4",
       "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz",
-      "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=",
-      "dev": true
+      "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w="
     },
     "internal-ip": {
       "version": "4.3.0",
@@ -6078,8 +6156,7 @@
     "is-fullwidth-code-point": {
       "version": "2.0.0",
       "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz?cache=0&sync_timestamp=1618552469710&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-2.0.0.tgz",
-      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
-      "dev": true
+      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
     },
     "is-glob": {
       "version": "4.0.1",
@@ -6231,8 +6308,7 @@
     "isarray": {
       "version": "1.0.0",
       "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
-      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-      "dev": true
+      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
     },
     "isexe": {
       "version": "2.0.0",
@@ -6367,6 +6443,17 @@
         "verror": "1.10.0"
       }
     },
+    "jszip": {
+      "version": "3.6.0",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/jszip/-/jszip-3.6.0.tgz",
+      "integrity": "sha1-g5tygS4/l4GcwTrEE0/87ZXdavk=",
+      "requires": {
+        "lie": "~3.3.0",
+        "pako": "~1.0.2",
+        "readable-stream": "~2.3.6",
+        "set-immediate-shim": "~1.0.1"
+      }
+    },
     "killable": {
       "version": "1.0.1",
       "resolved": "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz",
@@ -6468,6 +6555,14 @@
         }
       }
     },
+    "lie": {
+      "version": "3.3.0",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/lie/-/lie-3.3.0.tgz",
+      "integrity": "sha1-3Pgt7lRfRgdNryAMfBxaCOD0D2o=",
+      "requires": {
+        "immediate": "~3.0.5"
+      }
+    },
     "lines-and-columns": {
       "version": "1.1.6",
       "resolved": "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz",
@@ -7089,6 +7184,11 @@
       "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=",
       "dev": true
     },
+    "normalize-wheel": {
+      "version": "1.0.1",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
+      "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
+    },
     "npm-run-path": {
       "version": "2.0.2",
       "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz?cache=0&sync_timestamp=1577052941951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz",
@@ -7343,7 +7443,6 @@
       "version": "2.3.0",
       "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1606288333421&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz",
       "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=",
-      "dev": true,
       "requires": {
         "p-try": "^2.0.0"
       }
@@ -7375,14 +7474,12 @@
     "p-try": {
       "version": "2.2.0",
       "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz",
-      "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=",
-      "dev": true
+      "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY="
     },
     "pako": {
       "version": "1.0.11",
       "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz?cache=0&sync_timestamp=1610208924901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpako%2Fdownload%2Fpako-1.0.11.tgz",
-      "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=",
-      "dev": true
+      "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8="
     },
     "parallel-transform": {
       "version": "1.2.0",
@@ -7584,6 +7681,11 @@
         "find-up": "^4.0.0"
       }
     },
+    "pngjs": {
+      "version": "3.4.0",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/pngjs/-/pngjs-3.4.0.tgz",
+      "integrity": "sha1-mcp9clll+2VYFOr2XzjxK72/VV8="
+    },
     "pnp-webpack-plugin": {
       "version": "1.6.4",
       "resolved": "https://registry.npm.taobao.org/pnp-webpack-plugin/download/pnp-webpack-plugin-1.6.4.tgz",
@@ -8235,8 +8337,7 @@
     "process-nextick-args": {
       "version": "2.0.1",
       "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz",
-      "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=",
-      "dev": true
+      "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I="
     },
     "promise-inflight": {
       "version": "1.0.1",
@@ -8339,6 +8440,140 @@
       "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
       "dev": true
     },
+    "qrcode": {
+      "version": "1.4.4",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/qrcode/-/qrcode-1.4.4.tgz",
+      "integrity": "sha1-8MQ1aKfnUQpV78O4jZYC9xlj6oM=",
+      "requires": {
+        "buffer": "^5.4.3",
+        "buffer-alloc": "^1.2.0",
+        "buffer-from": "^1.1.1",
+        "dijkstrajs": "^1.0.1",
+        "isarray": "^2.0.1",
+        "pngjs": "^3.3.0",
+        "yargs": "^13.2.4"
+      },
+      "dependencies": {
+        "buffer": {
+          "version": "5.7.1",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/buffer/-/buffer-5.7.1.tgz",
+          "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+          "requires": {
+            "base64-js": "^1.3.1",
+            "ieee754": "^1.1.13"
+          }
+        },
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/camelcase/-/camelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA="
+        },
+        "cliui": {
+          "version": "5.0.0",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/cliui/-/cliui-5.0.0.tgz",
+          "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=",
+          "requires": {
+            "string-width": "^3.1.0",
+            "strip-ansi": "^5.2.0",
+            "wrap-ansi": "^5.1.0"
+          }
+        },
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/emoji-regex/-/emoji-regex-7.0.3.tgz",
+          "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY="
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "isarray": {
+          "version": "2.0.5",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/isarray/-/isarray-2.0.5.tgz",
+          "integrity": "sha1-ivHkwSISRMxiRZ+vOJQNTmRKVyM="
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/strip-ansi/-/strip-ansi-5.2.0.tgz",
+          "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "5.1.0",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+          "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=",
+          "requires": {
+            "ansi-styles": "^3.2.0",
+            "string-width": "^3.0.0",
+            "strip-ansi": "^5.0.0"
+          }
+        },
+        "yargs": {
+          "version": "13.3.2",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/yargs/-/yargs-13.3.2.tgz",
+          "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=",
+          "requires": {
+            "cliui": "^5.0.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^2.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^3.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^13.1.2"
+          }
+        },
+        "yargs-parser": {
+          "version": "13.1.2",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/yargs-parser/-/yargs-parser-13.1.2.tgz",
+          "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=",
+          "requires": {
+            "camelcase": "^5.0.0",
+            "decamelize": "^1.2.0"
+          }
+        }
+      }
+    },
     "qs": {
       "version": "6.5.2",
       "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz",
@@ -8426,7 +8661,6 @@
       "version": "2.3.7",
       "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz",
       "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=",
-      "dev": true,
       "requires": {
         "core-util-is": "~1.0.0",
         "inherits": "~2.0.3",
@@ -8614,19 +8848,25 @@
         "tough-cookie": "~2.5.0",
         "tunnel-agent": "^0.6.0",
         "uuid": "^3.3.2"
+      },
+      "dependencies": {
+        "uuid": {
+          "version": "3.4.0",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/uuid/-/uuid-3.4.0.tgz",
+          "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=",
+          "dev": true
+        }
       }
     },
     "require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz",
-      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
-      "dev": true
+      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
     },
     "require-main-filename": {
       "version": "2.0.0",
       "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz",
-      "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=",
-      "dev": true
+      "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs="
     },
     "requires-port": {
       "version": "1.0.0",
@@ -8634,6 +8874,11 @@
       "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
       "dev": true
     },
+    "resize-observer-polyfill": {
+      "version": "1.5.1",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
+    },
     "resolve": {
       "version": "1.20.0",
       "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz?cache=0&sync_timestamp=1613055183799&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.20.0.tgz",
@@ -8730,8 +8975,7 @@
     "safe-buffer": {
       "version": "5.1.2",
       "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1589129010497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz",
-      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
-      "dev": true
+      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
     },
     "safe-regex": {
       "version": "1.1.0",
@@ -8918,8 +9162,12 @@
     "set-blocking": {
       "version": "2.0.0",
       "resolved": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz",
-      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
-      "dev": true
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+    },
+    "set-immediate-shim": {
+      "version": "1.0.1",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+      "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
     },
     "set-value": {
       "version": "2.0.1",
@@ -9147,6 +9395,14 @@
         "faye-websocket": "^0.11.3",
         "uuid": "^3.4.0",
         "websocket-driver": "^0.7.4"
+      },
+      "dependencies": {
+        "uuid": {
+          "version": "3.4.0",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/uuid/-/uuid-3.4.0.tgz",
+          "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=",
+          "dev": true
+        }
       }
     },
     "sockjs-client": {
@@ -9488,7 +9744,6 @@
       "version": "1.1.1",
       "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz",
       "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
-      "dev": true,
       "requires": {
         "safe-buffer": "~5.1.0"
       }
@@ -9742,6 +9997,11 @@
         "neo-async": "^2.6.0"
       }
     },
+    "throttle-debounce": {
+      "version": "1.1.0",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
+      "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg=="
+    },
     "through2": {
       "version": "2.0.5",
       "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz?cache=0&sync_timestamp=1593478643560&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthrough2%2Fdownload%2Fthrough2-2.0.5.tgz",
@@ -10166,8 +10426,7 @@
     "util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz",
-      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
-      "dev": true
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
     },
     "util.promisify": {
       "version": "1.0.1",
@@ -10194,10 +10453,9 @@
       "dev": true
     },
     "uuid": {
-      "version": "3.4.0",
-      "resolved": "https://registry.nlark.com/uuid/download/uuid-3.4.0.tgz",
-      "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=",
-      "dev": true
+      "version": "8.3.2",
+      "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/uuid/-/uuid-8.3.2.tgz",
+      "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I="
     },
     "validate-npm-package-license": {
       "version": "3.0.4",
@@ -11001,6 +11259,14 @@
       "requires": {
         "ansi-colors": "^3.0.0",
         "uuid": "^3.3.2"
+      },
+      "dependencies": {
+        "uuid": {
+          "version": "3.4.0",
+          "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/uuid/-/uuid-3.4.0.tgz",
+          "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=",
+          "dev": true
+        }
       }
     },
     "webpack-merge": {
@@ -11072,8 +11338,7 @@
     "which-module": {
       "version": "2.0.0",
       "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz",
-      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
-      "dev": true
+      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
     },
     "worker-farm": {
       "version": "1.7.0",
@@ -11162,8 +11427,7 @@
     "y18n": {
       "version": "4.0.3",
       "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.3.tgz",
-      "integrity": "sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8=",
-      "dev": true
+      "integrity": "sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8="
     },
     "yallist": {
       "version": "3.1.1",

+ 6 - 0
package.json

@@ -8,6 +8,11 @@
   },
   "dependencies": {
     "core-js": "^3.6.5",
+    "element-ui": "^2.15.1",
+    "file-saver": "^2.0.2",
+    "jszip": "^3.6.0",
+    "qrcode": "^1.4.4",
+    "uuid": "^8.3.2",
     "vue": "^2.6.11",
     "vue-router": "^3.2.0",
     "vuex": "^3.4.0"
@@ -17,6 +22,7 @@
     "@vue/cli-plugin-router": "^4.5.0",
     "@vue/cli-plugin-vuex": "^4.5.0",
     "@vue/cli-service": "^4.5.0",
+    "axios": "^0.21.1",
     "less": "^3.0.4",
     "less-loader": "^5.0.0",
     "vue-template-compiler": "^2.6.11"

+ 46 - 22
src/App.vue

@@ -1,32 +1,56 @@
 <template>
   <div id="app">
-    <div id="nav">
-      <router-link to="/">Home</router-link> |
-      <router-link to="/about">About</router-link>
-    </div>
-    <router-view/>
+    <el-container class="container">
+      <el-aside width="200px" style="background-color: #545c64">
+        <leftAside></leftAside>
+      </el-aside>
+      <el-container>
+        <el-header style="text-align: left; font-size: 20px">
+          <topHead></topHead>
+        </el-header>
+
+        <el-main class="main">
+          <router-view></router-view>
+        </el-main>
+      </el-container>
+    </el-container>
   </div>
 </template>
+<script>
+import leftAside from "@/components/leftAside.vue";
+import topHead from "@/components/topHead.vue";
+export default {
+  components: { leftAside, topHead },
+  data() {
+    return {};
+  },
+};
+</script>
 
 <style lang="less">
-#app {
-  font-family: Avenir, Helvetica, Arial, sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  text-align: center;
-  color: #2c3e50;
+html,
+body {
+  width: 100%;
+  height: 100%;
+  margin: 0;
+  padding: 0;
 }
-
-#nav {
-  padding: 30px;
-
-  a {
-    font-weight: bold;
-    color: #2c3e50;
-
-    &.router-link-exact-active {
-      color: #42b983;
+#app {
+  width: 100%;
+  height: 100%;
+  .container {
+    width: 100%;
+    height: 100%;
+    .main {
+      width: 100%;
+      height: calc(~"100% - 60px");
+      overflow-y: scroll;
     }
   }
 }
-</style>
+.el-header {
+  background-color: #b3c0d1;
+  color: #333;
+  line-height: 60px;
+}
+</style>

+ 204 - 0
src/api/httputils.js

@@ -0,0 +1,204 @@
+import axios from 'axios'
+import store from '@/store'
+import router from '@/router'
+
+var CancelToken = axios.CancelToken
+var cancel
+
+// 创建axios实例
+const axiosservice = axios.create({
+    timeout: 30000, // 请求超时时间
+    retry: 4, //重新请求次数
+    retryDelay: 1000, //重新请求的间隔
+    credentials: true, // 接口每次请求会跨域携带cookie
+    cancelToken: new CancelToken(function executor(c) {
+        // executor 函数接收一个 cancel 函数作为参数
+        cancel = c
+    }),
+})
+
+axiosservice.interceptors.request.use(
+    (config) => {
+        config.withCredentials = true // 允许携带token ,这个是解决跨域产生的相关问题
+        let isPreview = null
+        return config
+    },
+    (error) => {
+        return Promise.reject(error)
+    }
+)
+
+axiosservice.interceptors.response.use(
+    function (res) {
+        return res
+    },
+    function (err) {
+        if (err.response.status == 401) {
+            store.commit('SETISREQUESTtAUTH', 'err')
+            router.push({
+                path: '404',
+            })
+        }
+        return Promise.reject(err)
+    }
+)
+
+/* 下载方法 */
+function downFile(blob, fileName) {
+    // 非IE下载
+    if ('download' in document.createElement('a')) {
+        let link = document.createElement('a')
+        link.href = window.URL.createObjectURL(blob) // 创建下载的链接
+        link.download = fileName // 下载后文件名
+        link.style.display = 'none'
+        document.body.appendChild(link)
+        link.click() // 点击下载
+        window.URL.revokeObjectURL(link.href) // 释放掉blob对象
+        document.body.removeChild(link) // 下载完成移除元素
+    } else {
+        // IE10+下载
+        window.navigator.msSaveBlob(blob, fileName)
+    }
+}
+
+export default {
+    //获取cookie
+    getCookie(name) {
+        var arr,
+            reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')
+        if ((arr = document.cookie.match(reg))) {
+            return unescape(arr[2])
+        } else {
+            /* 如果没有参数,那么就获取本域下的所有cookie */
+            return document.cookie
+        }
+    },
+
+    async getJson(url, params) {
+        try {
+            let response = await axiosservice({
+                url,
+                params,
+                method: 'get',
+            })
+            return response.data
+        } catch (err) {
+            throw err
+        }
+    },
+    async postJson(url, data) {
+        try {
+            let response = await axiosservice({
+                url,
+                data,
+                method: 'post',
+            })
+            return response.data
+        } catch (err) {
+            throw err
+        }
+    },
+    async fetchJson(url, params, data) {
+        try {
+            let response = await axiosservice({
+                url,
+                params,
+                data,
+                method: 'post',
+            })
+            return response
+        } catch (err) {
+            throw err
+        }
+    },
+    async postupload(url, params, data) {
+        try {
+            let response = await axiosservice({
+                url,
+                params,
+                data,
+                method: 'post',
+                headers: {
+                    'Content-Type': 'multipart/form-data',
+                },
+            })
+            return response.data
+        } catch (err) {
+            throw err
+        }
+    },
+    async download(url, params) {
+        // 响应类型:arraybuffer, blob
+        return new Promise((resolve, reject) => {
+            axiosservice
+                .get(url, {
+                    params,
+                    responseType: 'blob',
+                })
+                .then((resp) => {
+                    let headers = resp.headers
+                    let contentType = headers['content-type']
+                    if (!resp.data?.size) {
+                        console.error('响应异常:', resp)
+                        resolve({ msg: '文件不存在,下载失败!' })
+                        return false
+                    } else {
+                        //console.log("下载文件:", resp)
+                        const blob = new Blob([resp.data], {
+                            type: contentType,
+                        })
+                        const contentDisposition = resp.headers['content-disposition']
+                        let fileName = 'unknown'
+                        if (contentDisposition) {
+                            fileName = window.decodeURI(resp.headers['content-disposition'].split('=')[1])
+                        }
+                        downFile(blob, fileName)
+                        resolve()
+                    }
+                })
+                .catch(function (error) { })
+        })
+
+    },
+    // 预览
+    async preview(url, params) {
+        // 响应类型:arraybuffer, blob
+        return new Promise((resolve, reject) => {
+            axiosservice
+                .get(url, {
+                    params,
+                    responseType: 'blob',
+                })
+                .then((resp) => {
+                    let headers = resp.headers
+                    let contentType = headers['content-type']
+                    if (!resp.data?.size) {
+                        console.error('响应异常:', resp)
+                        resolve({ msg: '文件不存在,下载失败!' })
+                        return false
+                    } else {
+                        //console.log("下载文件:", resp)
+                        const blob = new Blob([resp.data], {
+                            type: contentType,
+                        })
+                        // const contentDisposition = resp.headers['content-disposition']
+                        // let fileName = 'unknown'
+                        // if (contentDisposition) {
+                        //     fileName = window.decodeURI(resp.headers['content-disposition'].split('=')[1])
+                        // }
+
+                        var reader = new FileReader()
+                        reader.onload = function () {
+                            resolve(this.result)
+                        }
+                        reader.readAsArrayBuffer(blob)
+
+
+                    }
+                })
+                .catch(function (error) { })
+        })
+
+    },
+    axios: axiosservice,
+}

+ 25 - 0
src/api/workScope.js

@@ -0,0 +1,25 @@
+import httputils from '@/api/httputils'
+// 空间类型功能树
+export function space_fun(params) {
+    return httputils.getJson(`/clmt/dict/space_fun`, params)
+}
+// 空间分区类型
+export function space_zone(params) {
+    return httputils.getJson(`/clmt/dict/zone`, params)
+}
+// 专业系统类型
+export function major_sys(params) {
+    return httputils.getJson(`/clmt/dict/major_sys`, params)
+}
+// 查询机房类型
+export function major_mr(params) {
+    return httputils.getJson(`/clmt/dict/mr`, params)
+}
+// 关系范围
+export function dict_rels(params) {
+    return httputils.getJson(`/clmt/dict/rels`, params)
+}
+//专业系统设备树
+export function sys_eq(params) {
+    return httputils.getJson(`/clmt/dict/sys_eq`, params)
+}

+ 43 - 0
src/components/leftAside.vue

@@ -0,0 +1,43 @@
+<template>
+  <div>
+    <el-menu
+      default-active="workscope"
+      class="el-menu-vertical-demo"
+      background-color="#545c64"
+      text-color="#fff"
+      active-text-color="#ffd04b"
+      :router="true"
+    >
+      <el-menu-item
+        v-for="(route, key) in routers"
+        :key="key"
+        :index="route.router"
+      >
+        <i class="el-icon-menu"></i>
+        <span slot="title">{{ route.name }}</span>
+      </el-menu-item>
+    </el-menu>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      routers: [
+        {
+          name: "交付范围",
+          router: "workscope",
+        },
+        {
+          name: "生成二维码",
+          router: "qrcode",
+        },
+        {
+          name: "空间任务",
+          router: "spacetask",
+        },
+      ],
+    };
+  },
+};
+</script>

+ 3 - 0
src/components/topHead.vue

@@ -0,0 +1,3 @@
+<template>
+  <div>顶部导航</div>
+</template>

+ 40 - 0
src/components/workscope/equip.vue

@@ -0,0 +1,40 @@
+<template>
+  <div>
+    <el-tree
+      :data="eqList"
+      show-checkbox
+      node-key="id"
+      :default-expanded-keys="[2, 3]"
+      :default-checked-keys="[5]"
+      :props="defaultProps"
+    >
+    </el-tree>
+  </div>
+</template>
+<script>
+import { sys_eq } from "@/api/workScope.js";
+
+export default {
+  data() {
+    return {
+      eqList: [],
+      defaultProps: {
+        children: "children",
+        label: "aliasName",
+      },
+    };
+  },
+  methods: {
+    // 专业系统设备树
+    getSys_eq_tree() {
+      sys_eq({ scopeFilter: true, target: "rtn" }).then((res) => {
+        console.log("res", res);
+        this.eqList = res.rtn;
+      });
+    },
+  },
+  created() {
+    this.getSys_eq_tree();
+  },
+};
+</script>

+ 91 - 0
src/components/workscope/floorSpace.vue

@@ -0,0 +1,91 @@
+<template>
+  <div id="floor_space">
+    <el-row>
+      <el-col :span="12">
+        <el-input
+          type="textarea"
+          :rows="2"
+          placeholder="此处填写范围描述"
+          v-model="textarea"
+        >
+        </el-input>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="6">
+        <h5>空间类型</h5>
+        <el-tree
+          :data="spaceTree"
+          show-checkbox
+          node-key="id"
+          :default-expanded-keys="[2, 3]"
+          :default-checked-keys="[5]"
+          :props="defaultProps"
+        >
+        </el-tree>
+      </el-col>
+      <el-col :span="6">
+        <h5>空间分区</h5>
+        <el-checkbox-group v-model="checkList">
+          <el-checkbox
+            v-for="(item, key) in partitioneList"
+            :key="key"
+            class="checkList"
+            :label="item.name"
+          ></el-checkbox>
+          <el-checkbox class="checkList" label="复选框 A"></el-checkbox>
+        </el-checkbox-group>
+      </el-col>
+    </el-row>
+    <div></div>
+  </div>
+</template>
+<script>
+import { space_fun, space_zone } from "@/api/workScope.js";
+import { treeTranslation } from "@/until.js";
+export default {
+  data() {
+    return {
+      // 分区范围
+      partitioneList: [],
+      spaceTree: [], //空间树
+      defaultProps: {
+        children: "children",
+        label: "label",
+      },
+      checkList: [],
+    };
+  },
+  methods: {
+    //请求树结构
+    getSpaceTree() {
+      space_fun({ target: "rtn" }).then((res) => {
+        this.spaceTree = treeTranslation(res.rtn, ["code", "name", "children"]);
+      });
+    },
+    //请求空间区域类型
+    spaceZone() {
+      space_zone({}).then((res) => {
+        res.rtn.forEach((item) => {
+          this.partitioneList.push({
+            name: item.name,
+            id: item.code,
+          });
+        });
+      });
+    },
+  },
+
+  created() {
+    this.getSpaceTree();
+    this.spaceZone();
+  },
+};
+</script>
+<style lang="less" scoped>
+#floor_space {
+  .checkList {
+    display: block;
+  }
+}
+</style>

+ 121 - 0
src/components/workscope/pipe.vue

@@ -0,0 +1,121 @@
+<template>
+  <div>
+    <el-row>
+      <el-col :span="12">
+        <el-collapse v-model="activeName" accordion>
+          <el-collapse-item
+            v-for="(item, key) in pipeList"
+            :key="key"
+            :title="item.type"
+            :name="key + 1"
+          >
+            <el-table :data="tableData" style="width: 100%">
+              <el-table-column
+                v-for="(headitem, key) in tableHead"
+                :key="key"
+                :prop="headitem.name"
+                :label="headitem.label"
+                :width="headitem.width"
+              >
+              </el-table-column>
+              <el-table-column label="操作">
+                <template slot-scope="scope">
+                  <i
+                    class="el-icon-delete"
+                    @click="handleEdit(scope.$index, scope.row)"
+                  ></i>
+                </template>
+              </el-table-column>
+            </el-table>
+            <div>
+              <span>需要系统图:</span>
+              <el-switch
+                v-model="value"
+                active-color="#13ce66"
+                inactive-color="#ff4949"
+              >
+              </el-switch>
+            </div>
+            <div>
+              <span>精细化机房</span>
+              <el-checkbox-group v-model="checkList">
+                <el-checkbox
+                  v-for="(item, key) in mrList"
+                  :key="key"
+                  class="checkList"
+                  :label="item.name"
+                ></el-checkbox>
+                <el-checkbox class="checkList" label="复选框 A"></el-checkbox>
+              </el-checkbox-group>
+            </div>
+          </el-collapse-item>
+        </el-collapse>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+<script>
+import { major_mr } from "@/api/workScope.js";
+export default {
+  data() {
+    return {
+      activeName: "1",
+      pipeList: [
+        {
+          type: "中央供冷系统",
+          teble: [],
+        },
+        {
+          type: "应急照明系统",
+          teble: [],
+        },
+      ],
+      tableHead: [
+        {
+          label: "管道类型名",
+          name: "pipeName",
+          width: "180",
+        },
+        {
+          label: "仅干管",
+          name: "onlyMain",
+          width: "180",
+        },
+        {
+          label: "含支路管道",
+          name: "andBranch",
+          width: "180",
+        },
+        {
+          label: "其他",
+          name: "anthor",
+          width: "180",
+        },
+      ],
+      tableData: [
+        {
+          date: "2016-05-02",
+          pipeName: "王小虎",
+          label: "上海市普陀区金沙江路 1518 弄",
+        },
+      ],
+      // 机房list
+      mrList: [],
+      checkList: [],
+    };
+  },
+  mounted() {
+    major_mr({ target: "rtn" }).then((res) => {
+      this.mrList = res.rtn.map((item) => {
+        item.id = item.code;
+        return item;
+      });
+    });
+  },
+};
+</script>
+<style lang="less" scoped>
+.checkList {
+  display: block;
+}
+</style>

+ 119 - 0
src/components/workscope/relation.vue

@@ -0,0 +1,119 @@
+  <template>
+  <div class="relation">
+    <el-row>
+      <el-col :span="12">
+        <div class="top">
+          <h5>关系范围</h5>
+          <el-button
+            type="primary"
+            size="small"
+            icon="el-icon-circle-plus"
+            @click="addItem"
+            >添加</el-button
+          >
+        </div>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="12">
+        <el-table :data="tableData" style="width: 100%">
+          <el-table-column prop="date" label="日期" width="180">
+          </el-table-column>
+          <el-table-column prop="name" label="姓名" width="180">
+          </el-table-column>
+          <el-table-column prop="address" label="地址"> </el-table-column>
+          <el-table-column label="操作">
+            <template slot-scope="scope">
+              <i
+                class="el-icon-delete"
+                @click="handleEdit(scope.$index, scope.row)"
+              ></i>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-col>
+    </el-row>
+    <!-- 新增弹框 -->
+    <el-dialog
+      title="提示"
+      :visible.sync="dialogVisible"
+      width="30%"
+      :before-close="handleClose"
+    >
+      <span>这是一段信息</span>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="dialogVisible = false"
+          >确 定</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { dict_rels } from "@/api/workScope.js";
+export default {
+  data() {
+    return {
+      dialogVisible: false,
+      tableData: [
+        {
+          date: "2016-05-02",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1518 弄",
+        },
+        {
+          date: "2016-05-04",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1517 弄",
+        },
+        {
+          date: "2016-05-01",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1519 弄",
+        },
+        {
+          date: "2016-05-03",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1516 弄",
+        },
+      ],
+    };
+  },
+  methods: {
+    handleClose(done) {
+      this.$confirm("确认关闭?")
+        .then((_) => {
+          done();
+        })
+        .catch((_) => {});
+    },
+    handleEdit() {
+      this.dialogVisible = true;
+    },
+    addItem() {
+      this.dialogVisible = true;
+    },
+    //获取关系范围
+    getRelation() {
+      dict_rels({ target: "rtn" }).then((res) => {
+        console.log(res);
+      });
+    },
+  },
+  mounted() {
+    this.getRelation();
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.relation {
+  .top {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+  }
+}
+</style>

+ 37 - 0
src/components/workscope/system.vue

@@ -0,0 +1,37 @@
+<template>
+  <div>
+    <el-tree
+      :data="treeList"
+      show-checkbox
+      node-key="id"
+      :default-expanded-keys="[2, 3]"
+      :default-checked-keys="[5]"
+      :props="defaultProps"
+    >
+    </el-tree>
+  </div>
+</template>
+<script>
+import { major_sys } from "@/api/workScope.js";
+export default {
+  data() {
+    return {
+      treeList: [],
+      defaultProps: {
+        children: "children",
+        label: "aliasName",
+      },
+    };
+  },
+  methods: {
+    majorSys() {
+      major_sys({ scopeFilter: true, target: "rtn" }).then((res) => {
+        this.treeList = res.rtn;
+      });
+    },
+  },
+  created() {
+    this.majorSys()
+  },
+};
+</script>

+ 3 - 0
src/main.js

@@ -4,6 +4,9 @@ import router from './router'
 import store from './store'
 
 Vue.config.productionTip = false
+import ElementUI from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+Vue.use(ElementUI);
 
 new Vue({
   router,

+ 18 - 9
src/router/index.js

@@ -1,22 +1,31 @@
 import Vue from 'vue'
 import VueRouter from 'vue-router'
-import Home from '../views/Home.vue'
+import spacetask from '../views/spacetask.vue'
+import qrcode from '../views/qrcode.vue'
+import workscope from '../views/workscope.vue'
 
 Vue.use(VueRouter)
 
 const routes = [
   {
     path: '/',
-    name: 'Home',
-    component: Home
+    name: 'workscope',
+    component: workscope
   },
   {
-    path: '/about',
-    name: 'About',
-    // route level code-splitting
-    // this generates a separate chunk (about.[hash].js) for this route
-    // which is lazy-loaded when the route is visited.
-    component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
+    path: '/spacetask',
+    name: 'spacetask',
+    component: spacetask
+  },
+  {
+    path: '/qrcode',
+    name: 'qrcode',
+    component: qrcode
+  },
+  {
+    path: '/workscope',
+    name: 'workscope',
+    component: workscope
   }
 ]
 

+ 22 - 0
src/until.js

@@ -0,0 +1,22 @@
+export function treeTranslation(tree, oldkeys = [], newkeys = ["id", "label", "children"]) {
+    let newTree = [];
+    tree.forEach((item) => {
+        let newItem = {};
+        newItem[newkeys[0]] = item[oldkeys[0]];
+        newItem[newkeys[1]] = item[oldkeys[1]];
+        newItem[newkeys[2]] = item[oldkeys[2]];
+        newItem.level = item.level;
+        if (item.children && item.children.length) {
+            const children = treeTranslation(item.children, [
+                "code",
+                "name",
+                "children",
+            ]);
+            newItem.children = children;
+        } else {
+            newItem.children = [];
+        }
+        newTree.push(newItem);
+    });
+    return newTree;
+}

+ 22 - 1
src/views/About.vue

@@ -1,5 +1,26 @@
 <template>
   <div class="about">
-    <h1>This is an about page</h1>
+    <img v-for="(url,key) in urls" :key="key" :src="url" alt="" />
   </div>
 </template>
+<script>
+import QRCode from "qrcode";
+export default {
+  data() {
+    return {
+      urls: [],
+    };
+  },
+  mounted() {
+    for (let i = 0; i < 100; i++) {
+      QRCode.toDataURL("I am a pony!"+i)
+        .then((url) => {
+          this.urls.push(url);
+        })
+        .catch((err) => {
+          console.error(err);
+        });
+    }
+  },
+};
+</script>

+ 107 - 0
src/views/qrcode.vue

@@ -0,0 +1,107 @@
+<template>
+  <div class="qrcode">
+    <div class="top">
+      <div class="left">
+        <el-input-number
+          class="input"
+          size="small"
+          v-model="number"
+          :min="0"
+          :max="200"
+          @change="changeNumber"
+        ></el-input-number>
+        <el-button type="primary" size="small" @click="downloadQrcode" plain
+          >批量下载</el-button
+        >
+      </div>
+      <div class="right"></div>
+      <el-button type="primary" size="small" @click="clearQrcode" plain
+        >清空界面</el-button
+      >
+    </div>
+    <img v-for="obj in urls" :key="obj.uuid" :src="obj.url" alt="" />
+  </div>
+</template>
+<script>
+import QRCode from "qrcode";
+import { v4 as uuidv4 } from "uuid";
+import JSZip from "jszip";
+import { saveAs } from "file-saver";
+export default {
+  data() {
+    return {
+      urls: [],
+      number: 0,
+    };
+  },
+  mounted() {},
+  methods: {
+    // 改变数量
+    changeNumber(val) {
+      if (val == undefined) {
+        this.number = 0;
+      } else {
+        this.number = val;
+      }
+      if (this.number) {
+        this.DracodeList();
+      }
+    },
+    // 绘制Qrcode
+    DracodeList() {
+      this.urls = [];
+      for (let i = 0; i < this.number; i++) {
+        const uuid = uuidv4();
+        QRCode.toDataURL(uuid)
+          .then((url) => {
+            this.urls.push({
+              url,
+              uuid,
+            });
+          })
+          .catch((err) => {
+            console.error(err);
+          });
+      }
+    },
+    //清空界面
+    clearQrcode() {
+      this.urls = [];
+    },
+    //下载二维码
+    downloadQrcode() {
+      if (!this.urls.length) {
+        return;
+      }
+      var zip = new JSZip();
+      var img = zip.folder("QRcode");
+      const urls = this.urls;
+
+      setTimeout(function () {
+        for (var i = 0; i < urls.length; i++) {
+          img.file(urls[i].uuid + ".png", urls[i].url.substring(22), {
+            base64: true,
+          });
+        }
+        zip.generateAsync({ type: "blob" }).then(function (content) {
+          saveAs(content, "QRcode.zip");
+        });
+      }, 100);
+    },
+  },
+};
+</script>
+<style lang="less" scoped>
+.qrcode {
+  .top {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    .left {
+      .input {
+        margin-right: 12px;
+      }
+    }
+  }
+}
+</style>

+ 3 - 0
src/views/spacetask.vue

@@ -0,0 +1,3 @@
+<template>
+  <div>空间任务</div>
+</template>

+ 53 - 0
src/views/workscope.vue

@@ -0,0 +1,53 @@
+<template>
+  <div id="workScopes">
+    <el-tabs v-model="activeName" @tab-click="handleClick">
+      <el-tab-pane label="建筑空间区域范围" name="first">
+        <div class="box">
+          <floorSpace></floorSpace>
+        </div>
+      </el-tab-pane>
+      <el-tab-pane label="专业系统范围" name="second">
+        <system></system>
+      </el-tab-pane>
+      <el-tab-pane label="管道范围" name="third">
+        <pipe></pipe>
+      </el-tab-pane>
+      <el-tab-pane label="设备设施范围" name="fourth">
+        <equip></equip>
+      </el-tab-pane>
+      <el-tab-pane label="关系范围" name="fifth">
+        <relation></relation>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+<script>
+import equip from "@/components/workscope/equip";
+import floorSpace from "@/components/workscope/floorSpace";
+import pipe from "@/components/workscope/pipe";
+import relation from "@/components/workscope/relation";
+import system from "@/components/workscope/system";
+
+export default {
+  components: {
+    equip,
+    floorSpace,
+    pipe,
+    relation,
+    system,
+  },
+  data() {
+    return {
+      activeName: "first",
+    };
+  },
+  mounted(){
+  }
+};
+</script>
+<style lang="less" scoped>
+#workScopes {
+  width: 100%;
+  height: 100%;
+}
+</style>

+ 18 - 0
vue.config.js

@@ -0,0 +1,18 @@
+module.exports = {
+    devServer: {
+        proxy: {
+            '/clmt': {
+                target: 'http://192.168.0.48:8082/',
+                changeOrigin: true,
+                secure: false,
+            },
+        },
+        // 关闭esline
+        overlay: {
+            warnings: false,
+            errors: false
+        },
+        // lintOnSave: false
+    },
+    lintOnSave: false,
+};