lishifeng
2020-08-20 e20a5914437d4c741e29d5a0625c95b574d4547a
首页1
6个文件已添加
6个文件已修改
1174 ■■■■ 已修改文件
package-lock.json 347 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/login_logo.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/api.js 242 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/axios.js 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/history.js 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/realTime.js 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/ContentBox.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/index.vue 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/login.vue 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/routes.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package-lock.json
@@ -1746,6 +1746,17 @@
          "integrity": "sha1-4a1IbmxUUBY0xsOXxcEh2qODYHw=",
          "dev": true
        },
        "ansi-styles": {
          "version": "4.2.1",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
          "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
          "dev": true,
          "optional": true,
          "requires": {
            "@types/color-name": "^1.1.1",
            "color-convert": "^2.0.1"
          }
        },
        "cacache": {
          "version": "13.0.1",
          "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-13.0.1.tgz?cache=0&sync_timestamp=1594429684526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-13.0.1.tgz",
@@ -1772,6 +1783,34 @@
            "unique-filename": "^1.1.1"
          }
        },
        "chalk": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
          "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
          "dev": true,
          "optional": true,
          "requires": {
            "ansi-styles": "^4.1.0",
            "supports-color": "^7.1.0"
          }
        },
        "color-convert": {
          "version": "2.0.1",
          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
          "dev": true,
          "optional": true,
          "requires": {
            "color-name": "~1.1.4"
          }
        },
        "color-name": {
          "version": "1.1.4",
          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
          "dev": true,
          "optional": true
        },
        "find-cache-dir": {
          "version": "3.3.1",
          "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz?cache=0&sync_timestamp=1583734591888&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-3.3.1.tgz",
@@ -1792,6 +1831,13 @@
            "locate-path": "^5.0.0",
            "path-exists": "^4.0.0"
          }
        },
        "has-flag": {
          "version": "4.0.0",
          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
          "dev": true,
          "optional": true
        },
        "locate-path": {
          "version": "5.0.0",
@@ -1857,6 +1903,16 @@
            "minipass": "^3.1.1"
          }
        },
        "supports-color": {
          "version": "7.1.0",
          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
          "dev": true,
          "optional": true,
          "requires": {
            "has-flag": "^4.0.0"
          }
        },
        "terser-webpack-plugin": {
          "version": "2.3.8",
          "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-2.3.8.tgz?cache=0&sync_timestamp=1597229611059&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-2.3.8.tgz",
@@ -1872,6 +1928,21 @@
            "source-map": "^0.6.1",
            "terser": "^4.6.12",
            "webpack-sources": "^1.4.3"
          }
        },
        "vue-loader-v16": {
          "version": "npm:vue-loader@16.0.0-beta.5",
          "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-beta.5.tgz",
          "integrity": "sha512-ciWfzNefqWlmzKznCWY9hl+fPP4KlQ0A9MtHbJ/8DpyY+dAM8gDrjufIdxwTgC4szE4EZC3A6ip/BbrqM84GqA==",
          "dev": true,
          "optional": true,
          "requires": {
            "@types/mini-css-extract-plugin": "^0.9.1",
            "chalk": "^3.0.0",
            "hash-sum": "^2.0.0",
            "loader-utils": "^1.2.3",
            "merge-source-map": "^1.1.0",
            "source-map": "^0.6.1"
          }
        }
      }
