wangtao 2 years ago
parent
commit
bee04fba80

+ 1 - 1
.env.production

@@ -2,7 +2,7 @@ ENV = 'production'
 
 # 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇,Nginx 配置
 # 接口地址,注意协议,如果你没有配置 ssl,需要将 https 改为 http
-VUE_APP_BASE_API  = 'http://172.16.120.49/hjjcapi/'
+VUE_APP_BASE_API  = '/hjjcapi'
 # VUE_APP_BASE_API  = 'http://10.21.39.5:8093'
 # 如果接口是 http 形式, wss 需要改为 ws
 VUE_APP_WS_API = 'ws://10.21.39.5:8093'

+ 8 - 0
.history/.env_20220909152357.production

@@ -0,0 +1,8 @@
+ENV = 'production'
+
+# 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇,Nginx 配置
+# 接口地址,注意协议,如果你没有配置 ssl,需要将 https 改为 http
+VUE_APP_BASE_API  = '/hjjcapi'
+# VUE_APP_BASE_API  = 'http://10.21.39.5:8093'
+# 如果接口是 http 形式, wss 需要改为 ws
+VUE_APP_WS_API = 'ws://10.21.39.5:8093'

+ 8 - 0
.history/.env_20220909152358.production

@@ -0,0 +1,8 @@
+ENV = 'production'
+
+# 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇,Nginx 配置
+# 接口地址,注意协议,如果你没有配置 ssl,需要将 https 改为 http
+VUE_APP_BASE_API  = '/hjjcapi'
+# VUE_APP_BASE_API  = 'http://10.21.39.5:8093'
+# 如果接口是 http 形式, wss 需要改为 ws
+VUE_APP_WS_API = 'ws://10.21.39.5:8093'

+ 8 - 0
.history/.env_20220909152359.production

@@ -0,0 +1,8 @@
+ENV = 'production'
+
+# 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇,Nginx 配置
+# 接口地址,注意协议,如果你没有配置 ssl,需要将 https 改为 http
+VUE_APP_BASE_API  = '/hjjcapi'
+# VUE_APP_BASE_API  = 'http://10.21.39.5:8093'
+# 如果接口是 http 形式, wss 需要改为 ws
+VUE_APP_WS_API = 'ws://10.21.39.5:8093'

+ 8 - 0
.history/.env_20220909152402.production

@@ -0,0 +1,8 @@
+ENV = 'production'
+
+# 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇,Nginx 配置
+# 接口地址,注意协议,如果你没有配置 ssl,需要将 https 改为 http
+VUE_APP_BASE_API  = '/hjjcapi'
+# VUE_APP_BASE_API  = 'http://10.21.39.5:8093'
+# 如果接口是 http 形式, wss 需要改为 ws
+VUE_APP_WS_API = 'ws://10.21.39.5:8093'

+ 212 - 0
.history/public/index_20220906160225.html

@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="renderer" content="webkit">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
+    <link rel="icon" href="/favicon.png">
+    <title>
+        <%= webpackConfig.name %>
+    </title>
+    <style>
+        html,
+        body,
+        #app {
+            height: 100%;
+            margin: 0px;
+            padding: 0px;
+            /* background-color: #7171C6; */
+        }
+
+        .chromeframe {
+            margin: 0.2em 0;
+            background: #ccc;
+            color: #000;
+            padding: 0.2em 0;
+        }
+
+        #loader-wrapper {
+            position: fixed;
+            top: 0;
+            left: 0;
+            width: 100%;
+            height: 100%;
+            z-index: 999999;
+        }
+
+        #loader {
+            display: block;
+            position: relative;
+            left: 50%;
+            top: 50%;
+            width: 150px;
+            height: 150px;
+            margin: -75px 0 0 -75px;
+            border-radius: 50%;
+            border: 3px solid transparent;
+            border-top-color: #FFF;
+            -webkit-animation: spin 2s linear infinite;
+            -ms-animation: spin 2s linear infinite;
+            -moz-animation: spin 2s linear infinite;
+            -o-animation: spin 2s linear infinite;
+            animation: spin 2s linear infinite;
+            z-index: 1001;
+        }
+
+        #loader:before {
+            content: "";
+            position: absolute;
+            top: 5px;
+            left: 5px;
+            right: 5px;
+            bottom: 5px;
+            border-radius: 50%;
+            border: 3px solid transparent;
+            border-top-color: #FFF;
+            -webkit-animation: spin 3s linear infinite;
+            -moz-animation: spin 3s linear infinite;
+            -o-animation: spin 3s linear infinite;
+            -ms-animation: spin 3s linear infinite;
+            animation: spin 3s linear infinite;
+        }
+
+        #loader:after {
+            content: "";
+            position: absolute;
+            top: 15px;
+            left: 15px;
+            right: 15px;
+            bottom: 15px;
+            border-radius: 50%;
+            border: 3px solid transparent;
+            border-top-color: #FFF;
+            -moz-animation: spin 1.5s linear infinite;
+            -o-animation: spin 1.5s linear infinite;
+            -ms-animation: spin 1.5s linear infinite;
+            -webkit-animation: spin 1.5s linear infinite;
+            animation: spin 1.5s linear infinite;
+        }
+
+        @-webkit-keyframes spin {
+            0% {
+                -webkit-transform: rotate(0deg);
+                -ms-transform: rotate(0deg);
+                transform: rotate(0deg);
+            }
+            100% {
+                -webkit-transform: rotate(360deg);
+                -ms-transform: rotate(360deg);
+                transform: rotate(360deg);
+            }
+        }
+
+        @keyframes spin {
+            0% {
+                -webkit-transform: rotate(0deg);
+                -ms-transform: rotate(0deg);
+                transform: rotate(0deg);
+            }
+            100% {
+                -webkit-transform: rotate(360deg);
+                -ms-transform: rotate(360deg);
+                transform: rotate(360deg);
+            }
+        }
+
+        #loader-wrapper .loader-section {
+            position: fixed;
+            top: 0;
+            width: 51%;
+            height: 100%;
+            background: #7171C6;
+            z-index: 1000;
+            -webkit-transform: translateX(0);
+            -ms-transform: translateX(0);
+            transform: translateX(0);
+        }
+
+        #loader-wrapper .loader-section.section-left {
+            left: 0;
+        }
+
+        #loader-wrapper .loader-section.section-right {
+            right: 0;
+        }
+
+        .loaded #loader-wrapper .loader-section.section-left {
+            -webkit-transform: translateX(-100%);
+            -ms-transform: translateX(-100%);
+            transform: translateX(-100%);
+            -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+            transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+        }
+
+        .loaded #loader-wrapper .loader-section.section-right {
+            -webkit-transform: translateX(100%);
+            -ms-transform: translateX(100%);
+            transform: translateX(100%);
+            -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+            transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+        }
+
+        .loaded #loader {
+            opacity: 0;
+            -webkit-transition: all 0.3s ease-out;
+            transition: all 0.3s ease-out;
+        }
+
+        .loaded #loader-wrapper {
+            visibility: hidden;
+            -webkit-transform: translateY(-100%);
+            -ms-transform: translateY(-100%);
+            transform: translateY(-100%);
+            -webkit-transition: all 0.3s 1s ease-out;
+            transition: all 0.3s 1s ease-out;
+        }
+
+        .no-js #loader-wrapper {
+            display: none;
+        }
+
+        .no-js h1 {
+            color: #222222;
+        }
+
+        #loader-wrapper .load_title {
+            font-family: 'Open Sans';
+            color: #FFF;
+            font-size: 19px;
+            width: 100%;
+            text-align: center;
+            z-index: 9999999999999;
+            position: absolute;
+            top: 60%;
+            opacity: 1;
+            line-height: 30px;
+        }
+
+        #loader-wrapper .load_title span {
+            font-weight: normal;
+            font-style: italic;
+            font-size: 13px;
+            color: #FFF;
+            opacity: 0.5;
+        }
+    </style>
+</head>
+
+<body>
+    <div id="app">
+        <div id="loader-wrapper">
+            <div id="loader"></div>
+            <div class="loader-section section-left"></div>
+            <div class="loader-section section-right"></div>
+            <div class="load_title">正在加载系统资源,请耐心等待</div>
+        </div>
+    </div>
+</body>
+
+
+</html>

+ 212 - 0
.history/public/index_20220909152413.html

@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="renderer" content="webkit">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
+    <link rel="icon" href="/hjjcweb//favicon.png">
+    <title>
+        <%= webpackConfig.name %>
+    </title>
+    <style>
+        html,
+        body,
+        #app {
+            height: 100%;
+            margin: 0px;
+            padding: 0px;
+            /* background-color: #7171C6; */
+        }
+        
+        .chromeframe {
+            margin: 0.2em 0;
+            background: #ccc;
+            color: #000;
+            padding: 0.2em 0;
+        }
+        
+        #loader-wrapper {
+            position: fixed;
+            top: 0;
+            left: 0;
+            width: 100%;
+            height: 100%;
+            z-index: 999999;
+        }
+        
+        #loader {
+            display: block;
+            position: relative;
+            left: 50%;
+            top: 50%;
+            width: 150px;
+            height: 150px;
+            margin: -75px 0 0 -75px;
+            border-radius: 50%;
+            border: 3px solid transparent;
+            border-top-color: #FFF;
+            -webkit-animation: spin 2s linear infinite;
+            -ms-animation: spin 2s linear infinite;
+            -moz-animation: spin 2s linear infinite;
+            -o-animation: spin 2s linear infinite;
+            animation: spin 2s linear infinite;
+            z-index: 1001;
+        }
+        
+        #loader:before {
+            content: "";
+            position: absolute;
+            top: 5px;
+            left: 5px;
+            right: 5px;
+            bottom: 5px;
+            border-radius: 50%;
+            border: 3px solid transparent;
+            border-top-color: #FFF;
+            -webkit-animation: spin 3s linear infinite;
+            -moz-animation: spin 3s linear infinite;
+            -o-animation: spin 3s linear infinite;
+            -ms-animation: spin 3s linear infinite;
+            animation: spin 3s linear infinite;
+        }
+        
+        #loader:after {
+            content: "";
+            position: absolute;
+            top: 15px;
+            left: 15px;
+            right: 15px;
+            bottom: 15px;
+            border-radius: 50%;
+            border: 3px solid transparent;
+            border-top-color: #FFF;
+            -moz-animation: spin 1.5s linear infinite;
+            -o-animation: spin 1.5s linear infinite;
+            -ms-animation: spin 1.5s linear infinite;
+            -webkit-animation: spin 1.5s linear infinite;
+            animation: spin 1.5s linear infinite;
+        }
+        
+        @-webkit-keyframes spin {
+            0% {
+                -webkit-transform: rotate(0deg);
+                -ms-transform: rotate(0deg);
+                transform: rotate(0deg);
+            }
+            100% {
+                -webkit-transform: rotate(360deg);
+                -ms-transform: rotate(360deg);
+                transform: rotate(360deg);
+            }
+        }
+        
+        @keyframes spin {
+            0% {
+                -webkit-transform: rotate(0deg);
+                -ms-transform: rotate(0deg);
+                transform: rotate(0deg);
+            }
+            100% {
+                -webkit-transform: rotate(360deg);
+                -ms-transform: rotate(360deg);
+                transform: rotate(360deg);
+            }
+        }
+        
+        #loader-wrapper .loader-section {
+            position: fixed;
+            top: 0;
+            width: 51%;
+            height: 100%;
+            background: #7171C6;
+            z-index: 1000;
+            -webkit-transform: translateX(0);
+            -ms-transform: translateX(0);
+            transform: translateX(0);
+        }
+        
+        #loader-wrapper .loader-section.section-left {
+            left: 0;
+        }
+        
+        #loader-wrapper .loader-section.section-right {
+            right: 0;
+        }
+        
+        .loaded #loader-wrapper .loader-section.section-left {
+            -webkit-transform: translateX(-100%);
+            -ms-transform: translateX(-100%);
+            transform: translateX(-100%);
+            -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+            transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+        }
+        
+        .loaded #loader-wrapper .loader-section.section-right {
+            -webkit-transform: translateX(100%);
+            -ms-transform: translateX(100%);
+            transform: translateX(100%);
+            -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+            transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+        }
+        
+        .loaded #loader {
+            opacity: 0;
+            -webkit-transition: all 0.3s ease-out;
+            transition: all 0.3s ease-out;
+        }
+        
+        .loaded #loader-wrapper {
+            visibility: hidden;
+            -webkit-transform: translateY(-100%);
+            -ms-transform: translateY(-100%);
+            transform: translateY(-100%);
+            -webkit-transition: all 0.3s 1s ease-out;
+            transition: all 0.3s 1s ease-out;
+        }
+        
+        .no-js #loader-wrapper {
+            display: none;
+        }
+        
+        .no-js h1 {
+            color: #222222;
+        }
+        
+        #loader-wrapper .load_title {
+            font-family: 'Open Sans';
+            color: #FFF;
+            font-size: 19px;
+            width: 100%;
+            text-align: center;
+            z-index: 9999999999999;
+            position: absolute;
+            top: 60%;
+            opacity: 1;
+            line-height: 30px;
+        }
+        
+        #loader-wrapper .load_title span {
+            font-weight: normal;
+            font-style: italic;
+            font-size: 13px;
+            color: #FFF;
+            opacity: 0.5;
+        }
+    </style>
+</head>
+
+<body>
+    <div id="app">
+        <div id="loader-wrapper">
+            <div id="loader"></div>
+            <div class="loader-section section-left"></div>
+            <div class="loader-section section-right"></div>
+            <div class="load_title">正在加载系统资源,请耐心等待</div>
+        </div>
+    </div>
+</body>
+
+
+</html>