@@ -2446,6 +2517,14 @@
      "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=",
      "dev": true
    },
    "async-validator": {
      "version": "1.8.5",
      "resolved": "https://registry.npmjs.org/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",
@@ -2485,6 +2564,37 @@
      "integrity": "sha1-4eguTz6Zniz9YbFhKA0WoRH4ZCg=",
      "dev": true
    },
    "axios": {
      "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"
      },
      "dependencies": {
        "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"
          }
        },
        "follow-redirects": {
          "version": "1.5.10",
          "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
          "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
          "requires": {
            "debug": "=3.1.0"
          }
        },
        "ms": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
        }
      }
    },
    "babel-eslint": {
      "version": "10.1.0",
      "resolved": "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.1.0.tgz",
@@ -2498,6 +2608,11 @@
        "eslint-visitor-keys": "^1.0.0",
        "resolve": "^1.12.0"
      }
    },
    "babel-helper-vue-jsx-merge-props": {
      "version": "2.0.3",
      "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
      "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg=="
    },
    "babel-loader": {
      "version": "8.1.0",
@@ -2519,6 +2634,27 @@
      "dev": true,
      "requires": {
        "object.assign": "^4.1.0"
      }
    },
    "babel-runtime": {
      "version": "6.26.0",
      "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",
        "regenerator-runtime": "^0.11.0"
      },
      "dependencies": {
        "core-js": {
          "version": "2.6.11",
          "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
          "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
        },
        "regenerator-runtime": {
          "version": "0.11.1",
          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
          "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
        }
      }
    },
    "balanced-match": {
@@ -4139,8 +4275,7 @@
    "deepmerge": {
      "version": "1.5.2",
      "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz",
      "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=",
      "dev": true
      "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M="
    },
    "default-gateway": {
      "version": "5.0.5",
@@ -4569,6 +4704,14 @@
        "safer-buffer": "^2.1.0"
      }
    },
    "echarts": {
      "version": "4.8.0",
      "resolved": "https://registry.npmjs.org/echarts/-/echarts-4.8.0.tgz",
      "integrity": "sha512-YwShpug8fWngj/RlgxDaYrLBoD+LsZUArrusjNPHpAF+is+gGe38xx4W848AwWMGoi745t3OXM52JedNrv+F6g==",
      "requires": {
        "zrender": "4.3.1"
      }
    },
    "ee-first": {
      "version": "1.1.1",
      "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz",
@@ -4586,6 +4729,19 @@
      "resolved": "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.533.tgz?cache=0&sync_timestamp=1597289736433&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felectron-to-chromium%2Fdownload%2Felectron-to-chromium-1.3.533.tgz",
      "integrity": "sha1-1+XKTVfpvJmvh+++E+e+Xd5ymw8=",
      "dev": true
    },
    "element-ui": {
      "version": "2.13.2",
      "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.13.2.tgz",
      "integrity": "sha512-r761DRPssMPKDiJZWFlG+4e4vr0cRG/atKr3Eqr8Xi0tQMNbtmYU1QXvFnKiFPFFGkgJ6zS6ASkG+sellcoHlQ==",
      "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.3",
@@ -6121,6 +6277,13 @@
      "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
      "dev": true
    },
    "image-size": {
      "version": "0.5.5",
      "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
      "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
      "dev": true,
      "optional": true
    },
    "import-cwd": {
      "version": "2.1.0",
      "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz",
@@ -6701,6 +6864,11 @@
        }
      }
    },
    "js-md5": {
      "version": "0.7.3",
      "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz",
      "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ=="
    },
    "js-message": {
      "version": "1.0.5",
      "resolved": "https://registry.npm.taobao.org/js-message/download/js-message-1.0.5.tgz",
@@ -6839,6 +7007,69 @@
      "dev": true,
      "requires": {
        "launch-editor": "^2.2.1"
      }
    },
    "less": {
      "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": {
        "errno": "^0.1.1",
        "graceful-fs": "^4.1.2",
        "image-size": "~0.5.0",
        "make-dir": "^2.1.0",
        "mime": "^1.4.1",
        "native-request": "^1.0.5",
        "source-map": "~0.6.0",
        "tslib": "^1.10.0"
      },
      "dependencies": {
        "mime": {
          "version": "1.6.0",
          "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": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
          "dev": true,
          "optional": true
        }
      }
    },
    "less-loader": {
      "version": "6.2.0",
      "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-6.2.0.tgz",
      "integrity": "sha512-Cl5h95/Pz/PWub/tCBgT1oNMFeH1WTD33piG80jn5jr12T4XbxZcjThwNXDQ7AG649WEynuIzO4b0+2Tn9Qolg==",
      "dev": true,
      "requires": {
        "clone": "^2.1.2",
        "less": "^3.11.3",
        "loader-utils": "^2.0.0",
        "schema-utils": "^2.7.0"
      },
      "dependencies": {
        "clone": {
          "version": "2.1.2",
          "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
          "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
          "dev": true
        },
        "loader-utils": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
          "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
          "dev": true,
          "requires": {
            "big.js": "^5.2.2",
            "emojis-list": "^3.0.0",
            "json5": "^2.1.2"
          }
        }
      }
    },
    "leven": {
@@ -7442,6 +7673,13 @@
        "to-regex": "^3.0.1"
      }
    },
    "native-request": {
      "version": "1.0.7",
      "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.7.tgz",
      "integrity": "sha512-9nRjinI9bmz+S7dgNtf4A70+/vPhnd+2krGpy4SUlADuOuSa24IDkNaZ+R/QT1wQ6S8jBdi6wE7fLekFZNfUpQ==",
      "dev": true,
      "optional": true
    },
    "natural-compare": {
      "version": "1.4.0",
      "resolved": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz",
@@ -7566,6 +7804,11 @@
      "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1596373165623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz",
      "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=",
      "dev": true
    },
    "normalize-wheel": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
      "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
    },
    "npm-run-path": {
      "version": "2.0.2",
@@ -9199,6 +9442,11 @@
      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
      "dev": true
    },
    "resize-observer-polyfill": {
      "version": "1.5.1",
      "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
    },
    "resolve": {
      "version": "1.17.0",
      "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.17.0.tgz",
@@ -10319,6 +10567,11 @@
        "neo-async": "^2.6.0"
      }
    },
    "throttle-debounce": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
      "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg=="
    },
    "through": {
      "version": "2.3.8",
      "resolved": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz",
@@ -10870,6 +11123,11 @@
      "integrity": "sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=",
      "dev": true
    },
    "vue-layer": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/vue-layer/-/vue-layer-1.2.0.tgz",
      "integrity": "sha512-ExCljOw/DGHPKHEtVl75+KuAU0teycPSu3eGpyNON6UTP0XdkunOiy0l3o8xKwCqyT90jsKn9Hmy0IBoXkxLpQ=="
    },
    "vue-loader": {
      "version": "15.9.3",
      "resolved": "https://registry.npm.taobao.org/vue-loader/download/vue-loader-15.9.3.tgz?cache=0&sync_timestamp=1597130758101&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-15.9.3.tgz",
@@ -10888,86 +11146,6 @@
          "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhash-sum%2Fdownload%2Fhash-sum-1.0.2.tgz",
          "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
          "dev": true
        }
      }
    },
    "vue-loader-v16": {
      "version": "npm:vue-loader@16.0.0-beta.5",
      "resolved": "https://registry.npm.taobao.org/vue-loader/download/vue-loader-16.0.0-beta.5.tgz?cache=0&sync_timestamp=1597130758101&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-16.0.0-beta.5.tgz",
      "integrity": "sha1-BO3IiUkrA6RF56xm6SJqcBdcqKA=",
      "dev": true,
      "optional": true,
      "requires": {
        "@types/mini-css-extract-plugin": "^0.9.1",
        "chalk": "^3.0.0",
        "hash-sum": "^2.0.0",
        "loader-utils": "^1.2.3",
        "merge-source-map": "^1.1.0",
        "source-map": "^0.6.1"
      },
      "dependencies": {
        "ansi-styles": {
          "version": "4.2.1",
          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz",
          "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=",
          "dev": true,
          "optional": true,
          "requires": {
            "@types/color-name": "^1.1.1",
            "color-convert": "^2.0.1"
          }
        },
        "chalk": {
          "version": "3.0.0",
          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-3.0.0.tgz",
          "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
          "dev": true,
          "optional": true,
          "requires": {
            "ansi-styles": "^4.1.0",
            "supports-color": "^7.1.0"
          }
        },
        "color-convert": {
          "version": "2.0.1",
          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
          "dev": true,
          "optional": true,
          "requires": {
            "color-name": "~1.1.4"
          }
        },
        "color-name": {
          "version": "1.1.4",
          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
          "dev": true,
          "optional": true
        },
        "has-flag": {
          "version": "4.0.0",
          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz",
          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
          "dev": true,
          "optional": true
        },
        "source-map": {
          "version": "0.6.1",
          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
          "dev": true,
          "optional": true
        },
        "supports-color": {
          "version": "7.1.0",
          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.1.0.tgz",
          "integrity": "sha1-aOMlkd9z4lrRxLSRCKLsUHliv9E=",
          "dev": true,
          "optional": true,
          "requires": {
            "has-flag": "^4.0.0"
          }
        }
      }
    },