+ 212 - 0
.history/public/index_20220909152416.html

@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="renderer" content="webkit">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
+    <link rel="icon" href="/hjjcweb//favicon.png">
+    <title>
+        <%= webpackConfig.name %>
+    </title>
+    <style>
+        html,
+        body,
+        #app {
+            height: 100%;
+            margin: 0px;
+            padding: 0px;
+            /* background-color: #7171C6; */
+        }
+        
+        .chromeframe {
+            margin: 0.2em 0;
+            background: #ccc;
+            color: #000;
+            padding: 0.2em 0;
+        }
+        
+        #loader-wrapper {
+            position: fixed;
+            top: 0;
+            left: 0;
+            width: 100%;
+            height: 100%;
+            z-index: 999999;
+        }
+        
+        #loader {
+            display: block;
+            position: relative;
+            left: 50%;
+            top: 50%;
+            width: 150px;
+            height: 150px;
+            margin: -75px 0 0 -75px;
+            border-radius: 50%;
+            border: 3px solid transparent;
+            border-top-color: #FFF;
+            -webkit-animation: spin 2s linear infinite;
+            -ms-animation: spin 2s linear infinite;
+            -moz-animation: spin 2s linear infinite;
+            -o-animation: spin 2s linear infinite;
+            animation: spin 2s linear infinite;
+            z-index: 1001;
+        }
+        
+        #loader:before {
+            content: "";
+            position: absolute;
+            top: 5px;
+            left: 5px;
+            right: 5px;
+            bottom: 5px;
+            border-radius: 50%;
+            border: 3px solid transparent;
+            border-top-color: #FFF;
+            -webkit-animation: spin 3s linear infinite;
+            -moz-animation: spin 3s linear infinite;
+            -o-animation: spin 3s linear infinite;
+            -ms-animation: spin 3s linear infinite;
+            animation: spin 3s linear infinite;
+        }
+        
+        #loader:after {
+            content: "";
+            position: absolute;
+            top: 15px;
+            left: 15px;
+            right: 15px;
+            bottom: 15px;
+            border-radius: 50%;
+            border: 3px solid transparent;
+            border-top-color: #FFF;
+            -moz-animation: spin 1.5s linear infinite;
+            -o-animation: spin 1.5s linear infinite;
+            -ms-animation: spin 1.5s linear infinite;
+            -webkit-animation: spin 1.5s linear infinite;
+            animation: spin 1.5s linear infinite;
+        }
+        
+        @-webkit-keyframes spin {
+            0% {
+                -webkit-transform: rotate(0deg);
+                -ms-transform: rotate(0deg);
+                transform: rotate(0deg);
+            }
+            100% {
+                -webkit-transform: rotate(360deg);
+                -ms-transform: rotate(360deg);
+                transform: rotate(360deg);
+            }
+        }
+        
+        @keyframes spin {
+            0% {
+                -webkit-transform: rotate(0deg);
+                -ms-transform: rotate(0deg);
+                transform: rotate(0deg);
+            }
+            100% {
+                -webkit-transform: rotate(360deg);
+                -ms-transform: rotate(360deg);
+                transform: rotate(360deg);
+            }
+        }
+        
+        #loader-wrapper .loader-section {
+            position: fixed;
+            top: 0;
+            width: 51%;
+            height: 100%;
+            background: #7171C6;
+            z-index: 1000;
+            -webkit-transform: translateX(0);
+            -ms-transform: translateX(0);
+            transform: translateX(0);
+        }
+        
+        #loader-wrapper .loader-section.section-left {
+            left: 0;
+        }
+        
+        #loader-wrapper .loader-section.section-right {
+            right: 0;
+        }
+        
+        .loaded #loader-wrapper .loader-section.section-left {
+            -webkit-transform: translateX(-100%);
+            -ms-transform: translateX(-100%);
+            transform: translateX(-100%);
+            -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+            transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+        }
+        
+        .loaded #loader-wrapper .loader-section.section-right {
+            -webkit-transform: translateX(100%);
+            -ms-transform: translateX(100%);
+            transform: translateX(100%);
+            -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+            transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+        }
+        
+        .loaded #loader {
+            opacity: 0;
+            -webkit-transition: all 0.3s ease-out;
+            transition: all 0.3s ease-out;
+        }
+        
+        .loaded #loader-wrapper {
+            visibility: hidden;
+            -webkit-transform: translateY(-100%);
+            -ms-transform: translateY(-100%);
+            transform: translateY(-100%);
+            -webkit-transition: all 0.3s 1s ease-out;
+            transition: all 0.3s 1s ease-out;
+        }
+        
+        .no-js #loader-wrapper {
+            display: none;
+        }
+        
+        .no-js h1 {
+            color: #222222;
+        }
+        
+        #loader-wrapper .load_title {
+            font-family: 'Open Sans';
+            color: #FFF;
+            font-size: 19px;
+            width: 100%;
+            text-align: center;
+            z-index: 9999999999999;
+            position: absolute;
+            top: 60%;
+            opacity: 1;
+            line-height: 30px;
+        }
+        
+        #loader-wrapper .load_title span {
+            font-weight: normal;
+            font-style: italic;
+            font-size: 13px;
+            color: #FFF;
+            opacity: 0.5;
+        }
+    </style>
+</head>
+
+<body>
+    <div id="app">
+        <div id="loader-wrapper">
+            <div id="loader"></div>
+            <div class="loader-section section-left"></div>
+            <div class="loader-section section-right"></div>
+            <div class="load_title">正在加载系统资源,请耐心等待</div>
+        </div>
+    </div>
+</body>
+
+
+</html>

+ 212 - 0
.history/public/index_20220909152421.html

@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="renderer" content="webkit">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
+    <link rel="icon" href="/hjjcweb/favicon.png">
+    <title>
+        <%= webpackConfig.name %>
+    </title>
+    <style>
+        html,
+        body,
+        #app {
+            height: 100%;
+            margin: 0px;
+            padding: 0px;
+            /* background-color: #7171C6; */
+        }
+        
+        .chromeframe {
+            margin: 0.2em 0;
+            background: #ccc;
+            color: #000;
+            padding: 0.2em 0;
+        }
+        
+        #loader-wrapper {
+            position: fixed;
+            top: 0;
+            left: 0;
+            width: 100%;
+            height: 100%;
+            z-index: 999999;
+        }
+        
+        #loader {
+            display: block;
+            position: relative;
+            left: 50%;
+            top: 50%;
+            width: 150px;
+            height: 150px;
+            margin: -75px 0 0 -75px;
+            border-radius: 50%;
+            border: 3px solid transparent;
+            border-top-color: #FFF;
+            -webkit-animation: spin 2s linear infinite;
+            -ms-animation: spin 2s linear infinite;
+            -moz-animation: spin 2s linear infinite;
+            -o-animation: spin 2s linear infinite;
+            animation: spin 2s linear infinite;
+            z-index: 1001;
+        }
+        
+        #loader:before {
+            content: "";
+            position: absolute;
+            top: 5px;
+            left: 5px;
+            right: 5px;
+            bottom: 5px;
+            border-radius: 50%;
+            border: 3px solid transparent;
+            border-top-color: #FFF;
+            -webkit-animation: spin 3s linear infinite;
+            -moz-animation: spin 3s linear infinite;
+            -o-animation: spin 3s linear infinite;
+            -ms-animation: spin 3s linear infinite;
+            animation: spin 3s linear infinite;
+        }
+        
+        #loader:after {
+            content: "";
+            position: absolute;
+            top: 15px;
+            left: 15px;
+            right: 15px;
+            bottom: 15px;
+            border-radius: 50%;
+            border: 3px solid transparent;
+            border-top-color: #FFF;
+            -moz-animation: spin 1.5s linear infinite;
+            -o-animation: spin 1.5s linear infinite;
+            -ms-animation: spin 1.5s linear infinite;
+            -webkit-animation: spin 1.5s linear infinite;
+            animation: spin 1.5s linear infinite;
+        }
+        
+        @-webkit-keyframes spin {
+            0% {
+                -webkit-transform: rotate(0deg);
+                -ms-transform: rotate(0deg);
+                transform: rotate(0deg);
+            }
+            100% {
+                -webkit-transform: rotate(360deg);
+                -ms-transform: rotate(360deg);
+                transform: rotate(360deg);
+            }
+        }
+        
+        @keyframes spin {
+            0% {
+                -webkit-transform: rotate(0deg);
+                -ms-transform: rotate(0deg);
+                transform: rotate(0deg);
+            }
+            100% {
+                -webkit-transform: rotate(360deg);
+                -ms-transform: rotate(360deg);
+                transform: rotate(360deg);
+            }
+        }
+        
+        #loader-wrapper .loader-section {
+            position: fixed;
+            top: 0;
+            width: 51%;
+            height: 100%;
+            background: #7171C6;
+            z-index: 1000;
+            -webkit-transform: translateX(0);
+            -ms-transform: translateX(0);
+            transform: translateX(0);
+        }
+        
+        #loader-wrapper .loader-section.section-left {
+            left: 0;
+        }
+        
+        #loader-wrapper .loader-section.section-right {
+            right: 0;
+        }
+        
+        .loaded #loader-wrapper .loader-section.section-left {
+            -webkit-transform: translateX(-100%);
+            -ms-transform: translateX(-100%);
+            transform: translateX(-100%);
+            -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+            transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+        }
+        
+        .loaded #loader-wrapper .loader-section.section-right {
+            -webkit-transform: translateX(100%);
+            -ms-transform: translateX(100%);
+            transform: translateX(100%);
+            -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+            transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+        }
+        
+        .loaded #loader {
+            opacity: 0;
+            -webkit-transition: all 0.3s ease-out;
+            transition: all 0.3s ease-out;
+        }
+        
+        .loaded #loader-wrapper {
+            visibility: hidden;
+            -webkit-transform: translateY(-100%);
+            -ms-transform: translateY(-100%);
+            transform: translateY(-100%);
+            -webkit-transition: all 0.3s 1s ease-out;
+            transition: all 0.3s 1s ease-out;
+        }
+        
+        .no-js #loader-wrapper {
+            display: none;
+        }
+        
+        .no-js h1 {
+            color: #222222;
+        }
+        
+        #loader-wrapper .load_title {
+            font-family: 'Open Sans';
+            color: #FFF;
+            font-size: 19px;
+            width: 100%;
+            text-align: center;
+            z-index: 9999999999999;
+            position: absolute;
+            top: 60%;
+            opacity: 1;
+            line-height: 30px;
+        }
+        
+        #loader-wrapper .load_title span {
+            font-weight: normal;
+            font-style: italic;
+            font-size: 13px;
+            color: #FFF;
+            opacity: 0.5;
+        }
+    </style>
+</head>
+
+<body>
+    <div id="app">
+        <div id="loader-wrapper">
+            <div id="loader"></div>
+            <div class="loader-section section-left"></div>
+            <div class="loader-section section-right"></div>
+            <div class="load_title">正在加载系统资源,请耐心等待</div>
+        </div>
+    </div>
+</body>
+
+
+</html>

+ 88 - 0
.history/src/utils/request_20220407163354.js

@@ -0,0 +1,88 @@
+import axios from 'axios'
+import router from '@/router/routers'
+import { Notification } from 'element-ui'
+import store from '../store'
+import { getToken } from '@/utils/auth'
+import Config from '@/settings'
+import Cookies from 'js-cookie'
+
+// 创建axios实例
+const service = axios.create({
+  baseURL: process.env.NODE_ENV === 'production' ? process.env.VUE_APP_BASE_API : '/', // api 的 base_url
+  timeout: Config.timeout // 请求超时时间
+})
+
+// request拦截器
+service.interceptors.request.use(
+  config => {
+    if (getToken()) {
+      config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
+    }
+    config.headers['Content-Type'] = 'application/json'
+    return config
+  },
+  error => {
+    Promise.reject(error)
+  }
+)
+
+// response 拦截器
+service.interceptors.response.use(
+  response => {
+    return response.data
+  },
+  error => {
+    // 兼容blob下载出错json提示
+    if (error.response.data instanceof Blob && error.response.data.type.toLowerCase().indexOf('json') !== -1) {
+      const reader = new FileReader()
+      reader.readAsText(error.response.data, 'utf-8')
+      reader.onload = function(e) {
+        const errorMsg = JSON.parse(reader.result).message
+        Notification.error({
+          title: errorMsg,
+          duration: 5000
+        })
+      }
+    } else {
+      let code = 0
+      try {
+        code = error.response.data.status
+      } catch (e) {
+        if (error.toString().indexOf('Error: timeout') !== -1) {
+          Notification.error({
+            title: '网络请求超时',
+            duration: 5000
+          })
+          return Promise.reject(error)
+        }
+      }
+      console.log(code)
+      if (code) {
+        if (code === 401) {
+          store.dispatch('LogOut').then(() => {
+            // 用户登录界面提示
+            Cookies.set('point', 401)
+            location.reload()
+          })
+        } else if (code === 403) {
+          router.push({ path: '/401' })
+        } else {
+          const errorMsg = error.response.data.message
+          if (errorMsg !== undefined) {
+            Notification.error({
+              title: errorMsg,
+              duration: 5000
+            })
+          }
+        }
+      } else {
+        Notification.error({
+          title: '接口请求失败',
+          duration: 5000
+        })
+      }
+    }
+    return Promise.reject(error)
+  }
+)
+export default service

+ 88 - 0
.history/src/utils/request_20220909152619.js

@@ -0,0 +1,88 @@
+import axios from 'axios'
+import router from '@/router/routers'
+import { Notification } from 'element-ui'
+import store from '../store'
+import { getToken } from '@/utils/auth'
+import Config from '@/settings'
+import Cookies from 'js-cookie'
+
+// 创建axios实例
+const service = axios.create({
+    baseURL: process.env.NODE_ENV === 'production' ? process.env.VUE_APP_BASE_API : '/', // api 的 base_url
+    timeout: Config.timeout // 请求超时时间
+})
+
+// request拦截器
+service.interceptors.request.use(
+    config => {
+        if (getToken()) {
+            config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
+        }
+        config.headers['Content-Type'] = 'application/json'
+        return config
+    },
+    error => {
+        Promise.reject(error)
+    }
+)
+
+// response 拦截器
+service.interceptors.response.use(
+    response => {
+        return response.data
+    },
+    error => {
+        // 兼容blob下载出错json提示
+        if (error.response.data instanceof Blob && error.response.data.type.toLowerCase().indexOf('json') !== -1) {
+            const reader = new FileReader()
+            reader.readAsText(error.response.data, 'utf-8')
+            reader.onload = function(e) {
+                const errorMsg = JSON.parse(reader.result).message
+                Notification.error({
+                    title: errorMsg,
+                    duration: 5000
+                })
+            }
+        } else {
+            let code = 0
+            try {
+                code = error.response.data.status
+            } catch (e) {
+                if (error.toString().indexOf('Error: timeout') !== -1) {
+                    Notification.error({
+                        title: '网络请求超时',
+                        duration: 5000
+                    })
+                    return Promise.reject(error)
+                }
+            }
+            console.log(code)
+            if (code) {
+                if (code === 401) {
+                    store.dispatch('LogOut').then(() => {
+                        // 用户登录界面提示
+                        Cookies.set('point', 401)
+                        location.reload()
+                    })
+                } else if (code === 403) {
+                    router.push({ path: '/401' })
+                } else {
+                    const errorMsg = error.response.data.message
+                    if (errorMsg !== undefined) {
+                        Notification.error({
+                            title: errorMsg,
+                            duration: 5000
+                        })
+                    }
+                }
+            } else {
+                Notification.error({
+                    title: '接口请求失败',
+                    duration: 5000
+                })
+            }
+        }
+        return Promise.reject(error)
+    }
+)
+export default service

+ 338 - 0
.history/src/views/login_20220906160210.vue