@@ -11876,6 +12054,11 @@
          "dev": true
        }
      }
    },
    "zrender": {
      "version": "4.3.1",
      "resolved": "https://registry.npmjs.org/zrender/-/zrender-4.3.1.tgz",
      "integrity": "sha512-CeH2TpJeCdG0TAGYoPSAcFX2ogdug1K7LIn9UO/q9HWqQ54gWhrMAlDP9AwWYMUDhrPe4VeazQ4DW3msD96nUQ=="
    }
  }
}
package.json
@@ -8,10 +8,13 @@
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "axios": "^0.19.2",
    "core-js": "^3.6.5",
    "echarts": "^4.8.0",
    "element-ui": "^2.13.2",
    "js-md5": "^0.7.3",
    "vue": "^2.6.11",
    "vue-layer": "^1.2.0",
    "vue-router": "^3.4.3"
  },
  "devDependencies": {
@@ -21,6 +24,8 @@
    "babel-eslint": "^10.1.0",
    "eslint": "^6.7.2",
    "eslint-plugin-vue": "^6.2.2",
    "less": "^3.12.2",
    "less-loader": "^6.2.0",
    "vue-template-compiler": "^2.6.11"
  },
  "eslintConfig": {
src/assets/images/login_logo.jpg
src/assets/js/api.js
New file
@@ -0,0 +1,242 @@
import axios from "./axios";
import md5 from "js-md5";
/**
 * 初始化连接池
 * 无参
 */
export const initDBPool = () => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/LoginAction!initDBPool",
        data: null
    })
}
/**
 * 登录系统
 * 参数 "uinf.UName="+用户名+"&uinf.Upassword="+密码+"&uinf.UId="+是否记住密码(0,1)
 * 密码需要使用hex_md5加密
 */