@@ -0,0 +1,338 @@
+<template>
+  <div class="login" >
+    <div class="bg" v-if="erp"><img src="@/assets/images/bg.png" alt="" style="width:100%;height:100%;"></div>
+    <div class="logo" v-if="erp">
+      <img src="@/assets/logo/logo-b.png" alt="">
+      <span class="logo_txt">环境监测管理系统</span>
+    </div>
+    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" v-if="erp">
+      <h3 class="title">用户登录 <span>LOGIN</span></h3>
+      <el-form-item prop="username" >
+        <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
+          <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="password">
+        <el-input
+          v-model="loginForm.password"
+          :type="passwordtxt"
+          auto-complete="off"
+          placeholder="密码"
+          @keyup.enter.native="handleLogin"
+        >
+          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
+          <svg-icon slot="prefix" icon-class="eye"  class="el-input__icon input-icon"  style="position:absolute;right:-340px"  @click="eyeTab" v-show="passwordtxt =='password'" />
+          <svg-icon slot="prefix" icon-class="eye-open"  class="el-input__icon input-icon"  style="position:absolute;right:-340px"  @click="eyeTab" v-show="passwordtxt =='text'" />
+        </el-input>
+
+      </el-form-item>
+      <el-form-item prop="code" v-if="captchaOnOff">
+        <el-input
+          v-model="loginForm.code"
+          auto-complete="off"
+          placeholder="验证码"
+          style="width: 63%"
+          @keyup.enter.native="handleLogin"
+        >
+          <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
+        </el-input>
+        <div class="login-code">
+          <img :src="codeUrl" @click="getCode" class="login-code-img"/>
+        </div>
+      </el-form-item>
+      <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;"  @change="memory">记住密码</el-checkbox>
+      <el-form-item style="width:100%;">
+        <el-button
+          :loading="loading"
+          size="medium"
+          type="primary"
+          style="width:100%;"
+          @click.native.prevent="handleLogin"
+        >
+          <span v-if="!loading">登 录</span>
+          <span v-else>登 录 中...</span>
+        </el-button>
+        <!-- <div style="float: right;" v-if="register">
+          <router-link class="link-type" :to="'/register'">立即注册</router-link>
+        </div> -->
+      </el-form-item>
+    </el-form>
+    <!--  底部  -->
+    <div class="el-login-footer" v-if="erp">
+      <!-- <span>Copyright © 2018-2021 yongtian.vip All Rights Reserved.</span> -->
+    </div>
+    <div id="loader-wrapper" v-if="ERPloading">
+        <div id="loader"></div>
+        <div class="loader-section section-left"></div>
+        <div class="loader-section section-right"></div>
+        <div class="load_title">正在加载系统资源,请耐心等待</div>
+    </div>
+  </div>
+</template>
+
+<script>
+import bgImg from "@/assets/images/bg.png";
+import logoImg from "@/assets/logo/logo-b.png";
+import { getCodeImg } from "@/api/login";
+import Cookies from "js-cookie";
+import { decrypt } from '@/utils/jsencrypt'
+
+export default {
+  name: "Login",
+  data() {
+    return {
+      erp:false,
+      ERPloading:true,
+      passwordtxt:"password",
+      bg:bgImg,
+      logo:logoImg,
+      codeUrl: "",
+      cookiePassword: "",
+      loginForm: {
+        username: "",
+        password: "",
+        // username: "admin",
+        // password: "admin123",
+        rememberMe: false,
+        code: "",
+        uuid: ""
+      },
+      loginRules: {
+        username: [
+          { required: true, trigger: "blur", message: "请输入您的账号" }
+        ],
+        password: [
+          { required: true, trigger: "blur", message: "请输入您的密码" }
+        ],
+        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+      },
+      loading: false,
+      // 验证码开关
+      captchaOnOff: false,
+      // 注册开关
+      register: false,
+      redirect: undefined
+    };
+  },
+  watch: {
+    $route: {
+      handler: function(route) {
+        this.redirect = route.query && route.query.redirect;
+      },
+      immediate: true
+    }
+  },
+  created() {
+    this.getUrl()
+  },
+  methods: {
+    getUrl(){
+      let url = this.$route.query
+      if(url.username && url.password){
+        let data = {username:url.username,password:url.password}
+        data.password = encrypt(encodeuricomponent(this.loginForm.password));
+        this.handleLoginERP(data)
+      }else if(url.userNameSaaS && url.passWordSaaS){
+        let data = {
+          username:decrypt(decodeURIComponent(url.userNameSaaS)),
+          password:decrypt(decodeURIComponent(url.passWordSaaS))
+        }
+        Cookies.set("username20220319", data.username, { expires: 30 });
+        Cookies.set("password20220319", url.passWordSaaS, { expires: 30 });
+        this.handleLoginSaaS(data)
+      }else{
+        this.getCode();
+        this.getCookie();
+      }
+    },
+    eyeTab(){
+      if(this.passwordtxt == "password"){
+        this.passwordtxt = "text"
+      }else{
+
+        this.passwordtxt = "password"
+      }
+
+    },
+    getCode() {
+      getCodeImg().then(res => {
+        this.captchaOnOff = true
+          this.codeUrl =  res.img;
+          this.loginForm.uuid = res.uuid;
+          this.erp = true
+          setTimeout(()=>{
+            this.ERPloading = false
+          },)
+      });
+    },
+    getCookie() {
+      const username = Cookies.get("username20220319");
+      const password = Cookies.get("password20220319");
+      const rememberMe = Cookies.get('rememberMe20220319')
+      this.loginForm = {
+        username: username === undefined ? this.loginForm.username : username,
+        password: password === undefined ? this.loginForm.password : decrypt(password),
+        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
+      };
+    },
+    handleLogin() {
+      this.$refs.loginForm.validate(valid => {
+        if (valid) {
+          this.loading = true;
+          this.$store.dispatch("Login", this.loginForm).then((res) => {
+            this.$router.push({ path: "/dashboard"}).catch(()=>{});
+          }).catch(() => {
+            this.loading = false;
+            if (this.captchaOnOff) {
+              this.getCode();
+            }
+          });
+        }
+      });
+    },
+    memory(){
+      if (this.loginForm.rememberMe) {
+        Cookies.set("username20220319", this.loginForm.username, { expires: 30 });
+        Cookies.set("password20220319", encrypt(encodeuricomponent(this.loginForm.password)), { expires: 30 });
+        Cookies.set('rememberMe20220319', this.loginForm.rememberMe, { expires: 30 });
+      } else {
+        Cookies.remove("username20220319");
+        Cookies.remove("password20220319");
+        Cookies.remove('rememberMe20220319');
+      }
+    },
+    handleLoginERP(data) {//erp登录
+
+      this.$store.dispatch("LoginERP", data).then((res) => {
+        this.$router.push({ path: "/dashboard"}).catch(()=>{});
+      }).catch((err) => {
+        location.href = '/dashboard';
+      });
+    },
+    handleLoginSaaS(data) {//SaaS登录
+      this.$store.dispatch("Login", data).then((res) => {
+        this.$router.push({ path: "/dashboard"});
+      }).catch((err) => {
+        location.href = '';
+      });
+    }
+  }
+};
+</script>
+
+<style  lang="scss" scoped>
+.bg{
+  width:100%;
+  height:100%;
+  overflow: hidden;
+  position: fixed;
+  top:0;
+  left:0;
+  z-index: -1;
+  .bgimg{
+    width:100%;
+    height:100%;
+    position: absolute;
+    top:0;
+    left:0;
+    z-index: -1;
+  }
+}
+.logo{
+  width:100%;
+  position: fixed;
+  top:0;
+  img{
+    width:152px;
+    margin:10px 2rem 0 20px;
+    vertical-align: middle;
+  }
+  .logo_txt{
+    font-size: 1.5rem;
+    color:#fff;
+    vertical-align: middle;
+    letter-spacing: 4px;
+  }
+}
+.login {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 100%;
+  // background-image: url("../assets/images/login-background.jpg");
+  background-size: cover;
+}
+.title {
+  margin: 0px auto 30px auto;
+  text-align: left;
+  color: #000000;
+  font-size: 20px;
+  span{
+    margin-left:10px;
+    opacity: 0.25;
+  }
+}
+
+.login-form {
+  border-radius: 6px;
+  background: #ffffff;
+  width: 456px;
+  padding: 63px 35px;
+  .el-input {
+    height: 40px;
+    font-size: 16px !important;
+    input {
+      height: 40px;
+    }
+  }
+  .input-icon {
+    height: 39px;
+    width: 14px;
+    margin-left: 2px;
+  }
+}
+.login-tip {
+  font-size: 13px;
+  text-align: center;
+  color: #bfbfbf;
+}
+.login-code {
+  width: 33%;
+  height: 36px;
+  float: right;
+  img {
+    cursor: pointer;
+    vertical-align: middle;
+    width:100%;
+    height: 36px;
+    margin-top:-1px;
+  }
+}
+.el-login-footer {
+  height: 40px;
+  line-height: 40px;
+  position: fixed;
+  bottom: 0;
+  width: 100%;
+  text-align: center;
+  color: #fff;
+  font-family: Arial;
+  font-size: 12px;
+  letter-spacing: 1px;
+}
+::v-deep .el-input__inner{
+  height:36px !important;
+  line-height: 36px !important;
+}
+</style>
+<style>
+html,
+body,
+#app {
+    height: 100%;
+    margin: 0px;
+    padding: 0px;
+    background-color: transparent !important;
+
+}
+</style>

+ 338 - 0
.history/src/views/login_20220909152448.vue

@@ -0,0 +1,338 @@
+<template>
+  <div class="login" >
+    <div class="bg" v-if="erp"><img src="@/assets/images/bg.png" alt="" style="width:100%;height:100%;"></div>
+    <div class="logo" v-if="erp">
+      <img src="@/assets/logo/logo-b.png" alt="">
+      <span class="logo_txt">环境监测管理系统</span>
+    </div>
+    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" v-if="erp">
+      <h3 class="title">用户登录 <span>LOGIN</span></h3>
+      <el-form-item prop="username" >
+        <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
+          <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="password">
+        <el-input
+          v-model="loginForm.password"
+          :type="passwordtxt"
+          auto-complete="off"
+          placeholder="密码"
+          @keyup.enter.native="handleLogin"
+        >
+          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
+          <svg-icon slot="prefix" icon-class="eye"  class="el-input__icon input-icon"  style="position:absolute;right:-340px"  @click="eyeTab" v-show="passwordtxt =='password'" />
+          <svg-icon slot="prefix" icon-class="eye-open"  class="el-input__icon input-icon"  style="position:absolute;right:-340px"  @click="eyeTab" v-show="passwordtxt =='text'" />
+        </el-input>
+
+      </el-form-item>
+      <el-form-item prop="code" v-if="captchaOnOff">
+        <el-input
+          v-model="loginForm.code"
+          auto-complete="off"
+          placeholder="验证码"
+          style="width: 63%"
+          @keyup.enter.native="handleLogin"
+        >
+          <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
+        </el-input>
+        <div class="login-code">
+          <img :src="codeUrl" @click="getCode" class="login-code-img"/>
+        </div>
+      </el-form-item>
+      <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;"  @change="memory">记住密码</el-checkbox>
+      <el-form-item style="width:100%;">
+        <el-button
+          :loading="loading"
+          size="medium"
+          type="primary"
+          style="width:100%;"
+          @click.native.prevent="handleLogin"
+        >
+          <span v-if="!loading">登 录</span>
+          <span v-else>登 录 中...</span>
+        </el-button>
+        <!-- <div style="float: right;" v-if="register">
+          <router-link class="link-type" :to="'/register'">立即注册</router-link>
+        </div> -->
+      </el-form-item>
+    </el-form>
+    <!--  底部  -->
+    <div class="el-login-footer" v-if="erp">
+      <!-- <span>Copyright © 2018-2021 yongtian.vip All Rights Reserved.</span> -->
+    </div>
+    <div id="loader-wrapper" v-if="ERPloading">
+        <div id="loader"></div>
+        <div class="loader-section section-left"></div>
+        <div class="loader-section section-right"></div>
+        <div class="load_title">正在加载系统资源,请耐心等待</div>
+    </div>
+  </div>
+</template>
+
+<script>
+import bgImg from "@/assets/images/bg.png";
+import logoImg from "@/assets/logo/logo-b.png";
+import { getCodeImg } from "@/api/login";
+import Cookies from "js-cookie";
+import { decrypt } from '@/utils/jsencrypt'
+
+export default {
+  name: "Login",
+  data() {
+    return {
+      erp:false,
+      ERPloading:true,
+      passwordtxt:"password",
+      bg:bgImg,
+      logo:logoImg,
+      codeUrl: "",
+      cookiePassword: "",
+      loginForm: {
+        username: "",
+        password: "",
+        // username: "admin",
+        // password: "admin123",
+        rememberMe: false,
+        code: "",
+        uuid: ""
+      },
+      loginRules: {
+        username: [
+          { required: true, trigger: "blur", message: "请输入您的账号" }
+        ],
+        password: [
+          { required: true, trigger: "blur", message: "请输入您的密码" }
+        ],
+        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+      },
+      loading: false,
+      // 验证码开关
+      captchaOnOff: false,
+      // 注册开关
+      register: false,
+      redirect: undefined
+    };
+  },
+  watch: {
+    $route: {
+      handler: function(route) {
+        this.redirect = route.query && route.query.redirect;
+      },
+      immediate: true
+    }
+  },
+  created() {
+    this.getUrl()
+  },
+  methods: {
+    getUrl(){
+      let url = this.$route.query
+      if(url.username && url.password){
+        let data = {username:url.username,password:url.password}
+        data.password = encrypt(encodeuricomponent(this.loginForm.password));
+        this.handleLoginERP(data)
+      }else if(url.userNameSaaS && url.passWordSaaS){
+        let data = {
+          username:decrypt(decodeURIComponent(url.userNameSaaS)),
+          password:decrypt(decodeURIComponent(url.passWordSaaS))
+        }
+        Cookies.set("username20220319", data.username, { expires: 30 });
+        Cookies.set("password20220319", url.passWordSaaS, { expires: 30 });
+        this.handleLoginSaaS(data)
+      }else{
+        this.getCode();
+        this.getCookie();
+      }
+    },
+    eyeTab(){
+      if(this.passwordtxt == "password"){
+        this.passwordtxt = "text"
+      }else{
+
+        this.passwordtxt = "password"
+      }
+
+    },
+    getCode() {
+      getCodeImg().then(res => {
+        this.captchaOnOff = true
+          this.codeUrl =  res.img;
+          this.loginForm.uuid = res.uuid;
+          this.erp = true
+          setTimeout(()=>{
+            this.ERPloading = false
+          },)
+      });
+    },
+    getCookie() {
+      const username = Cookies.get("username20220319");
+      const password = Cookies.get("password20220319");
+      const rememberMe = Cookies.get('rememberMe20220319')
+      this.loginForm = {
+        username: username === undefined ? this.loginForm.username : username,
+        password: password === undefined ? this.loginForm.password : decrypt(password),
+        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
+      };
+    },
+    handleLogin() {
+      this.$refs.loginForm.validate(valid => {
+        if (valid) {
+          this.loading = true;
+          this.$store.dispatch("Login", this.loginForm).then((res) => {
+            this.$router.push({ path: "/dashboard"}).catch(()=>{});
+          }).catch(() => {
+            this.loading = false;
+            if (this.captchaOnOff) {
+              this.getCode();
+            }
+          });
+        }
+      });
+    },
+    memory(){
+      if (this.loginForm.rememberMe) {
+        Cookies.set("username20220319", this.loginForm.username, { expires: 30 });
+        Cookies.set("password20220319", encrypt(encodeuricomponent(this.loginForm.password)), { expires: 30 });
+        Cookies.set('rememberMe20220319', this.loginForm.rememberMe, { expires: 30 });
+      } else {
+        Cookies.remove("username20220319");
+        Cookies.remove("password20220319");
+        Cookies.remove('rememberMe20220319');
+      }
+    },
+    handleLoginERP(data) {//erp登录
+
+      this.$store.dispatch("LoginERP", data).then((res) => {
+        this.$router.push({ path: "/dashboard"}).catch(()=>{});
+      }).catch((err) => {
+        location.href = '/hjjcweb/#/';
+      });
+    },
+    handleLoginSaaS(data) {//SaaS登录
+      this.$store.dispatch("Login", data).then((res) => {
+        this.$router.push({ path: "/dashboard"});
+      }).catch((err) => {
+        location.href = '/hjjcweb/#/';
+      });
+    }
+  }
+};
+</script>
+
+<style  lang="scss" scoped>
+.bg{
+  width:100%;
+  height:100%;
+  overflow: hidden;
+  position: fixed;
+  top:0;
+  left:0;
+  z-index: -1;
+  .bgimg{
+    width:100%;
+    height:100%;
+    position: absolute;
+    top:0;
+    left:0;
+    z-index: -1;
+  }
+}
+.logo{
+  width:100%;
+  position: fixed;
+  top:0;
+  img{
+    width:152px;
+    margin:10px 2rem 0 20px;
+    vertical-align: middle;
+  }
+  .logo_txt{
+    font-size: 1.5rem;
+    color:#fff;
+    vertical-align: middle;
+    letter-spacing: 4px;
+  }
+}
+.login {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 100%;
+  // background-image: url("../assets/images/login-background.jpg");
+  background-size: cover;
+}
+.title {
+  margin: 0px auto 30px auto;
+  text-align: left;
+  color: #000000;
+  font-size: 20px;
+  span{
+    margin-left:10px;
+    opacity: 0.25;
+  }
+}
+
+.login-form {
+  border-radius: 6px;
+  background: #ffffff;
+  width: 456px;
+  padding: 63px 35px;
+  .el-input {
+    height: 40px;
+    font-size: 16px !important;
+    input {
+      height: 40px;
+    }
+  }
+  .input-icon {
+    height: 39px;
+    width: 14px;
+    margin-left: 2px;
+  }
+}
+.login-tip {
+  font-size: 13px;
+  text-align: center;
+  color: #bfbfbf;
+}
+.login-code {
+  width: 33%;
+  height: 36px;
+  float: right;
+  img {
+    cursor: pointer;
+    vertical-align: middle;
+    width:100%;
+    height: 36px;
+    margin-top:-1px;
+  }
+}
+.el-login-footer {
+  height: 40px;
+  line-height: 40px;
+  position: fixed;
+  bottom: 0;
+  width: 100%;
+  text-align: center;
+  color: #fff;
+  font-family: Arial;
+  font-size: 12px;
+  letter-spacing: 1px;
+}
+::v-deep .el-input__inner{
+  height:36px !important;
+  line-height: 36px !important;
+}
+</style>
+<style>
+html,
+body,
+#app {
+    height: 100%;
+    margin: 0px;
+    padding: 0px;
+    background-color: transparent !important;
+
+}
+</style>

+ 338 - 0
.history/src/views/login_20220909152449.vue

@@ -0,0 +1,338 @@
+<template>
+  <div class="login" >
+    <div class="bg" v-if="erp"><img src="@/assets/images/bg.png" alt="" style="width:100%;height:100%;"></div>
+    <div class="logo" v-if="erp">
+      <img src="@/assets/logo/logo-b.png" alt="">
+      <span class="logo_txt">环境监测管理系统</span>
+    </div>
+    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" v-if="erp">
+      <h3 class="title">用户登录 <span>LOGIN</span></h3>
+      <el-form-item prop="username" >
+        <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
+          <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="password">
+        <el-input
+          v-model="loginForm.password"
+          :type="passwordtxt"
+          auto-complete="off"
+          placeholder="密码"
+          @keyup.enter.native="handleLogin"
+        >
+          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
+          <svg-icon slot="prefix" icon-class="eye"  class="el-input__icon input-icon"  style="position:absolute;right:-340px"  @click="eyeTab" v-show="passwordtxt =='password'" />
+          <svg-icon slot="prefix" icon-class="eye-open"  class="el-input__icon input-icon"  style="position:absolute;right:-340px"  @click="eyeTab" v-show="passwordtxt =='text'" />
+        </el-input>
+
+      </el-form-item>
+      <el-form-item prop="code" v-if="captchaOnOff">
+        <el-input
+          v-model="loginForm.code"
+          auto-complete="off"
+          placeholder="验证码"
+          style="width: 63%"
+          @keyup.enter.native="handleLogin"
+        >
+          <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
+        </el-input>
+        <div class="login-code">
+          <img :src="codeUrl" @click="getCode" class="login-code-img"/>
+        </div>
+      </el-form-item>
+      <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;"  @change="memory">记住密码</el-checkbox>
+      <el-form-item style="width:100%;">
+        <el-button
+          :loading="loading"
+          size="medium"
+          type="primary"
+          style="width:100%;"
+          @click.native.prevent="handleLogin"
+        >
+          <span v-if="!loading">登 录</span>
+          <span v-else>登 录 中...</span>
+        </el-button>
+        <!-- <div style="float: right;" v-if="register">
+          <router-link class="link-type" :to="'/register'">立即注册</router-link>
+        </div> -->
+      </el-form-item>
+    </el-form>
+    <!--  底部  -->
+    <div class="el-login-footer" v-if="erp">
+      <!-- <span>Copyright © 2018-2021 yongtian.vip All Rights Reserved.</span> -->
+    </div>
+    <div id="loader-wrapper" v-if="ERPloading">
+        <div id="loader"></div>
+        <div class="loader-section section-left"></div>
+        <div class="loader-section section-right"></div>
+        <div class="load_title">正在加载系统资源,请耐心等待</div>
+    </div>
+  </div>
+</template>
+
+<script>
+import bgImg from "@/assets/images/bg.png";
+import logoImg from "@/assets/logo/logo-b.png";
+import { getCodeImg } from "@/api/login";
+import Cookies from "js-cookie";
+import { decrypt } from '@/utils/jsencrypt'
+
+export default {
+  name: "Login",
+  data() {
+    return {
+      erp:false,
+      ERPloading:true,
+      passwordtxt:"password",
+      bg:bgImg,
+      logo:logoImg,
+      codeUrl: "",
+      cookiePassword: "",
+      loginForm: {
+        username: "",
+        password: "",
+        // username: "admin",
+        // password: "admin123",
+        rememberMe: false,
+        code: "",
+        uuid: ""
+      },
+      loginRules: {
+        username: [
+          { required: true, trigger: "blur", message: "请输入您的账号" }
+        ],
+        password: [
+          { required: true, trigger: "blur", message: "请输入您的密码" }
+        ],
+        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+      },
+      loading: false,
+      // 验证码开关
+      captchaOnOff: false,
+      // 注册开关
+      register: false,
+      redirect: undefined
+    };
+  },
+  watch: {
+    $route: {
+      handler: function(route) {
+        this.redirect = route.query && route.query.redirect;
+      },
+      immediate: true
+    }
+  },
+  created() {
+    this.getUrl()
+  },
+  methods: {
+    getUrl(){
+      let url = this.$route.query
+      if(url.username && url.password){
+        let data = {username:url.username,password:url.password}
+        data.password = encrypt(encodeuricomponent(this.loginForm.password));
+        this.handleLoginERP(data)
+      }else if(url.userNameSaaS && url.passWordSaaS){
+        let data = {
+          username:decrypt(decodeURIComponent(url.userNameSaaS)),
+          password:decrypt(decodeURIComponent(url.passWordSaaS))
+        }
+        Cookies.set("username20220319", data.username, { expires: 30 });
+        Cookies.set("password20220319", url.passWordSaaS, { expires: 30 });
+        this.handleLoginSaaS(data)
+      }else{
+        this.getCode();
+        this.getCookie();
+      }
+    },
+    eyeTab(){
+      if(this.passwordtxt == "password"){
+        this.passwordtxt = "text"
+      }else{
+
+        this.passwordtxt = "password"
+      }
+
+    },
+    getCode() {
+      getCodeImg().then(res => {
+        this.captchaOnOff = true
+          this.codeUrl =  res.img;
+          this.loginForm.uuid = res.uuid;
+          this.erp = true
+          setTimeout(()=>{
+            this.ERPloading = false
+          },)
+      });
+    },
+    getCookie() {
+      const username = Cookies.get("username20220319");
+      const password = Cookies.get("password20220319");
+      const rememberMe = Cookies.get('rememberMe20220319')
+      this.loginForm = {
+        username: username === undefined ? this.loginForm.username : username,
+        password: password === undefined ? this.loginForm.password : decrypt(password),
+        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
+      };
+    },
+    handleLogin() {
+      this.$refs.loginForm.validate(valid => {
+        if (valid) {
+          this.loading = true;
+          this.$store.dispatch("Login", this.loginForm).then((res) => {
+            this.$router.push({ path: "/dashboard"}).catch(()=>{});
+          }).catch(() => {
+            this.loading = false;
+            if (this.captchaOnOff) {
+              this.getCode();
+            }
+          });
+        }
+      });
+    },
+    memory(){
+      if (this.loginForm.rememberMe) {
+        Cookies.set("username20220319", this.loginForm.username, { expires: 30 });
+        Cookies.set("password20220319", encrypt(encodeuricomponent(this.loginForm.password)), { expires: 30 });
+        Cookies.set('rememberMe20220319', this.loginForm.rememberMe, { expires: 30 });
+      } else {
+        Cookies.remove("username20220319");
+        Cookies.remove("password20220319");
+        Cookies.remove('rememberMe20220319');
+      }
+    },
+    handleLoginERP(data) {//erp登录
+
+      this.$store.dispatch("LoginERP", data).then((res) => {
+        this.$router.push({ path: "/dashboard"}).catch(()=>{});
+      }).catch((err) => {
+        location.href = '/hjjcweb/#/';
+      });
+    },
+    handleLoginSaaS(data) {//SaaS登录
+      this.$store.dispatch("Login", data).then((res) => {
+        this.$router.push({ path: "/dashboard"});
+      }).catch((err) => {
+        location.href = '/hjjcweb/#/';
+      });
+    }
+  }
+};
+</script>
+
+<style  lang="scss" scoped>
+.bg{
+  width:100%;
+  height:100%;
+  overflow: hidden;
+  position: fixed;
+  top:0;
+  left:0;
+  z-index: -1;
+  .bgimg{
+    width:100%;
+    height:100%;
+    position: absolute;
+    top:0;
+    left:0;
+    z-index: -1;
+  }
+}
+.logo{
+  width:100%;
+  position: fixed;
+  top:0;
+  img{
+    width:152px;
+    margin:10px 2rem 0 20px;
+    vertical-align: middle;
+  }
+  .logo_txt{
+    font-size: 1.5rem;
+    color:#fff;
+    vertical-align: middle;
+    letter-spacing: 4px;
+  }
+}
+.login {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 100%;
+  // background-image: url("../assets/images/login-background.jpg");
+  background-size: cover;
+}
+.title {
+  margin: 0px auto 30px auto;
+  text-align: left;
+  color: #000000;
+  font-size: 20px;
+  span{
+    margin-left:10px;
+    opacity: 0.25;
+  }
+}
+
+.login-form {
+  border-radius: 6px;
+  background: #ffffff;
+  width: 456px;
+  padding: 63px 35px;
+  .el-input {
+    height: 40px;
+    font-size: 16px !important;
+    input {
+      height: 40px;
+    }
+  }
+  .input-icon {
+    height: 39px;
+    width: 14px;
+    margin-left: 2px;
+  }
+}
+.login-tip {
+  font-size: 13px;
+  text-align: center;
+  color: #bfbfbf;
+}
+.login-code {
+  width: 33%;
+  height: 36px;
+  float: right;
+  img {
+    cursor: pointer;
+    vertical-align: middle;
+    width:100%;
+    height: 36px;
+    margin-top:-1px;
+  }
+}
+.el-login-footer {
+  height: 40px;
+  line-height: 40px;
+  position: fixed;
+  bottom: 0;
+  width: 100%;
+  text-align: center;
+  color: #fff;
+  font-family: Arial;
+  font-size: 12px;
+  letter-spacing: 1px;
+}
+::v-deep .el-input__inner{
+  height:36px !important;
+  line-height: 36px !important;
+}
+</style>
+<style>
+html,
+body,
+#app {
+    height: 100%;
+    margin: 0px;
+    padding: 0px;
+    background-color: transparent !important;
+
+}
+</style>