export const login = (username, password) => {
    return axios({
        method: "post",
        url: '/yckj/'+`zijing_sx/LoginAction_login?uinf.UName=${username}&uinf.Upassword=${md5(password)}&uinf.UId=0`,
        data: null
    })
}
/**
 * 检测后台session
 * 无参
 */
export const checkLoginSession = () => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/LoginAction!getSessionByString",
        data: null
    })
}
/**
 * 查询省
 * 无参
 */
export const searchProvince = () => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/BattInfAction!serchAllStationName1",
        data: null
    })
}
/**
 * 查询市
 * 参数:json={"StationName1":"北京市"}
 */
export const searchCity = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/BattInfAction!serchAllStationName2",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 查询区县
 * 参数:json = {"StationName1":"北京市","StationName2":"市辖区"}
 */
export const searchCounty = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/BattInfAction!serchAllStationName5",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 查询机房停电信息
 * 无参
 */
export const searchPowerOff = () => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/BattPower_offAction!serchPowerOff",
        data: null
    })
}
/**
 * 查询电池组健康率
 * 无参
 */
export const searchBattGood = () => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/Battalarm_dataAction!serchGood",
        data: null
    })
}
/**
 * 添加地图上的机房
 * 参数:json={"StationName1":"", "StationName2":"", "StationName5":"","StationName3":""
 * "Address":"","longitude":"","latitude":"","information":""}
 */
export const addMapStation = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/BattMap_informationAction!add",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 查询地图机房信息(结果中有机房的位置信息)
 * 参数:json = {"StationName1":"北京市","StationName2":"市辖区","StationName5":"海淀区"}
 */
export const searchMapStation = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/BattMap_informationAction!serchStationName3",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 查询机房信息
 * 参数:json = {"StationName1":"北京市","StationName2":"市辖区","StationName5":"海淀区"}
 */
export const searchStation = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/BattInfAction!serchAllStationName",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 查询电池组信息
 * 参数:json = {"StationName1":"北京市","StationName2":"市辖区","StationName5":"海淀区","StationName3":"紫晶科技机房"}
 */
export const searchBattInfo = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/BattInfAction!serchAllBattinf",
        data: "json=" + JSON.stringify(params)
    })
}
//----------------------------
/**
 * 查询已添加到地图的机房
 * 参数:json={"adata":{"alm_cleared_type":0,"alm_id":1},"bplan":{"discharge_reason":3}}
 */
export const searchMap = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/BattMap_informationAction!searchUserManageStation",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 查询机房告警数,落后数和延时数
 * 参数:result={"StationId":"42070218"}
 */
export const searchRooms = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/BattInfAction!serchByIdLow",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 删除地图上的机房
 * 参数:json={"num":141,"StationId":"42070545",
 * "StationName":"湖北省-武汉市-BTS-东西湖区-GDXG演示","StationName3":"",
 * "Address":"湖北省-武汉市-东西湖区-公园南路","longitude":114.252963,"latitude":30.646197,"information":"",
 * "FBSDeviceId":910000120}
 */
export const searchDeletRoom = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/BattMap_informationAction!del",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 根据机房的id查询机房的经纬度
 * 参数:json={"StationName1":"北京市","StationName2":"市辖区","StationName3":"紫晶科技机房","StationName5":"海淀区"}
 */
export const searchRoomLocation = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/BattMap_informationAction!serchAddressByStationName3",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 设置地图默认显示的中心坐标
 * 参数:json={"map_longitude":113.971219,"map_latitude":30.605035,"map_level":11}
 */
export const searchCoordinate = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/Positiomap_usrAction!add",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 获取地图的中心坐标并将地图移动该坐标
 * 无参
 */
export const searchCoordinateMove = () => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/Positiomap_usrAction!serchByCondition",
        data: null
})
}
/**
 * 查询页面中的导航
 * 无参
 */
export const addNavigation = () => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/CustompageAction!searchAll",
        data: null
})
}
src/assets/js/axios.js
New file
@@ -0,0 +1,39 @@
import axios from 'axios';
import router from '@/router/index.js';
// 添加请求拦截器
/* axios.interceptors.request.use(function (config) {
    if (process.env.NODE_ENV != 'dev') {
        config.url = config.url.replace('/yckj', '');
    }
    // 在发送请求之前做些什么
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
}); */
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response;
}, function (error) {
    // 对响应错误做点什么
    if (error && error.response) {
        switch (error.response.status) {
            case 401:
                router.push("/login");
                break;
            case 403:
                router.push("/login");
                break;
            case 404:
                router.push("/login");
                break;
            default:
        }
    }
    return Promise.reject(error);
});
export default axios;
src/assets/js/history.js
New file
@@ -0,0 +1,45 @@
import axios from "./axios";
/**
 * 获取充放电记录
 * 参数:json={"num":910000119,"BattGroupId":1005129}
 * 返回结果说明:
 * test_type==3&&test_starttype==3?核容放电:监测放电
 * test_type==2&&test_starttype=3?核容充电:监测充电
 * test_starttime 开始测试时间
 * test_record_count 后台记录的笔数
 * test_stoptype_reason 停止原因
 */
export const searchBattTestData = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/Batttestdata_infAction_searchBattTestInfDataById",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 获取顶部电池组信息
 * 参数:btds.BattGroupId=1005129&btds.test_record_count=7
 */
export const searchBattTestDataStop = (BattGroupId,test_record_count) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/BatttestdatastopAction_findByInfo?btds.BattGroupId=" + BattGroupId + "&btds.test_record_count=" + test_record_count,
        data: null
    })
}
/**
 * 查询历史数据
 * 参数: json={"BattGroupId":1005129,"test_record_count":"7"}
 */
export const searchHistory = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/BatttestdataAction!findhistory",
        data: "json=" + JSON.stringify(params)
    })
}
src/assets/js/realTime.js
New file
@@ -0,0 +1,166 @@
import axios from "./axios";
/**
 * 查询所有的阀值
 * 无参
 */
export const realTimeMonitoring = () => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/Batt_param_lowAction_searchAll",
        data: null
    })
}
/**
 * 查询均衡供电模块信息
 * json={"dev_id": ""}
 */
export const realTimePower = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/JhStateAction_action_serchByCondition",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 根据设备id查询设备当前的开关状态
 * json={"dev_id":910000022}
 */
export const realTimePoweOff = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/Fbs9100_stateAction_action_serchContactorState",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 根据电池组id查询电池组实时组端信息
 * 参数:rtstate.battGroupId=1005074
 */
export const realTimeGroup = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/Batt_rtstateAction_serchByCondition?rtstate.battGroupId=" + params,
        data: null
    })
}
/**
 * 根据电池组id查询该电池组中所有电池信息  (图表数据)
 * json={"BattGroupId":1005074}
 */
export const realTimeSearch = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/Batt_rtdataAction_serchByCondition",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 查询电池告警参数
 * 参数:json={"dev_id":910000022}
 */
export const realTimeAlarm = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/Dev_paramAction!serchParamById",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 获取当前选中的单体是否已经被添加
 * 参数:json={"BattGroupId":1005151,"MonNum":"1"}
 */