+ 338 - 0
.history/src/views/login_20220909152453.vue

@@ -0,0 +1,338 @@
+<template>
+  <div class="login" >
+    <div class="bg" v-if="erp"><img src="@/assets/images/bg.png" alt="" style="width:100%;height:100%;"></div>
+    <div class="logo" v-if="erp">
+      <img src="@/assets/logo/logo-b.png" alt="">
+      <span class="logo_txt">环境监测管理系统</span>
+    </div>
+    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" v-if="erp">
+      <h3 class="title">用户登录 <span>LOGIN</span></h3>
+      <el-form-item prop="username" >
+        <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
+          <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="password">
+        <el-input
+          v-model="loginForm.password"
+          :type="passwordtxt"
+          auto-complete="off"
+          placeholder="密码"
+          @keyup.enter.native="handleLogin"
+        >
+          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
+          <svg-icon slot="prefix" icon-class="eye"  class="el-input__icon input-icon"  style="position:absolute;right:-340px"  @click="eyeTab" v-show="passwordtxt =='password'" />
+          <svg-icon slot="prefix" icon-class="eye-open"  class="el-input__icon input-icon"  style="position:absolute;right:-340px"  @click="eyeTab" v-show="passwordtxt =='text'" />
+        </el-input>
+
+      </el-form-item>
+      <el-form-item prop="code" v-if="captchaOnOff">
+        <el-input
+          v-model="loginForm.code"
+          auto-complete="off"
+          placeholder="验证码"
+          style="width: 63%"
+          @keyup.enter.native="handleLogin"
+        >
+          <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
+        </el-input>
+        <div class="login-code">
+          <img :src="codeUrl" @click="getCode" class="login-code-img"/>
+        </div>
+      </el-form-item>
+      <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;"  @change="memory">记住密码</el-checkbox>
+      <el-form-item style="width:100%;">
+        <el-button
+          :loading="loading"
+          size="medium"
+          type="primary"
+          style="width:100%;"
+          @click.native.prevent="handleLogin"
+        >
+          <span v-if="!loading">登 录</span>
+          <span v-else>登 录 中...</span>
+        </el-button>
+        <!-- <div style="float: right;" v-if="register">
+          <router-link class="link-type" :to="'/register'">立即注册</router-link>
+        </div> -->
+      </el-form-item>
+    </el-form>
+    <!--  底部  -->
+    <div class="el-login-footer" v-if="erp">
+      <!-- <span>Copyright © 2018-2021 yongtian.vip All Rights Reserved.</span> -->
+    </div>
+    <div id="loader-wrapper" v-if="ERPloading">
+        <div id="loader"></div>
+        <div class="loader-section section-left"></div>
+        <div class="loader-section section-right"></div>
+        <div class="load_title">正在加载系统资源,请耐心等待</div>
+    </div>
+  </div>
+</template>
+
+<script>
+import bgImg from "@/assets/images/bg.png";
+import logoImg from "@/assets/logo/logo-b.png";
+import { getCodeImg } from "@/api/login";
+import Cookies from "js-cookie";
+import { decrypt } from '@/utils/jsencrypt'
+
+export default {
+  name: "Login",
+  data() {
+    return {
+      erp:false,
+      ERPloading:true,
+      passwordtxt:"password",
+      bg:bgImg,
+      logo:logoImg,
+      codeUrl: "",
+      cookiePassword: "",
+      loginForm: {
+        username: "",
+        password: "",
+        // username: "admin",
+        // password: "admin123",
+        rememberMe: false,
+        code: "",
+        uuid: ""
+      },
+      loginRules: {
+        username: [
+          { required: true, trigger: "blur", message: "请输入您的账号" }
+        ],
+        password: [
+          { required: true, trigger: "blur", message: "请输入您的密码" }
+        ],
+        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+      },
+      loading: false,
+      // 验证码开关
+      captchaOnOff: false,
+      // 注册开关
+      register: false,
+      redirect: undefined
+    };
+  },
+  watch: {
+    $route: {
+      handler: function(route) {
+        this.redirect = route.query && route.query.redirect;
+      },
+      immediate: true
+    }
+  },
+  created() {
+    this.getUrl()
+  },
+  methods: {
+    getUrl(){
+      let url = this.$route.query
+      if(url.username && url.password){
+        let data = {username:url.username,password:url.password}
+        data.password = encrypt(encodeuricomponent(this.loginForm.password));
+        this.handleLoginERP(data)
+      }else if(url.userNameSaaS && url.passWordSaaS){
+        let data = {
+          username:decrypt(decodeURIComponent(url.userNameSaaS)),
+          password:decrypt(decodeURIComponent(url.passWordSaaS))
+        }
+        Cookies.set("username20220319", data.username, { expires: 30 });
+        Cookies.set("password20220319", url.passWordSaaS, { expires: 30 });
+        this.handleLoginSaaS(data)
+      }else{
+        this.getCode();
+        this.getCookie();
+      }
+    },
+    eyeTab(){
+      if(this.passwordtxt == "password"){
+        this.passwordtxt = "text"
+      }else{
+
+        this.passwordtxt = "password"
+      }
+
+    },
+    getCode() {
+      getCodeImg().then(res => {
+        this.captchaOnOff = true
+          this.codeUrl =  res.img;
+          this.loginForm.uuid = res.uuid;
+          this.erp = true
+          setTimeout(()=>{
+            this.ERPloading = false
+          },)
+      });
+    },
+    getCookie() {
+      const username = Cookies.get("username20220319");
+      const password = Cookies.get("password20220319");
+      const rememberMe = Cookies.get('rememberMe20220319')
+      this.loginForm = {
+        username: username === undefined ? this.loginForm.username : username,
+        password: password === undefined ? this.loginForm.password : decrypt(password),
+        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
+      };
+    },
+    handleLogin() {
+      this.$refs.loginForm.validate(valid => {
+        if (valid) {
+          this.loading = true;
+          this.$store.dispatch("Login", this.loginForm).then((res) => {
+            this.$router.push({ path: "/dashboard"}).catch(()=>{});
+          }).catch(() => {
+            this.loading = false;
+            if (this.captchaOnOff) {
+              this.getCode();
+            }
+          });
+        }
+      });
+    },
+    memory(){
+      if (this.loginForm.rememberMe) {
+        Cookies.set("username20220319", this.loginForm.username, { expires: 30 });
+        Cookies.set("password20220319", encrypt(encodeuricomponent(this.loginForm.password)), { expires: 30 });
+        Cookies.set('rememberMe20220319', this.loginForm.rememberMe, { expires: 30 });
+      } else {
+        Cookies.remove("username20220319");
+        Cookies.remove("password20220319");
+        Cookies.remove('rememberMe20220319');
+      }
+    },
+    handleLoginERP(data) {//erp登录
+
+      this.$store.dispatch("LoginERP", data).then((res) => {
+        this.$router.push({ path: "/dashboard"}).catch(()=>{});
+      }).catch((err) => {
+        location.href = '/hjjcweb/#/';
+      });
+    },
+    handleLoginSaaS(data) {//SaaS登录
+      this.$store.dispatch("Login", data).then((res) => {
+        this.$router.push({ path: "/dashboard"});
+      }).catch((err) => {
+        location.href = '/hjjcweb/#/';
+      });
+    }
+  }
+};
+</script>
+
+<style  lang="scss" scoped>
+.bg{
+  width:100%;
+  height:100%;
+  overflow: hidden;
+  position: fixed;
+  top:0;
+  left:0;
+  z-index: -1;
+  .bgimg{
+    width:100%;
+    height:100%;
+    position: absolute;
+    top:0;
+    left:0;
+    z-index: -1;
+  }
+}
+.logo{
+  width:100%;
+  position: fixed;
+  top:0;
+  img{
+    width:152px;
+    margin:10px 2rem 0 20px;
+    vertical-align: middle;
+  }
+  .logo_txt{
+    font-size: 1.5rem;
+    color:#fff;
+    vertical-align: middle;
+    letter-spacing: 4px;
+  }
+}
+.login {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 100%;
+  // background-image: url("../assets/images/login-background.jpg");
+  background-size: cover;
+}
+.title {
+  margin: 0px auto 30px auto;
+  text-align: left;
+  color: #000000;
+  font-size: 20px;
+  span{
+    margin-left:10px;
+    opacity: 0.25;
+  }
+}
+
+.login-form {
+  border-radius: 6px;
+  background: #ffffff;
+  width: 456px;
+  padding: 63px 35px;
+  .el-input {
+    height: 40px;
+    font-size: 16px !important;
+    input {
+      height: 40px;
+    }
+  }
+  .input-icon {
+    height: 39px;
+    width: 14px;
+    margin-left: 2px;
+  }
+}
+.login-tip {
+  font-size: 13px;
+  text-align: center;
+  color: #bfbfbf;
+}
+.login-code {
+  width: 33%;
+  height: 36px;
+  float: right;
+  img {
+    cursor: pointer;
+    vertical-align: middle;
+    width:100%;
+    height: 36px;
+    margin-top:-1px;
+  }
+}
+.el-login-footer {
+  height: 40px;
+  line-height: 40px;
+  position: fixed;
+  bottom: 0;
+  width: 100%;
+  text-align: center;
+  color: #fff;
+  font-family: Arial;
+  font-size: 12px;
+  letter-spacing: 1px;
+}
+::v-deep .el-input__inner{
+  height:36px !important;
+  line-height: 36px !important;
+}
+</style>
+<style>
+html,
+body,
+#app {
+    height: 100%;
+    margin: 0px;
+    padding: 0px;
+    background-color: transparent !important;
+
+}
+</style>

+ 338 - 0
.history/src/views/login_20220909152454.vue

@@ -0,0 +1,338 @@
+<template>
+  <div class="login" >
+    <div class="bg" v-if="erp"><img src="@/assets/images/bg.png" alt="" style="width:100%;height:100%;"></div>
+    <div class="logo" v-if="erp">
+      <img src="@/assets/logo/logo-b.png" alt="">
+      <span class="logo_txt">环境监测管理系统</span>
+    </div>
+    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" v-if="erp">
+      <h3 class="title">用户登录 <span>LOGIN</span></h3>
+      <el-form-item prop="username" >
+        <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
+          <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="password">
+        <el-input
+          v-model="loginForm.password"
+          :type="passwordtxt"
+          auto-complete="off"
+          placeholder="密码"
+          @keyup.enter.native="handleLogin"
+        >
+          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
+          <svg-icon slot="prefix" icon-class="eye"  class="el-input__icon input-icon"  style="position:absolute;right:-340px"  @click="eyeTab" v-show="passwordtxt =='password'" />
+          <svg-icon slot="prefix" icon-class="eye-open"  class="el-input__icon input-icon"  style="position:absolute;right:-340px"  @click="eyeTab" v-show="passwordtxt =='text'" />
+        </el-input>
+
+      </el-form-item>
+      <el-form-item prop="code" v-if="captchaOnOff">
+        <el-input
+          v-model="loginForm.code"
+          auto-complete="off"
+          placeholder="验证码"
+          style="width: 63%"
+          @keyup.enter.native="handleLogin"
+        >
+          <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
+        </el-input>
+        <div class="login-code">
+          <img :src="codeUrl" @click="getCode" class="login-code-img"/>
+        </div>
+      </el-form-item>
+      <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;"  @change="memory">记住密码</el-checkbox>
+      <el-form-item style="width:100%;">
+        <el-button
+          :loading="loading"
+          size="medium"
+          type="primary"
+          style="width:100%;"
+          @click.native.prevent="handleLogin"
+        >
+          <span v-if="!loading">登 录</span>
+          <span v-else>登 录 中...</span>
+        </el-button>
+        <!-- <div style="float: right;" v-if="register">
+          <router-link class="link-type" :to="'/register'">立即注册</router-link>
+        </div> -->
+      </el-form-item>
+    </el-form>
+    <!--  底部  -->
+    <div class="el-login-footer" v-if="erp">
+      <!-- <span>Copyright © 2018-2021 yongtian.vip All Rights Reserved.</span> -->
+    </div>
+    <div id="loader-wrapper" v-if="ERPloading">
+        <div id="loader"></div>
+        <div class="loader-section section-left"></div>
+        <div class="loader-section section-right"></div>
+        <div class="load_title">正在加载系统资源,请耐心等待</div>
+    </div>
+  </div>
+</template>
+
+<script>
+import bgImg from "@/assets/images/bg.png";
+import logoImg from "@/assets/logo/logo-b.png";
+import { getCodeImg } from "@/api/login";
+import Cookies from "js-cookie";
+import { decrypt } from '@/utils/jsencrypt'
+
+export default {
+  name: "Login",
+  data() {
+    return {
+      erp:false,
+      ERPloading:true,
+      passwordtxt:"password",
+      bg:bgImg,
+      logo:logoImg,
+      codeUrl: "",
+      cookiePassword: "",
+      loginForm: {
+        username: "",
+        password: "",
+        // username: "admin",
+        // password: "admin123",
+        rememberMe: false,
+        code: "",
+        uuid: ""
+      },
+      loginRules: {
+        username: [
+          { required: true, trigger: "blur", message: "请输入您的账号" }
+        ],
+        password: [
+          { required: true, trigger: "blur", message: "请输入您的密码" }
+        ],
+        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+      },
+      loading: false,
+      // 验证码开关
+      captchaOnOff: false,
+      // 注册开关
+      register: false,
+      redirect: undefined
+    };
+  },
+  watch: {
+    $route: {
+      handler: function(route) {
+        this.redirect = route.query && route.query.redirect;
+      },
+      immediate: true
+    }
+  },
+  created() {
+    this.getUrl()
+  },
+  methods: {
+    getUrl(){
+      let url = this.$route.query
+      if(url.username && url.password){
+        let data = {username:url.username,password:url.password}
+        data.password = encrypt(encodeuricomponent(this.loginForm.password));
+        this.handleLoginERP(data)
+      }else if(url.userNameSaaS && url.passWordSaaS){
+        let data = {
+          username:decrypt(decodeURIComponent(url.userNameSaaS)),
+          password:decrypt(decodeURIComponent(url.passWordSaaS))
+        }
+        Cookies.set("username20220319", data.username, { expires: 30 });
+        Cookies.set("password20220319", url.passWordSaaS, { expires: 30 });
+        this.handleLoginSaaS(data)
+      }else{
+        this.getCode();
+        this.getCookie();
+      }
+    },
+    eyeTab(){
+      if(this.passwordtxt == "password"){
+        this.passwordtxt = "text"
+      }else{
+
+        this.passwordtxt = "password"
+      }
+
+    },
+    getCode() {
+      getCodeImg().then(res => {
+        this.captchaOnOff = true
+          this.codeUrl =  res.img;
+          this.loginForm.uuid = res.uuid;
+          this.erp = true
+          setTimeout(()=>{
+            this.ERPloading = false
+          },)
+      });
+    },
+    getCookie() {
+      const username = Cookies.get("username20220319");
+      const password = Cookies.get("password20220319");
+      const rememberMe = Cookies.get('rememberMe20220319')
+      this.loginForm = {
+        username: username === undefined ? this.loginForm.username : username,
+        password: password === undefined ? this.loginForm.password : decrypt(password),
+        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
+      };
+    },
+    handleLogin() {
+      this.$refs.loginForm.validate(valid => {
+        if (valid) {
+          this.loading = true;
+          this.$store.dispatch("Login", this.loginForm).then((res) => {
+            this.$router.push({ path: "/dashboard"}).catch(()=>{});
+          }).catch(() => {
+            this.loading = false;
+            if (this.captchaOnOff) {
+              this.getCode();
+            }
+          });
+        }
+      });
+    },
+    memory(){
+      if (this.loginForm.rememberMe) {
+        Cookies.set("username20220319", this.loginForm.username, { expires: 30 });
+        Cookies.set("password20220319", encrypt(encodeuricomponent(this.loginForm.password)), { expires: 30 });
+        Cookies.set('rememberMe20220319', this.loginForm.rememberMe, { expires: 30 });
+      } else {
+        Cookies.remove("username20220319");
+        Cookies.remove("password20220319");
+        Cookies.remove('rememberMe20220319');
+      }
+    },
+    handleLoginERP(data) {//erp登录
+
+      this.$store.dispatch("LoginERP", data).then((res) => {
+        this.$router.push({ path: "/dashboard"}).catch(()=>{});
+      }).catch((err) => {
+        location.href = '/hjjcweb/#/';
+      });
+    },
+    handleLoginSaaS(data) {//SaaS登录
+      this.$store.dispatch("Login", data).then((res) => {
+        this.$router.push({ path: "/dashboard"});
+      }).catch((err) => {
+        location.href = '/hjjcweb/#/';
+      });
+    }
+  }
+};
+</script>
+
+<style  lang="scss" scoped>
+.bg{
+  width:100%;
+  height:100%;
+  overflow: hidden;
+  position: fixed;
+  top:0;
+  left:0;
+  z-index: -1;
+  .bgimg{
+    width:100%;
+    height:100%;
+    position: absolute;
+    top:0;
+    left:0;
+    z-index: -1;
+  }
+}
+.logo{
+  width:100%;
+  position: fixed;
+  top:0;
+  img{
+    width:152px;
+    margin:10px 2rem 0 20px;
+    vertical-align: middle;
+  }
+  .logo_txt{
+    font-size: 1.5rem;
+    color:#fff;
+    vertical-align: middle;
+    letter-spacing: 4px;
+  }
+}
+.login {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 100%;
+  // background-image: url("../assets/images/login-background.jpg");
+  background-size: cover;
+}
+.title {
+  margin: 0px auto 30px auto;
+  text-align: left;
+  color: #000000;
+  font-size: 20px;
+  span{
+    margin-left:10px;
+    opacity: 0.25;
+  }
+}
+
+.login-form {
+  border-radius: 6px;
+  background: #ffffff;
+  width: 456px;
+  padding: 63px 35px;
+  .el-input {
+    height: 40px;
+    font-size: 16px !important;
+    input {
+      height: 40px;
+    }
+  }
+  .input-icon {
+    height: 39px;
+    width: 14px;
+    margin-left: 2px;
+  }
+}
+.login-tip {
+  font-size: 13px;
+  text-align: center;
+  color: #bfbfbf;
+}
+.login-code {
+  width: 33%;
+  height: 36px;
+  float: right;
+  img {
+    cursor: pointer;
+    vertical-align: middle;
+    width:100%;
+    height: 36px;
+    margin-top:-1px;
+  }
+}
+.el-login-footer {
+  height: 40px;
+  line-height: 40px;
+  position: fixed;
+  bottom: 0;
+  width: 100%;
+  text-align: center;
+  color: #fff;
+  font-family: Arial;
+  font-size: 12px;
+  letter-spacing: 1px;
+}
+::v-deep .el-input__inner{
+  height:36px !important;
+  line-height: 36px !important;
+}
+</style>
+<style>
+html,
+body,
+#app {
+    height: 100%;
+    margin: 0px;
+    padding: 0px;
+    background-color: transparent !important;
+
+}
+</style>

+ 20 - 20
public/index.html

@@ -6,7 +6,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="renderer" content="webkit">
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
-    <link rel="icon" href="/favicon.png">
+    <link rel="icon" href="/hjjcweb/favicon.png">
     <title>
         <%= webpackConfig.name %>
     </title>
@@ -19,14 +19,14 @@
             padding: 0px;
             /* background-color: #7171C6; */
         }
-
+        
         .chromeframe {
             margin: 0.2em 0;
             background: #ccc;
             color: #000;
             padding: 0.2em 0;
         }
-
+        
         #loader-wrapper {
             position: fixed;
             top: 0;
@@ -35,7 +35,7 @@
             height: 100%;
             z-index: 999999;
         }
-
+        
         #loader {
             display: block;
             position: relative;
@@ -54,7 +54,7 @@
             animation: spin 2s linear infinite;
             z-index: 1001;
         }
-
+        
         #loader:before {
             content: "";
             position: absolute;
@@ -71,7 +71,7 @@
             -ms-animation: spin 3s linear infinite;
             animation: spin 3s linear infinite;
         }
-
+        
         #loader:after {
             content: "";
             position: absolute;
@@ -88,7 +88,7 @@
             -webkit-animation: spin 1.5s linear infinite;
             animation: spin 1.5s linear infinite;
         }
-
+        
         @-webkit-keyframes spin {
             0% {
                 -webkit-transform: rotate(0deg);
@@ -101,7 +101,7 @@
                 transform: rotate(360deg);
             }
         }
-
+        
         @keyframes spin {
             0% {
                 -webkit-transform: rotate(0deg);
@@ -114,7 +114,7 @@
                 transform: rotate(360deg);
             }
         }
-
+        
         #loader-wrapper .loader-section {
             position: fixed;
             top: 0;
@@ -126,15 +126,15 @@
             -ms-transform: translateX(0);
             transform: translateX(0);
         }
-
+        
         #loader-wrapper .loader-section.section-left {
             left: 0;
         }
-
+        
         #loader-wrapper .loader-section.section-right {
             right: 0;
         }
-
+        
         .loaded #loader-wrapper .loader-section.section-left {
             -webkit-transform: translateX(-100%);
             -ms-transform: translateX(-100%);
@@ -142,7 +142,7 @@
             -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
             transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
         }
-
+        
         .loaded #loader-wrapper .loader-section.section-right {
             -webkit-transform: translateX(100%);
             -ms-transform: translateX(100%);
@@ -150,13 +150,13 @@
             -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
             transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
         }
-
+        
         .loaded #loader {
             opacity: 0;
             -webkit-transition: all 0.3s ease-out;
             transition: all 0.3s ease-out;
         }