export const realTimeNot = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/Batt_attentionAction!judgeInOrNot",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 添加关注单体
 * json={"BattGroupId":"1005151","MonNum":"1"}
 */
export const realTimeAdd = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/Batt_attentionAction!add",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 查询自己管理的电池组中充放电状态
 * 无参
 */
export const realTimeState = () => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/Batt_rtstateAction!serchDisOrChargrNew",
        data: null
    })
}
/**
 * 查询用户的图表颜色参数
 * 无参
 */
export const realTimeColor = () => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/Chart_ColorAction!serchByCondition",
        data: null
    })
}
/**
 * 修改用户的图表颜色参数
 * 参数:json={"min_color":"#FF0000","max_color":"#00FF00","normal_color":"#33ACFF",
 * "change_color":"#FFFF00","warn_color":"#FF00FF"}
 */
export const realTimeColorParams = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/Chart_ColorAction!update",
        data: "json=" + JSON.stringify(params)
    })
}
/**
 * 查询所有61850设备的告警状态
 * 无参
 */
export const realTimeAlarmStatus = () => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/Fbs9100_stateAction_action_serchBy61850Alarms",
        data: null
    })
}
/**
 * 查询电池单体的内阻曲线数据   (弹出框)
 * 参数:json={"BattGroupId":1005151,"MonNum":11}
 */
export const realTimeCurve = (params) => {
    return axios({
        method: "post",
        url: "/yckj/zijing_sx/BattresdataAction!serchByMonHistory",
        data: "json=" + JSON.stringify(params)
    })
}
src/components/ContentBox.vue
@@ -53,6 +53,7 @@
        toggleChange() {
            console.log(this.hide);
            this.hide = this.hide?false:true;
        }
    },
    computed: {
src/pages/index.vue
@@ -1,18 +1,12 @@
<template>
    <flex-layout direction="row" class="page-index">
        <content-box title="站点列表"
        slot="header"
        toggle
        style="width:320px">
            <my-el-tree
            :data="data"
            @node-click="nodeClick"></my-el-tree>
    <content-box title="站点列表" slot="header" toggle style="width:320px">
      <my-el-tree :data="data" @node-click="nodeClick"></my-el-tree>
        </content-box>
        <div class="map-container">
            <div ref="map" class="map-content"></div>
        </div>
        <content-box title="站点列表"
        slot="footer" style="width:380px" no-header>
    <content-box title="站点列表" slot="footer" style="width:380px" no-header>
            <div class="pie-list">
                <div class="pie-item">
                    <pie-chart ref="chart1" id="chart1"></pie-chart>
@@ -32,21 +26,27 @@
</template>
<script>
import TMap from 'TMap'
import ContentBox from '../components/ContentBox'
import MyElTree from '../components/MyElTree'
import PieChart from '../components/chart/PieChart'
import TMap from "TMap";
import ContentBox from "../components/ContentBox";
import MyElTree from "../components/MyElTree";
import PieChart from "../components/chart/PieChart";
import {
  searchPowerOff,
  searchBattGood,
} from "@/assets/js/api";
let map, chart1, chart2, chart3, chart4;
export default {
    components: {
        ContentBox,
        MyElTree,
        PieChart,
    PieChart
    },
    data() {
        return {
            data: [
      /*    data: [
                {
                    id: '湖北省',
                    label: '湖北省',
@@ -92,9 +92,38 @@
                        }
                    ]
                }
            ],
        }
            ], */
    };
    },
  /* computed: {
    data() {
      return [
        {
          id: "湖北省",
          label: "湖北省",
          children: [
            {
              id: "湖北省-武汉市",
              label: "武汉市",
              children: [
                {
                  id: "河南省-驻马店市-驿城区",
                  label: "驿城区",
                  children: [
                    {
                      id: "河南省-驻马店市-驿城区",
                      label: "驿城区",
                      children: []
                    }
                  ]
                }
              ]
            }
          ]
        }
      ];
    }
  }, */
    methods: {
        initMap() {
            map = new TMap.Map(this.$refs.map, {
@@ -105,81 +134,102 @@
            });
            console.log(map);
        },
    /* 城市列表 */
        nodeClick(data) {
            console.log(data);
        },
        initChart() {
            // 饼状图1
            chart1 = {
                //红,蓝,绿
                color: ['#FF0000', '#1E90FF', '#00FF00'],
        color: ["#FF0000", "#1E90FF", "#00FF00"],
                title: {
                    text: '机房停电',
          text: "机房停电"
                },
                series:[{
                    name: '电池信息',
        series: [
          {
            name: "电池信息",
                    data:[
                        {value: 0, name: '机房停电'},
                        {value: 0, name: '机房掉站'},
                        {value: 0, name: '机房未停电'},
              { value: this.powerOff.sum, name: "机房停电" },
              { value: 0, name: "机房掉站" },
              {
                value: this.powerOff.newsum - this.powerOff.sum,
                name: "机房未停电"
              }
                    ]
                }]
          }
        ]
            };
            // 饼状图2
            chart2 = {
                // 红,黄,绿,蓝
                color: ['#FF0000', '#FFD700', '#00FF00', '#1E90FF'],
        color: ["#FF0000", "#FFD700", "#00FF00", "#1E90FF"],
                title: {
                    text: '机房续航能力',
          text: "机房续航能力"
                },
                series:[{
                    name: '电池信息',
        series: [
          {
            name: "电池信息",
                    data:[
                        {value: 0, name: '续航不足1小时'},
                        {value: 0, name: '续航不足1~2小时'},
                        {value: 0, name: '续航不足2~3小时'},
                        {value: 0, name: '续航3小时以上'},
              { value: 0, name: "续航不足1小时" },
              { value: 0, name: "续航不足1~2小时" },
              { value: 0, name: "续航不足2~3小时" },
              { value: 0, name: "续航3小时以上" }
                    ]
                }]
          }
        ]
            };
            // 饼状图3
            chart3 = {
                // 红, 黄,绿,紫色
                color: ['#FF0000', '#FFD700', '#00FF00', '#BA55D3'],
        color: ["#FF0000", "#FFD700", "#00FF00", "#BA55D3"],
                title: {
                    text: '电池状态',
          text: "电池状态"
                },
                series:[{
                    name: '电池信息',
        series: [
          {
            name: "电池信息",
                    data:[
                        {value: 0, name: '放电'},
                        {value: 0, name: '充电'},
                        {value: 0, name: '浮充'},
                        {value: 0, name: '均充'},
              { value: 0, name: "放电" },
              { value: 0, name: "充电" },
              { value: 0, name: "浮充" },
              { value: 0, name: "均充" }
                    ]
                }]
          }
        ]
            };
            // 饼状图4
            chart4 = {
                // 红, 深蓝色, 蓝,浅红,绿, 黄
                color: ['#FF0000', '#00008B', '#1E90FF', '#F08080', '#7CFC00','#FFD700'],
        color: [
          "#FF0000",
          "#00008B",
          "#1E90FF",
          "#F08080",
          "#7CFC00",
          "#FFD700"
        ],
                title: {
                    text: '电池告警率',
          text: "电池告警率"
                },
                series:[{
                    name: '电池信息',
        series: [
          {
            name: "电池信息",
                    data:[
                        {value: 0, name: '在线电压'},
                        {value: 0, name: '组端电压'},
                        {value: 0, name: '充电电流'},
                        {value: 0, name: '放电电流'},
                        {value: 0, name: '单体电压'},
                        {value: 0, name: '容量告警'},
              { value: 0, name: "在线电压" },
              { value: 0, name: "组端电压" },
              { value: 0, name: "充电电流" },
              { value: 0, name: "放电电流" },
              { value: 0, name: "单体电压" },
              { value: 0, name: "容量告警" }
                    ]
                }]
          }
        ]
            };
            
            // 设置图表
@@ -190,20 +240,38 @@
            this.$refs.chart2.setOption(chart2);
            this.$refs.chart3.setOption(chart3);
            this.$refs.chart4.setOption(chart4);
    },
    //获取echarts图表电池数据 /* 电池组健康率  机房停电信息 */
    async getBatteryData() {
      const [battGood, powerOff] = await Promise.all([
        searchBattGood(),
        searchPowerOff()
      ]);
      if (battGood.status !== 200) {
        return this.$message.error(battGood.statusText);
      }
      if (powerOff.status !== 200) {
        return this.$message.error(powerOff.statusText);
      }
      this.battGood = JSON.parse(battGood.data.result);
      this.powerOff = JSON.parse(powerOff.data.result);
      /*   console.log(' this.battGood', this.battGood);
         console.log(' this.powerOff',  this.powerOff); */
      this.initChart();
        }
    },
    mounted() {
        // 初始化地图
        this.initMap();
        // 初始化饼状图
        this.initChart();
    this.getBatteryData();
    }
}
};
</script>
<style scoped>
.page-index {
    color: #FFFFFF;
  color: #ffffff;
}
.map-container {
    margin-right: 4px;
src/pages/login.vue
New file
@@ -0,0 +1,121 @@
<template>
  <div class="login_container">
    <div class="login_box">
      <!-- 头像区 -->
      <div class="avatar">
        <img src="@/assets/images/login_logo.jpg">
      </div>
      <!--  登录表单区 -->
      <div style="margin: 20px;"></div>
      <el-form label-width="0px" class="login_from" :model="loginForm" ref="loginFormRef">
        <!-- 用户名 -->
        <el-form-item prop="username">
          <el-input v-model="loginForm.username" prefix-icon="iconfont icon-user"></el-input>
        </el-form-item>
        <!-- 密码 -->
        <el-form-item prop="password">
          <el-input
            v-model="loginForm.password"
            prefix-icon="iconfont icon-3702mima"
            type="password"
          ></el-input>
        </el-form-item>
        <el-form-item class="btns">
          <el-button type="primary" @click="onSubmit">登录</el-button>
          <el-button type="info">注册</el-button>
        </el-form-item>
      </el-form>
    </div>
  </div>
</template>
<script>
import { login } from "@/assets/js/api";
export default {
  data() {
    return {
      labelPosition: "right" /*  登录表单 */,
      formLabelAlign: {
        name: "",
        region: "",
        type: ""
      },
      /* 登录表单el-form 的 数据绑定 */
      loginForm: {
        username: "admin",
        password: "admin"
      }
    };
  },
  methods: {
    onSubmit() {
      this.$refs.loginFormRef.validate(async valid => {
        if (!valid) return;
        const { data: res } = await login(
          this.loginForm.username,
          this.loginForm.password
        );
        if (res.result && JSON.parse(res.result).code == 0)
          return this.$message.error(JSON.parse(res.result).msg);
        this.$message.success("登录成功");
        this.$router.push("/home");
      });
    }
  }
};
</script>
<style lang="less"  scoped>
/* 登录大盒子背景 */
.login_container {
  width: 100%;
}
/* 登录框 */
.login_box {
  width: 450px;
  height: 320px;
  background-color: #fff;
  border-radius: 3px;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  /* v图片的盒子 */
  .avatar {
    height: 130px;
    width: 130px;
    border: 1px solid #eee;
    border-radius: 50%; /* 边框圆角 */
    padding: 10px;
    box-shadow: 0 0 10px #ddd;
    position: absolute;
    left: 50%;
    transform: translate(-50%, -50%);
    background-color: #fff;
    /* v图片 */
    img {
      width: 130px;
      height: 130px;
      border-radius: 50%;
      background-color: #eeeeee;
    }
  }
}
/* 登录表单框 */
.login_from {
  position: absolute;
  bottom: 0;
  width: 100%;
  padding: 0 20px;
  box-sizing: border-box;
}
/* 登录按钮 */
.btns {
  text-align: center;
}
</style>
src/router/routes.js
@@ -1,5 +1,16 @@
export default [
    {
        path: '/',
        redirect: '/login'
      },
      {
        path: '/login',
        name: 'login',
        meta: {},
        component: (resolve) => require(['@/pages/login.vue'], resolve)
      },
    {
        path: '/home',
        meta: {},
        component: (resolve)=>require(['../pages/home.vue'], resolve)
vue.config.js
@@ -4,5 +4,20 @@
        config.externals = {
            TMap: "TMap"
        }
    },
    devServer: {
        // host: 'localhost',
        port: 8080,
        open: true,   //  自动打开浏览器
        proxy: {
          '/yckj': {
           /*  target: 'http://192.168.10.222:8080/', */  // 正式环境 (公司电脑服务器)  服务器接口域名
           target:'http://localhost:8919/',     /* 本机开启的服务器 */
            changeOrigin: true,  //是否跨域
            pathRewrite: {
              '^/yckj': ''  /* 本地域名 */
            }
          }
        }
    }
}