-
+        
         .loaded #loader-wrapper {
             visibility: hidden;
             -webkit-transform: translateY(-100%);
@@ -165,15 +165,15 @@
             -webkit-transition: all 0.3s 1s ease-out;
             transition: all 0.3s 1s ease-out;
         }
-
+        
         .no-js #loader-wrapper {
             display: none;
         }
-
+        
         .no-js h1 {
             color: #222222;
         }
-
+        
         #loader-wrapper .load_title {
             font-family: 'Open Sans';
             color: #FFF;
@@ -186,7 +186,7 @@
             opacity: 1;
             line-height: 30px;
         }
-
+        
         #loader-wrapper .load_title span {
             font-weight: normal;
             font-style: italic;
@@ -209,4 +209,4 @@
 </body>
 
 
-</html>
+</html>

+ 91 - 94
src/views/login.vue

@@ -1,13 +1,13 @@
 <template>
-  <div class="login" >
-    <div class="bg" v-if="erp"><img src="@/assets/images/bg.png" alt="" style="width:100%;height:100%;"></div>
-    <div class="logo" v-if="erp">
+  <div class="login">
+    <div v-if="erp" class="bg"><img src="@/assets/images/bg.png" alt="" style="width:100%;height:100%;"></div>
+    <div v-if="erp" class="logo">
       <img src="@/assets/logo/logo-b.png" alt="">
       <span class="logo_txt">环境监测管理系统</span>
     </div>
-    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" v-if="erp">
+    <el-form v-if="erp" ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
       <h3 class="title">用户登录 <span>LOGIN</span></h3>
-      <el-form-item prop="username" >
+      <el-form-item prop="username">
         <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
           <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
         </el-input>
@@ -21,12 +21,12 @@
           @keyup.enter.native="handleLogin"
         >
           <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
-          <svg-icon slot="prefix" icon-class="eye"  class="el-input__icon input-icon"  style="position:absolute;right:-340px"  @click="eyeTab" v-show="passwordtxt =='password'" />
-          <svg-icon slot="prefix" icon-class="eye-open"  class="el-input__icon input-icon"  style="position:absolute;right:-340px"  @click="eyeTab" v-show="passwordtxt =='text'" />
+          <svg-icon v-show="passwordtxt =='password'" slot="prefix" icon-class="eye" class="el-input__icon input-icon" style="position:absolute;right:-340px" @click="eyeTab" />
+          <svg-icon v-show="passwordtxt =='text'" slot="prefix" icon-class="eye-open" class="el-input__icon input-icon" style="position:absolute;right:-340px" @click="eyeTab" />
         </el-input>
 
       </el-form-item>
-      <el-form-item prop="code" v-if="captchaOnOff">
+      <el-form-item v-if="captchaOnOff" prop="code">
         <el-input
           v-model="loginForm.code"
           auto-complete="off"
@@ -37,10 +37,10 @@
           <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
         </el-input>
         <div class="login-code">
-          <img :src="codeUrl" @click="getCode" class="login-code-img"/>
+          <img :src="codeUrl" class="login-code-img" @click="getCode">
         </div>
       </el-form-item>
-      <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;"  @change="memory">记住密码</el-checkbox>
+      <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;" @change="memory">记住密码</el-checkbox>
       <el-form-item style="width:100%;">
         <el-button
           :loading="loading"
@@ -58,53 +58,53 @@
       </el-form-item>
     </el-form>
     <!--  底部  -->
-    <div class="el-login-footer" v-if="erp">
+    <div v-if="erp" class="el-login-footer">
       <!-- <span>Copyright © 2018-2021 yongtian.vip All Rights Reserved.</span> -->
     </div>
-    <div id="loader-wrapper" v-if="ERPloading">
-        <div id="loader"></div>
-        <div class="loader-section section-left"></div>
-        <div class="loader-section section-right"></div>
-        <div class="load_title">正在加载系统资源,请耐心等待</div>
+    <div v-if="ERPloading" id="loader-wrapper">
+      <div id="loader" />
+      <div class="loader-section section-left" />
+      <div class="loader-section section-right" />
+      <div class="load_title">正在加载系统资源,请耐心等待</div>
     </div>
   </div>
 </template>
 
 <script>
-import bgImg from "@/assets/images/bg.png";
-import logoImg from "@/assets/logo/logo-b.png";
-import { getCodeImg } from "@/api/login";
-import Cookies from "js-cookie";
+import bgImg from '@/assets/images/bg.png'
+import logoImg from '@/assets/logo/logo-b.png'
+import { getCodeImg } from '@/api/login'
+import Cookies from 'js-cookie'
 import { decrypt } from '@/utils/jsencrypt'
 
 export default {
-  name: "Login",
+  name: 'Login',
   data() {
     return {
-      erp:false,
-      ERPloading:true,
-      passwordtxt:"password",
-      bg:bgImg,
-      logo:logoImg,
-      codeUrl: "",
-      cookiePassword: "",
+      erp: false,
+      ERPloading: true,
+      passwordtxt: 'password',
+      bg: bgImg,
+      logo: logoImg,
+      codeUrl: '',
+      cookiePassword: '',
       loginForm: {
-        username: "",
-        password: "",
+        username: '',
+        password: '',
         // username: "admin",
         // password: "admin123",
         rememberMe: false,
-        code: "",
-        uuid: ""
+        code: '',
+        uuid: ''
       },
       loginRules: {
         username: [
-          { required: true, trigger: "blur", message: "请输入您的账号" }
+          { required: true, trigger: 'blur', message: '请输入您的账号' }
         ],
         password: [
-          { required: true, trigger: "blur", message: "请输入您的密码" }
+          { required: true, trigger: 'blur', message: '请输入您的密码' }
         ],
-        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+        code: [{ required: true, trigger: 'change', message: '请输入验证码' }]
       },
       loading: false,
       // 验证码开关
@@ -112,12 +112,12 @@ export default {
       // 注册开关
       register: false,
       redirect: undefined
-    };
+    }
   },
   watch: {
     $route: {
       handler: function(route) {
-        this.redirect = route.query && route.query.redirect;
+        this.redirect = route.query && route.query.redirect
       },
       immediate: true
     }
@@ -126,98 +126,95 @@ export default {
     this.getUrl()
   },
   methods: {
-    getUrl(){
-      let url = this.$route.query
-      if(url.username && url.password){
-        let data = {username:url.username,password:url.password}
-        data.password = encrypt(encodeuricomponent(this.loginForm.password));
+    getUrl() {
+      const url = this.$route.query
+      if (url.username && url.password) {
+        const data = { username: url.username, password: url.password }
+        data.password = encrypt(encodeuricomponent(this.loginForm.password))
         this.handleLoginERP(data)
-      }else if(url.userNameSaaS && url.passWordSaaS){
-        let data = {
-          username:decrypt(decodeURIComponent(url.userNameSaaS)),
-          password:decrypt(decodeURIComponent(url.passWordSaaS))
+      } else if (url.userNameSaaS && url.passWordSaaS) {
+        const data = {
+          username: decrypt(decodeURIComponent(url.userNameSaaS)),
+          password: decrypt(decodeURIComponent(url.passWordSaaS))
         }
-        Cookies.set("username20220319", data.username, { expires: 30 });
-        Cookies.set("password20220319", url.passWordSaaS, { expires: 30 });
+        Cookies.set('username20220319', data.username, { expires: 30 })
+        Cookies.set('password20220319', url.passWordSaaS, { expires: 30 })
         this.handleLoginSaaS(data)
-      }else{
-        this.getCode();
-        this.getCookie();
+      } else {
+        this.getCode()
+        this.getCookie()
       }
     },
-    eyeTab(){
-      if(this.passwordtxt == "password"){
-        this.passwordtxt = "text"
-      }else{
-
-        this.passwordtxt = "password"
+    eyeTab() {
+      if (this.passwordtxt == 'password') {
+        this.passwordtxt = 'text'
+      } else {
+        this.passwordtxt = 'password'
       }
-
     },
     getCode() {
       getCodeImg().then(res => {
         this.captchaOnOff = true
-          this.codeUrl =  res.img;
-          this.loginForm.uuid = res.uuid;
-          this.erp = true
-          setTimeout(()=>{
-            this.ERPloading = false
-          },)
-      });
+        this.codeUrl = res.img
+        this.loginForm.uuid = res.uuid
+        this.erp = true
+        setTimeout(() => {
+          this.ERPloading = false
+        },)
+      })
     },
     getCookie() {
-      const username = Cookies.get("username20220319");
-      const password = Cookies.get("password20220319");
+      const username = Cookies.get('username20220319')
+      const password = Cookies.get('password20220319')
       const rememberMe = Cookies.get('rememberMe20220319')
       this.loginForm = {
         username: username === undefined ? this.loginForm.username : username,
         password: password === undefined ? this.loginForm.password : decrypt(password),
         rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
-      };
+      }
     },
     handleLogin() {
       this.$refs.loginForm.validate(valid => {
         if (valid) {
-          this.loading = true;
-          this.$store.dispatch("Login", this.loginForm).then((res) => {
-            this.$router.push({ path: "/dashboard"}).catch(()=>{});
+          this.loading = true
+          this.$store.dispatch('Login', this.loginForm).then((res) => {
+            this.$router.push({ path: '/dashboard' }).catch(() => {})
           }).catch(() => {
-            this.loading = false;
+            this.loading = false
             if (this.captchaOnOff) {
-              this.getCode();
+              this.getCode()
             }
-          });
+          })
         }
-      });
+      })
     },
-    memory(){
+    memory() {
       if (this.loginForm.rememberMe) {
-        Cookies.set("username20220319", this.loginForm.username, { expires: 30 });
-        Cookies.set("password20220319", encrypt(encodeuricomponent(this.loginForm.password)), { expires: 30 });
-        Cookies.set('rememberMe20220319', this.loginForm.rememberMe, { expires: 30 });
+        Cookies.set('username20220319', this.loginForm.username, { expires: 30 })
+        Cookies.set('password20220319', encrypt(encodeuricomponent(this.loginForm.password)), { expires: 30 })
+        Cookies.set('rememberMe20220319', this.loginForm.rememberMe, { expires: 30 })
       } else {
-        Cookies.remove("username20220319");
-        Cookies.remove("password20220319");
-        Cookies.remove('rememberMe20220319');
+        Cookies.remove('username20220319')
+        Cookies.remove('password20220319')
+        Cookies.remove('rememberMe20220319')
       }
     },
-    handleLoginERP(data) {//erp登录
-
-      this.$store.dispatch("LoginERP", data).then((res) => {
-        this.$router.push({ path: "/dashboard"}).catch(()=>{});
+    handleLoginERP(data) { // erp登录
+      this.$store.dispatch('LoginERP', data).then((res) => {
+        this.$router.push({ path: '/dashboard' }).catch(() => {})
       }).catch((err) => {
-        location.href = '/dashboard';
-      });
+        location.href = '/hjjcweb/#/'
+      })
     },
-    handleLoginSaaS(data) {//SaaS登录
-      this.$store.dispatch("Login", data).then((res) => {
-        this.$router.push({ path: "/dashboard"});
+    handleLoginSaaS(data) { // SaaS登录
+      this.$store.dispatch('Login', data).then((res) => {
+        this.$router.push({ path: '/dashboard' })
       }).catch((err) => {
-        location.href = '';
-      });
+        location.href = '/hjjcweb/#/'
+      })
     }
   }
-};
+}
 </script>
 
 <style  lang="scss" scoped>