Browse Source

init:清理非必要功能,修正项目名

SJ 1 day ago
parent
commit
a30d49cb1f

+ 259 - 259
public/index.html

@@ -1,260 +1,260 @@
-<!DOCTYPE html>
-<html lang="zh-cmn-Hans">
-
-<head>
-  <meta charset="utf-8">
-  <meta http-equiv="X-UA-Compatible" content="IE=edge">
-  <meta name="viewport" content="width=device-width,initial-scale=1.0">
-  <title>JeecgBoot 企业级低代码平台</title>
-  <link rel="icon" href="<%= BASE_URL %>logo.png">
-  <script src="<%= BASE_URL %>cdn/babel-polyfill/polyfill_7_2_5.js"></script>
-  <style>
-    html,
-    body,
-    #app {
-      height: 100%;
-      margin: 0px;
-      padding: 0px;
-    }
-    .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: 120px;
-      height: 120px;
-      margin: -75px 0 0 -75px;
-      border-radius: 50%;
-      border: 3px solid transparent;
-      /* COLOR 1 */
-      border-top-color: #FFF;
-      -webkit-animation: spin 2s linear infinite;
-      /* Chrome, Opera 15+, Safari 5+ */
-      -ms-animation: spin 2s linear infinite;
-      /* Chrome, Opera 15+, Safari 5+ */
-      -moz-animation: spin 2s linear infinite;
-      /* Chrome, Opera 15+, Safari 5+ */
-      -o-animation: spin 2s linear infinite;
-      /* Chrome, Opera 15+, Safari 5+ */
-      animation: spin 2s linear infinite;
-      /* Chrome, Firefox 16+, IE 10+, Opera */
-      z-index: 1001;
-    }
-    #loader:before {
-      content: "";
-      position: absolute;
-      top: 5px;
-      left: 5px;
-      right: 5px;
-      bottom: 5px;
-      border-radius: 50%;
-      border: 3px solid transparent;
-      /* COLOR 2 */
-      border-top-color: #FFF;
-      -webkit-animation: spin 3s linear infinite;
-      /* Chrome, Opera 15+, Safari 5+ */
-      -moz-animation: spin 3s linear infinite;
-      /* Chrome, Opera 15+, Safari 5+ */
-      -o-animation: spin 3s linear infinite;
-      /* Chrome, Opera 15+, Safari 5+ */
-      -ms-animation: spin 3s linear infinite;
-      /* Chrome, Opera 15+, Safari 5+ */
-      animation: spin 3s linear infinite;
-      /* Chrome, Firefox 16+, IE 10+, Opera */
-    }
-    #loader:after {
-      content: "";
-      position: absolute;
-      top: 15px;
-      left: 15px;
-      right: 15px;
-      bottom: 15px;
-      border-radius: 50%;
-      border: 3px solid transparent;
-      border-top-color: #FFF;
-      /* COLOR 3 */
-      -moz-animation: spin 1.5s linear infinite;
-      /* Chrome, Opera 15+, Safari 5+ */
-      -o-animation: spin 1.5s linear infinite;
-      /* Chrome, Opera 15+, Safari 5+ */
-      -ms-animation: spin 1.5s linear infinite;
-      /* Chrome, Opera 15+, Safari 5+ */
-      -webkit-animation: spin 1.5s linear infinite;
-      /* Chrome, Opera 15+, Safari 5+ */
-      animation: spin 1.5s linear infinite;
-      /* Chrome, Firefox 16+, IE 10+, Opera */
-    }
-    @-webkit-keyframes spin {
-      0% {
-        -webkit-transform: rotate(0deg);
-        /* Chrome, Opera 15+, Safari 3.1+ */
-        -ms-transform: rotate(0deg);
-        /* IE 9 */
-        transform: rotate(0deg);
-        /* Firefox 16+, IE 10+, Opera */
-      }
-      100% {
-        -webkit-transform: rotate(360deg);
-        /* Chrome, Opera 15+, Safari 3.1+ */
-        -ms-transform: rotate(360deg);
-        /* IE 9 */
-        transform: rotate(360deg);
-        /* Firefox 16+, IE 10+, Opera */
-      }
-    }
-    @keyframes spin {
-      0% {
-        -webkit-transform: rotate(0deg);
-        /* Chrome, Opera 15+, Safari 3.1+ */
-        -ms-transform: rotate(0deg);
-        /* IE 9 */
-        transform: rotate(0deg);
-        /* Firefox 16+, IE 10+, Opera */
-      }
-      100% {
-        -webkit-transform: rotate(360deg);
-        /* Chrome, Opera 15+, Safari 3.1+ */
-        -ms-transform: rotate(360deg);
-        /* IE 9 */
-        transform: rotate(360deg);
-        /* Firefox 16+, IE 10+, Opera */
-      }
-    }
-    #loader-wrapper .loader-section {
-      position: fixed;
-      top: 0;
-      width: 51%;
-      height: 100%;
-      background: #49a9ee;
-      /* Old browsers */
-      z-index: 1000;
-      -webkit-transform: translateX(0);
-      /* Chrome, Opera 15+, Safari 3.1+ */
-      -ms-transform: translateX(0);
-      /* IE 9 */
-      transform: translateX(0);
-      /* Firefox 16+, IE 10+, Opera */
-    }
-    #loader-wrapper .loader-section.section-left {
-      left: 0;
-    }
-    #loader-wrapper .loader-section.section-right {
-      right: 0;
-    }
-    /* Loaded */
-    .loaded #loader-wrapper .loader-section.section-left {
-      -webkit-transform: translateX(-100%);
-      /* Chrome, Opera 15+, Safari 3.1+ */
-      -ms-transform: translateX(-100%);
-      /* IE 9 */
-      transform: translateX(-100%);
-      /* Firefox 16+, IE 10+, Opera */
-      -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%);
-      /* Chrome, Opera 15+, Safari 3.1+ */
-      -ms-transform: translateX(100%);
-      /* IE 9 */
-      transform: translateX(100%);
-      /* Firefox 16+, IE 10+, Opera */
-      -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%);
-      /* Chrome, Opera 15+, Safari 3.1+ */
-      -ms-transform: translateY(-100%);
-      /* IE 9 */
-      transform: translateY(-100%);
-      /* Firefox 16+, IE 10+, Opera */
-      -webkit-transition: all 0.3s 1s ease-out;
-      transition: all 0.3s 1s ease-out;
-    }
-    /* JavaScript Turned Off */
-    .no-js #loader-wrapper {
-      display: none;
-    }
-    .no-js h1 {
-      color: #222222;
-    }
-    #loader-wrapper .load_title {
-      font-family: 'Open Sans';
-      color: #FFF;
-      font-size: 14px;
-      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: 14px;
-      color: #FFF;
-      opacity: 0.5;
-    }
-    /* 滚动条优化 start */
-    ::-webkit-scrollbar{
-      width:8px;
-      height:8px;
-    }
-    ::-webkit-scrollbar-track{
-      background: #f6f6f6;
-      border-radius:2px;
-    }
-    ::-webkit-scrollbar-thumb{
-      background: #cdcdcd;
-      border-radius:2px;
-    }
-    ::-webkit-scrollbar-thumb:hover{
-      background: #747474;
-    }
-    ::-webkit-scrollbar-corner {
-      background: #f6f6f6;
-    }
-    /* 滚动条优化 end */
-  </style>
-  <!-- 全局配置 -->
-  <script src="<%= BASE_URL %>static/config.js"></script>
-</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">正在加载 LG生产异常追踪系统,请耐心等待
-
-    </div>
-  </div>
-</div>
-
-</body>
-
+<!DOCTYPE html>
+<html lang="zh-cmn-Hans">
+
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width,initial-scale=1.0">
+  <title>LG</title>
+  <!-- <link rel="icon" href="<%= BASE_URL %>logo.png"> -->
+  <script src="<%= BASE_URL %>cdn/babel-polyfill/polyfill_7_2_5.js"></script>
+  <style>
+    html,
+    body,
+    #app {
+      height: 100%;
+      margin: 0px;
+      padding: 0px;
+    }
+    .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: 120px;
+      height: 120px;
+      margin: -75px 0 0 -75px;
+      border-radius: 50%;
+      border: 3px solid transparent;
+      /* COLOR 1 */
+      border-top-color: #FFF;
+      -webkit-animation: spin 2s linear infinite;
+      /* Chrome, Opera 15+, Safari 5+ */
+      -ms-animation: spin 2s linear infinite;
+      /* Chrome, Opera 15+, Safari 5+ */
+      -moz-animation: spin 2s linear infinite;
+      /* Chrome, Opera 15+, Safari 5+ */
+      -o-animation: spin 2s linear infinite;
+      /* Chrome, Opera 15+, Safari 5+ */
+      animation: spin 2s linear infinite;
+      /* Chrome, Firefox 16+, IE 10+, Opera */
+      z-index: 1001;
+    }
+    #loader:before {
+      content: "";
+      position: absolute;
+      top: 5px;
+      left: 5px;
+      right: 5px;
+      bottom: 5px;
+      border-radius: 50%;
+      border: 3px solid transparent;
+      /* COLOR 2 */
+      border-top-color: #FFF;
+      -webkit-animation: spin 3s linear infinite;
+      /* Chrome, Opera 15+, Safari 5+ */
+      -moz-animation: spin 3s linear infinite;
+      /* Chrome, Opera 15+, Safari 5+ */
+      -o-animation: spin 3s linear infinite;
+      /* Chrome, Opera 15+, Safari 5+ */
+      -ms-animation: spin 3s linear infinite;
+      /* Chrome, Opera 15+, Safari 5+ */
+      animation: spin 3s linear infinite;
+      /* Chrome, Firefox 16+, IE 10+, Opera */
+    }
+    #loader:after {
+      content: "";
+      position: absolute;
+      top: 15px;
+      left: 15px;
+      right: 15px;
+      bottom: 15px;
+      border-radius: 50%;
+      border: 3px solid transparent;
+      border-top-color: #FFF;
+      /* COLOR 3 */
+      -moz-animation: spin 1.5s linear infinite;
+      /* Chrome, Opera 15+, Safari 5+ */
+      -o-animation: spin 1.5s linear infinite;
+      /* Chrome, Opera 15+, Safari 5+ */
+      -ms-animation: spin 1.5s linear infinite;
+      /* Chrome, Opera 15+, Safari 5+ */
+      -webkit-animation: spin 1.5s linear infinite;
+      /* Chrome, Opera 15+, Safari 5+ */
+      animation: spin 1.5s linear infinite;
+      /* Chrome, Firefox 16+, IE 10+, Opera */
+    }
+    @-webkit-keyframes spin {
+      0% {
+        -webkit-transform: rotate(0deg);
+        /* Chrome, Opera 15+, Safari 3.1+ */
+        -ms-transform: rotate(0deg);
+        /* IE 9 */
+        transform: rotate(0deg);
+        /* Firefox 16+, IE 10+, Opera */
+      }
+      100% {
+        -webkit-transform: rotate(360deg);
+        /* Chrome, Opera 15+, Safari 3.1+ */
+        -ms-transform: rotate(360deg);
+        /* IE 9 */
+        transform: rotate(360deg);
+        /* Firefox 16+, IE 10+, Opera */
+      }
+    }
+    @keyframes spin {
+      0% {
+        -webkit-transform: rotate(0deg);
+        /* Chrome, Opera 15+, Safari 3.1+ */
+        -ms-transform: rotate(0deg);
+        /* IE 9 */
+        transform: rotate(0deg);
+        /* Firefox 16+, IE 10+, Opera */
+      }
+      100% {
+        -webkit-transform: rotate(360deg);
+        /* Chrome, Opera 15+, Safari 3.1+ */
+        -ms-transform: rotate(360deg);
+        /* IE 9 */
+        transform: rotate(360deg);
+        /* Firefox 16+, IE 10+, Opera */
+      }
+    }
+    #loader-wrapper .loader-section {
+      position: fixed;
+      top: 0;
+      width: 51%;
+      height: 100%;
+      background: #49a9ee;
+      /* Old browsers */
+      z-index: 1000;
+      -webkit-transform: translateX(0);
+      /* Chrome, Opera 15+, Safari 3.1+ */
+      -ms-transform: translateX(0);
+      /* IE 9 */
+      transform: translateX(0);
+      /* Firefox 16+, IE 10+, Opera */
+    }
+    #loader-wrapper .loader-section.section-left {
+      left: 0;
+    }
+    #loader-wrapper .loader-section.section-right {
+      right: 0;
+    }
+    /* Loaded */
+    .loaded #loader-wrapper .loader-section.section-left {
+      -webkit-transform: translateX(-100%);
+      /* Chrome, Opera 15+, Safari 3.1+ */
+      -ms-transform: translateX(-100%);
+      /* IE 9 */
+      transform: translateX(-100%);
+      /* Firefox 16+, IE 10+, Opera */
+      -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%);
+      /* Chrome, Opera 15+, Safari 3.1+ */
+      -ms-transform: translateX(100%);
+      /* IE 9 */
+      transform: translateX(100%);
+      /* Firefox 16+, IE 10+, Opera */
+      -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%);
+      /* Chrome, Opera 15+, Safari 3.1+ */
+      -ms-transform: translateY(-100%);
+      /* IE 9 */
+      transform: translateY(-100%);
+      /* Firefox 16+, IE 10+, Opera */
+      -webkit-transition: all 0.3s 1s ease-out;
+      transition: all 0.3s 1s ease-out;
+    }
+    /* JavaScript Turned Off */
+    .no-js #loader-wrapper {
+      display: none;
+    }
+    .no-js h1 {
+      color: #222222;
+    }
+    #loader-wrapper .load_title {
+      font-family: 'Open Sans';
+      color: #FFF;
+      font-size: 14px;
+      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: 14px;
+      color: #FFF;
+      opacity: 0.5;
+    }
+    /* 滚动条优化 start */
+    ::-webkit-scrollbar{
+      width:8px;
+      height:8px;
+    }
+    ::-webkit-scrollbar-track{
+      background: #f6f6f6;
+      border-radius:2px;
+    }
+    ::-webkit-scrollbar-thumb{
+      background: #cdcdcd;
+      border-radius:2px;
+    }
+    ::-webkit-scrollbar-thumb:hover{
+      background: #747474;
+    }
+    ::-webkit-scrollbar-corner {
+      background: #f6f6f6;
+    }
+    /* 滚动条优化 end */
+  </style>
+  <!-- 全局配置 -->
+  <script src="<%= BASE_URL %>static/config.js"></script>
+</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">正在加载 LG生产异常追踪系统,请耐心等待
+
+    </div>
+  </div>
+</div>
+
+</body>
+
 </html>

+ 149 - 148
src/components/layouts/UserLayout.vue

@@ -1,149 +1,150 @@
-<template>
-  <div id="userLayout" :class="['user-layout-wrapper', device]">
-    <div class="container">
-      <div class="top">
-        <div class="header">
-          <a href="/">
-            <span class="title">LG生产异常追踪系统</span>
-          </a>
-        </div>
-        <div class="desc">
-
-        </div>
-      </div>
-
-      <route-view></route-view>
-
-      <div class="footer">
-        <div class="links">
-          <a href="http://doc.jeecg.com" target="_blank">帮助</a>
-          <a href="https://github.com/zhangdaiscott/jeecg-boot" target="_blank">隐私</a>
-          <a href="https://github.com/zhangdaiscott/jeecg-boot/blob/master/LICENSE" target="_blank">条款</a>
-        </div>
-        <div class="copyright">
-          Copyright &copy; 2019 <a href="http://www.jeecg.com" target="_blank">JEECG开源社区</a> 出品
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-  import RouteView from "@/components/layouts/RouteView"
-  import { mixinDevice } from '@/utils/mixin.js'
-
-  export default {
-    name: "UserLayout",
-    components: { RouteView },
-    mixins: [mixinDevice],
-    data () {
-      return {}
-    },
-    mounted () {
-      document.body.classList.add('userLayout')
-    },
-    beforeDestroy () {
-      document.body.classList.remove('userLayout')
-    },
-  }
-</script>
-
-<style lang="less" scoped>
-  #userLayout.user-layout-wrapper {
-    height: 100%;
-
-    &.mobile {
-      .container {
-        .main {
-          max-width: 368px;
-          width: 98%;
-        }
-      }
-    }
-
-    .container {
-      width: 100%;
-      min-height: 100%;
-      background: #f0f2f5 url(~@/assets/background.svg) no-repeat 50%;
-      background-size: 100%;
-      padding: 110px 0 144px;
-      position: relative;
-
-      a {
-        text-decoration: none;
-      }
-
-      .top {
-        text-align: center;
-
-        .header {
-          height: 44px;
-          line-height: 44px;
-
-          .badge {
-            position: absolute;
-            display: inline-block;
-            line-height: 1;
-            vertical-align: middle;
-            margin-left: -12px;
-            margin-top: -10px;
-            opacity: 0.8;
-          }
-
-          .logo {
-            height: 44px;
-            vertical-align: top;
-            margin-right: 16px;
-            border-style: none;
-          }
-
-          .title {
-            font-size: 33px;
-            color: rgba(0, 0, 0, .85);
-            font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
-            font-weight: 600;
-            position: relative;
-            top: 2px;
-          }
-        }
-        .desc {
-          font-size: 14px;
-          color: rgba(0, 0, 0, 0.45);
-          margin-top: 12px;
-          margin-bottom: 40px;
-        }
-      }
-
-      .main {
-        min-width: 260px;
-        width: 368px;
-        margin: 0 auto;
-      }
-
-      .footer {
-        position: absolute;
-        width: 100%;
-        bottom: 0;
-        padding: 0 16px;
-        margin: 48px 0 24px;
-        text-align: center;
-
-        .links {
-          margin-bottom: 8px;
-          font-size: 14px;
-          a {
-            color: rgba(0, 0, 0, 0.45);
-            transition: all 0.3s;
-            &:not(:last-child) {
-              margin-right: 40px;
-            }
-          }
-        }
-        .copyright {
-          color: rgba(0, 0, 0, 0.45);
-          font-size: 14px;
-        }
-      }
-    }
-  }
+<template>
+  <div id="userLayout" :class="['user-layout-wrapper', device]">
+    <div class="container">
+      <div class="top">
+        <div class="header">
+          <a href="/">
+            <!-- <img src="~@/assets/logo.svg" class="logo" alt="logo"> -->
+            <span class="title">LG</span>
+          </a>
+        </div>
+        <div class="desc">
+          <!-- Jeecg Boot 是中国最具影响力的 企业级 低代码平台 -->
+        </div>
+      </div>
+
+      <route-view></route-view>
+
+      <!-- <div class="footer">
+        <div class="links">
+          <a href="http://doc.jeecg.com" target="_blank">帮助</a>
+          <a href="https://github.com/zhangdaiscott/jeecg-boot" target="_blank">隐私</a>
+          <a href="https://github.com/zhangdaiscott/jeecg-boot/blob/master/LICENSE" target="_blank">条款</a>
+        </div>
+        <div class="copyright">
+          Copyright &copy; 2019 <a href="http://www.jeecg.com" target="_blank">JEECG开源社区</a> 出品
+        </div>
+      </div> -->
+    </div>
+  </div>
+</template>
+
+<script>
+  import RouteView from "@/components/layouts/RouteView"
+  import { mixinDevice } from '@/utils/mixin.js'
+
+  export default {
+    name: "UserLayout",
+    components: { RouteView },
+    mixins: [mixinDevice],
+    data () {
+      return {}
+    },
+    mounted () {
+      document.body.classList.add('userLayout')
+    },
+    beforeDestroy () {
+      document.body.classList.remove('userLayout')
+    },
+  }
+</script>
+
+<style lang="less" scoped>
+  #userLayout.user-layout-wrapper {
+    height: 100%;
+
+    &.mobile {
+      .container {
+        .main {
+          max-width: 368px;
+          width: 98%;
+        }
+      }
+    }
+
+    .container {
+      width: 100%;
+      min-height: 100%;
+      background: #f0f2f5 url(~@/assets/background.svg) no-repeat 50%;
+      background-size: 100%;
+      padding: 110px 0 144px;
+      position: relative;
+
+      a {
+        text-decoration: none;
+      }
+
+      .top {
+        text-align: center;
+
+        .header {
+          height: 44px;
+          line-height: 44px;
+
+          .badge {
+            position: absolute;
+            display: inline-block;
+            line-height: 1;
+            vertical-align: middle;
+            margin-left: -12px;
+            margin-top: -10px;
+            opacity: 0.8;
+          }
+
+          .logo {
+            height: 44px;
+            vertical-align: top;
+            margin-right: 16px;
+            border-style: none;
+          }
+
+          .title {
+            font-size: 33px;
+            color: rgba(0, 0, 0, .85);
+            font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
+            font-weight: 600;
+            position: relative;
+            top: 2px;
+          }
+        }
+        .desc {
+          font-size: 14px;
+          color: rgba(0, 0, 0, 0.45);
+          margin-top: 12px;
+          margin-bottom: 40px;
+        }
+      }
+
+      .main {
+        min-width: 260px;
+        width: 368px;
+        margin: 0 auto;
+      }
+
+      .footer {
+        position: absolute;
+        width: 100%;
+        bottom: 0;
+        padding: 0 16px;
+        margin: 48px 0 24px;
+        text-align: center;
+
+        .links {
+          margin-bottom: 8px;
+          font-size: 14px;
+          a {
+            color: rgba(0, 0, 0, 0.45);
+            transition: all 0.3s;
+            &:not(:last-child) {
+              margin-right: 40px;
+            }
+          }
+        }
+        .copyright {
+          color: rgba(0, 0, 0, 0.45);
+          font-size: 14px;
+        }
+      }
+    }
+  }
 </style>

+ 50 - 50
src/components/page/GlobalFooter.vue

@@ -1,51 +1,51 @@
-<template>
-  <div class="footer">
-    <div class="links">
-      <a href="http://www.jeecg.com" target="_blank">JEECG 首页</a>
-      <a href="https://github.com/zhangdaiscott/jeecg-boot" target="_blank">
-        <a-icon type="github"/>
-      </a>
-      <a href="https://ant.design/">Ant Design</a>
-      <a href="https://vuecomponent.github.io/ant-design-vue/docs/vue/introduce-cn/">Vue Antd</a>
-    </div>
-    <div class="copyright">
-      Copyright
-      <a-icon type="copyright"/>
-      2019 <span>JEECG开源社区 出品</span>
-    </div>
-  </div>
-</template>
-
-<script>
-  export default {
-    name: "LayoutFooter"
-  }
-</script>
-
-<style lang="less" scoped>
-  .footer {
-    padding: 0 16px;
-    margin: 48px 0 24px;
-    text-align: center;
-
-    .links {
-      margin-bottom: 8px;
-
-      a {
-        color: rgba(0, 0, 0, .45);
-
-        &:hover {
-          color: rgba(0, 0, 0, .65);
-        }
-
-        &:not(:last-child) {
-          margin-right: 40px;
-        }
-      }
-    }
-    .copyright {
-      color: rgba(0, 0, 0, .45);
-      font-size: 14px;
-    }
-  }
+<template>
+  <div class="footer">
+    <!-- <div class="links">
+      <a href="http://www.jeecg.com" target="_blank">JEECG 首页</a>
+      <a href="https://github.com/zhangdaiscott/jeecg-boot" target="_blank">
+        <a-icon type="github"/>
+      </a>
+      <a href="https://ant.design/">Ant Design</a>
+      <a href="https://vuecomponent.github.io/ant-design-vue/docs/vue/introduce-cn/">Vue Antd</a>
+    </div>
+    <div class="copyright">
+      Copyright
+      <a-icon type="copyright"/>
+      2019 <span>JEECG开源社区 出品</span>
+    </div> -->
+  </div>
+</template>
+
+<script>
+  export default {
+    name: "LayoutFooter"
+  }
+</script>
+
+<style lang="less" scoped>
+  .footer {
+    padding: 0 16px;
+    margin: 48px 0 24px;
+    text-align: center;
+
+    .links {
+      margin-bottom: 8px;
+
+      a {
+        color: rgba(0, 0, 0, .45);
+
+        &:hover {
+          color: rgba(0, 0, 0, .65);
+        }
+
+        &:not(:last-child) {
+          margin-right: 40px;
+        }
+      }
+    }
+    .copyright {
+      color: rgba(0, 0, 0, .45);
+      font-size: 14px;
+    }
+  }
 </style>

+ 226 - 226
src/components/page/GlobalHeader.vue

@@ -1,227 +1,227 @@
-<template>
-  <!-- , width: fixedHeader ? `calc(100% - ${sidebarOpened ? 256 : 80}px)` : '100%'  -->
-  <a-layout-header
-    v-if="!headerBarFixed"
-    :class="[fixedHeader && 'ant-header-fixedHeader', sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed', ]"
-    :style="{ padding: '0' }">
-
-    <div v-if="mode === 'sidemenu'" class="header" :class="theme">
-      <a-icon
-        v-if="device==='mobile'"
-        class="trigger"
-        :type="collapsed ? 'menu-fold' : 'menu-unfold'"
-        @click="toggle"></a-icon>
-      <a-icon
-        v-else
-        class="trigger"
-        :type="collapsed ? 'menu-unfold' : 'menu-fold'"
-        @click="toggle"/>
-
-      <span v-if="device === 'desktop'">欢迎进入LG生产异常追踪系统</span>
-      <span v-else>Jeecg-Boot</span>
-
-      <user-menu :theme="theme"/>
-    </div>
-    <!-- 顶部导航栏模式 -->
-    <div v-else :class="['top-nav-header-index', theme]">
-      <div class="header-index-wide">
-        <div class="header-index-left" :style="topMenuStyle.headerIndexLeft">
-          <logo class="top-nav-header" :show-title="device !== 'mobile'" :style="topMenuStyle.topNavHeader"/>
-          <div v-if="device !== 'mobile'" :style="topMenuStyle.topSmenuStyle">
-            <s-menu
-              mode="horizontal"
-              :menu="menus"
-              :theme="theme"
-              @updateMenuTitle="handleUpdateMenuTitle"
-            ></s-menu>
-          </div>
-          <a-icon
-            v-else
-            class="trigger"
-            :type="collapsed ? 'menu-fold' : 'menu-unfold'"
-            @click="toggle"></a-icon>
-        </div>
-        <user-menu class="header-index-right" :theme="theme" :style="topMenuStyle.headerIndexRight"/>
-      </div>
-    </div>
-
-  </a-layout-header>
-</template>
-
-<script>
-  import UserMenu from '../tools/UserMenu'
-  import SMenu from '../menu/'
-  import Logo from '../tools/Logo'
-  import { mixin } from '@/utils/mixin.js'
-
-  export default {
-    name: 'GlobalHeader',
-    components: {
-      UserMenu,
-      SMenu,
-      Logo,
-    },
-    mixins: [mixin],
-    props: {
-      mode: {
-        type: String,
-        // sidemenu, topmenu
-        default: 'sidemenu'
-      },
-      menus: {
-        type: Array,
-        required: true
-      },
-      theme: {
-        type: String,
-        required: false,
-        default: 'dark'
-      },
-      collapsed: {
-        type: Boolean,
-        required: false,
-        default: false
-      },
-      device: {
-        type: String,
-        required: false,
-        default: 'desktop'
-      }
-    },
-    data() {
-      return {
-        headerBarFixed: false,
-        //update-begin--author:sunjianlei---date:20190508------for: 顶部导航栏过长时显示更多按钮-----
-        topMenuStyle: {
-          headerIndexLeft: {},
-          topNavHeader: {},
-          headerIndexRight: {},
-          topSmenuStyle: {}
-        },
-        chatStatus: '',
-      }
-    },
-    watch: {
-      /** 监听设备变化 */
-      device() {
-        if (this.mode === 'topmenu') {
-          this.buildTopMenuStyle()
-        }
-      },
-      /** 监听导航栏模式变化 */
-      mode(newVal) {
-        if (newVal === 'topmenu') {
-          this.buildTopMenuStyle()
-        }
-      }
-    },
-    //update-end--author:sunjianlei---date:20190508------for: 顶部导航栏过长时显示更多按钮-----
-    mounted() {
-      window.addEventListener('scroll', this.handleScroll)
-      //update-begin--author:sunjianlei---date:20190508------for: 顶部导航栏过长时显示更多按钮-----
-      if (this.mode === 'topmenu') {
-        this.buildTopMenuStyle()
-      }
-      //update-end--author:sunjianlei---date:20190508------for: 顶部导航栏过长时显示更多按钮-----
-    },
-    methods: {
-      handleScroll() {
-        if (this.autoHideHeader) {
-          let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
-          if (scrollTop > 100) {
-            this.headerBarFixed = true
-          } else {
-            this.headerBarFixed = false
-          }
-        } else {
-          this.headerBarFixed = false
-        }
-      },
-      toggle() {
-        this.$emit('toggle')
-      },
-      //update-begin--author:sunjianlei---date:20190508------for: 顶部导航栏过长时显示更多按钮-----
-      buildTopMenuStyle() {
-        if (this.mode === 'topmenu') {
-          if (this.device === 'mobile') {
-            // 手机端需要清空样式,否则显示会错乱
-            this.topMenuStyle.topNavHeader = {}
-            this.topMenuStyle.topSmenuStyle = {}
-            this.topMenuStyle.headerIndexRight = {}
-            this.topMenuStyle.headerIndexLeft = {}
-          } else {
-            let rightWidth = '400px'
-            this.topMenuStyle.topNavHeader = { 'min-width': '165px' }
-            this.topMenuStyle.topSmenuStyle = { 'width': 'calc(100% - 165px)' }
-            this.topMenuStyle.headerIndexRight = { 'min-width': rightWidth, 'white-space': 'nowrap' }
-            this.topMenuStyle.headerIndexLeft = { 'width': `calc(100% - ${rightWidth})` }
-          }
-        }
-      },
-      //update-begin--author:sunjianlei---date:20190508------for: 顶部导航栏过长时显示更多按钮-----
-
-      // update-begin-author:sunjianlei date:20210508 for: 修复动态功能测试菜单、带参数菜单标题错误、展开错误的问题
-      handleUpdateMenuTitle(value) {
-        this.$emit('updateMenuTitle', value)
-      },
-      // update-end-author:sunjianlei date:20210508 for: 修复动态功能测试菜单、带参数菜单标题错误、展开错误的问题
-
-    }
-  }
-</script>
-
-<style lang="less" scoped>
-  /* update_begin author:scott date:20190220 for: 缩小首页布局顶部的高度*/
-
-  @height: 59px;
-
-  .layout {
-
-    .top-nav-header-index {
-
-      .header-index-wide {
-        margin-left: 10px;
-
-        .ant-menu.ant-menu-horizontal {
-          height: @height;
-          line-height: @height;
-        }
-      }
-      .trigger {
-        line-height: 64px;
-        &:hover {
-          background: rgba(0, 0, 0, 0.05);
-        }
-      }
-    }
-
-    .header {
-      z-index: 2;
-      color: white;
-      height: @height;
-      background-color: @primary-color;
-      transition: background 300ms;
-
-      /* dark 样式 */
-      &.dark {
-        color: #000000;
-        box-shadow: 0 0 4px rgba(0, 0, 0, 0.2);
-        background-color: white !important;
-      }
-    }
-
-    .header, .top-nav-header-index {
-      &.dark .trigger:hover {
-        background: rgba(0, 0, 0, 0.05);
-      }
-    }
-  }
-
-  .ant-layout-header {
-    height: @height;
-    line-height: @height;
-  }
-
-  /* update_end author:scott date:20190220 for: 缩小首页布局顶部的高度*/
-
+<template>
+  <!-- , width: fixedHeader ? `calc(100% - ${sidebarOpened ? 256 : 80}px)` : '100%'  -->
+  <a-layout-header
+    v-if="!headerBarFixed"
+    :class="[fixedHeader && 'ant-header-fixedHeader', sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed', ]"
+    :style="{ padding: '0' }">
+
+    <div v-if="mode === 'sidemenu'" class="header" :class="theme">
+      <a-icon
+        v-if="device==='mobile'"
+        class="trigger"
+        :type="collapsed ? 'menu-fold' : 'menu-unfold'"
+        @click="toggle"></a-icon>
+      <a-icon
+        v-else
+        class="trigger"
+        :type="collapsed ? 'menu-unfold' : 'menu-fold'"
+        @click="toggle"/>
+
+      <!-- <span v-if="device === 'desktop'">欢迎</span> -->
+      <span>LG</span>
+
+      <user-menu :theme="theme"/>
+    </div>
+    <!-- 顶部导航栏模式 -->
+    <div v-else :class="['top-nav-header-index', theme]">
+      <div class="header-index-wide">
+        <div class="header-index-left" :style="topMenuStyle.headerIndexLeft">
+          <logo class="top-nav-header" :show-title="device !== 'mobile'" :style="topMenuStyle.topNavHeader"/>
+          <div v-if="device !== 'mobile'" :style="topMenuStyle.topSmenuStyle">
+            <s-menu
+              mode="horizontal"
+              :menu="menus"
+              :theme="theme"
+              @updateMenuTitle="handleUpdateMenuTitle"
+            ></s-menu>
+          </div>
+          <a-icon
+            v-else
+            class="trigger"
+            :type="collapsed ? 'menu-fold' : 'menu-unfold'"
+            @click="toggle"></a-icon>
+        </div>
+        <user-menu class="header-index-right" :theme="theme" :style="topMenuStyle.headerIndexRight"/>
+      </div>
+    </div>
+
+  </a-layout-header>
+</template>
+
+<script>
+  import UserMenu from '../tools/UserMenu'
+  import SMenu from '../menu/'
+  import Logo from '../tools/Logo'
+  import { mixin } from '@/utils/mixin.js'
+
+  export default {
+    name: 'GlobalHeader',
+    components: {
+      UserMenu,
+      SMenu,
+      Logo,
+    },
+    mixins: [mixin],
+    props: {
+      mode: {
+        type: String,
+        // sidemenu, topmenu
+        default: 'sidemenu'
+      },
+      menus: {
+        type: Array,
+        required: true
+      },
+      theme: {
+        type: String,
+        required: false,
+        default: 'dark'
+      },
+      collapsed: {
+        type: Boolean,
+        required: false,
+        default: false
+      },
+      device: {
+        type: String,
+        required: false,
+        default: 'desktop'
+      }
+    },
+    data() {
+      return {
+        headerBarFixed: false,
+        //update-begin--author:sunjianlei---date:20190508------for: 顶部导航栏过长时显示更多按钮-----
+        topMenuStyle: {
+          headerIndexLeft: {},
+          topNavHeader: {},
+          headerIndexRight: {},
+          topSmenuStyle: {}
+        },
+        chatStatus: '',
+      }
+    },
+    watch: {
+      /** 监听设备变化 */
+      device() {
+        if (this.mode === 'topmenu') {
+          this.buildTopMenuStyle()
+        }
+      },
+      /** 监听导航栏模式变化 */
+      mode(newVal) {
+        if (newVal === 'topmenu') {
+          this.buildTopMenuStyle()
+        }
+      }
+    },
+    //update-end--author:sunjianlei---date:20190508------for: 顶部导航栏过长时显示更多按钮-----
+    mounted() {
+      window.addEventListener('scroll', this.handleScroll)
+      //update-begin--author:sunjianlei---date:20190508------for: 顶部导航栏过长时显示更多按钮-----
+      if (this.mode === 'topmenu') {
+        this.buildTopMenuStyle()
+      }
+      //update-end--author:sunjianlei---date:20190508------for: 顶部导航栏过长时显示更多按钮-----
+    },
+    methods: {
+      handleScroll() {
+        if (this.autoHideHeader) {
+          let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
+          if (scrollTop > 100) {
+            this.headerBarFixed = true
+          } else {
+            this.headerBarFixed = false
+          }
+        } else {
+          this.headerBarFixed = false
+        }
+      },
+      toggle() {
+        this.$emit('toggle')
+      },
+      //update-begin--author:sunjianlei---date:20190508------for: 顶部导航栏过长时显示更多按钮-----
+      buildTopMenuStyle() {
+        if (this.mode === 'topmenu') {
+          if (this.device === 'mobile') {
+            // 手机端需要清空样式,否则显示会错乱
+            this.topMenuStyle.topNavHeader = {}
+            this.topMenuStyle.topSmenuStyle = {}
+            this.topMenuStyle.headerIndexRight = {}
+            this.topMenuStyle.headerIndexLeft = {}
+          } else {
+            let rightWidth = '400px'
+            this.topMenuStyle.topNavHeader = { 'min-width': '165px' }
+            this.topMenuStyle.topSmenuStyle = { 'width': 'calc(100% - 165px)' }
+            this.topMenuStyle.headerIndexRight = { 'min-width': rightWidth, 'white-space': 'nowrap' }
+            this.topMenuStyle.headerIndexLeft = { 'width': `calc(100% - ${rightWidth})` }
+          }
+        }
+      },
+      //update-begin--author:sunjianlei---date:20190508------for: 顶部导航栏过长时显示更多按钮-----
+
+      // update-begin-author:sunjianlei date:20210508 for: 修复动态功能测试菜单、带参数菜单标题错误、展开错误的问题
+      handleUpdateMenuTitle(value) {
+        this.$emit('updateMenuTitle', value)
+      },
+      // update-end-author:sunjianlei date:20210508 for: 修复动态功能测试菜单、带参数菜单标题错误、展开错误的问题
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+  /* update_begin author:scott date:20190220 for: 缩小首页布局顶部的高度*/
+
+  @height: 59px;
+
+  .layout {
+
+    .top-nav-header-index {
+
+      .header-index-wide {
+        margin-left: 10px;
+
+        .ant-menu.ant-menu-horizontal {
+          height: @height;
+          line-height: @height;
+        }
+      }
+      .trigger {
+        line-height: 64px;
+        &:hover {
+          background: rgba(0, 0, 0, 0.05);
+        }
+      }
+    }
+
+    .header {
+      z-index: 2;
+      color: white;
+      height: @height;
+      background-color: @primary-color;
+      transition: background 300ms;
+
+      /* dark 样式 */
+      &.dark {
+        color: #000000;
+        box-shadow: 0 0 4px rgba(0, 0, 0, 0.2);
+        background-color: white !important;
+      }
+    }
+
+    .header, .top-nav-header-index {
+      &.dark .trigger:hover {
+        background: rgba(0, 0, 0, 0.05);
+      }
+    }
+  }
+
+  .ant-layout-header {
+    height: @height;
+    line-height: @height;
+  }
+
+  /* update_end author:scott date:20190220 for: 缩小首页布局顶部的高度*/
+
 </style>

+ 63 - 63
src/components/tools/Logo.vue

@@ -1,64 +1,64 @@
-<template>
-  <div class="logo">
-    <router-link :to="routerLinkTo">
-
-      <!-- update-begin- author:sunjianlei --- date:20190814 --- for: logo颜色根据主题颜色变化 -->
-      <img v-if="navTheme === 'dark'" src="~@/assets/logo-white.png" alt="logo">
-      <img v-else src="~@/assets/logo.svg" alt="logo">
-      <!-- update-begin- author:sunjianlei --- date:20190814 --- for: logo颜色根据主题颜色变化 -->
-
-      <h1 v-if="showTitle">{{ title }}</h1>
-    </router-link>
-  </div>
-</template>
-
-<script>
-  import { mixin } from '@/utils/mixin.js'
-
-  export default {
-    name: 'Logo',
-    mixins: [mixin],
-    props: {
-      title: {
-        type: String,
-        default: 'Jeecg-Boot Pro',
-        required: false
-      },
-      showTitle: {
-        type: Boolean,
-        default: true,
-        required: false
-      },
-      // 点击Logo跳转地址
-      routerLinkTo: {
-        type: Object,
-        default: () => ({name: 'dashboard'}),
-      },
-    }
-  }
-</script>
-<style lang="less" scoped>
-  /*缩小首页布 局顶部的高度*/
-  @height: 59px;
-
-  .sider {
-    box-shadow: none !important;
-    .logo {
-      height: @height !important;
-      line-height: @height !important;
-      box-shadow: none !important;
-      transition: background 300ms;
-
-      a {
-        color: white;
-        &:hover {
-          color: rgba(255, 255, 255, 0.8);
-        }
-      }
-    }
-
-    &.light .logo {
-      background-color: @primary-color;
-    }
-  }
+<template>
+  <div class="logo">
+    <router-link :to="routerLinkTo">
+
+      <!-- update-begin- author:sunjianlei --- date:20190814 --- for: logo颜色根据主题颜色变化 -->
+      <!-- <img v-if="navTheme === 'dark'" src="~@/assets/logo-white.png" alt="logo">
+      <img v-else src="~@/assets/logo.svg" alt="logo"> -->
+      <!-- update-begin- author:sunjianlei --- date:20190814 --- for: logo颜色根据主题颜色变化 -->
+
+      <h1 v-if="showTitle">{{ title }}</h1>
+    </router-link>
+  </div>
+</template>
+
+<script>
+  import { mixin } from '@/utils/mixin.js'
+
+  export default {
+    name: 'Logo',
+    mixins: [mixin],
+    props: {
+      title: {
+        type: String,
+        default: 'LG',
+        required: false
+      },
+      showTitle: {
+        type: Boolean,
+        default: true,
+        required: false
+      },
+      // 点击Logo跳转地址
+      routerLinkTo: {
+        type: Object,
+        default: () => ({name: 'dashboard'}),
+      },
+    }
+  }
+</script>
+<style lang="less" scoped>
+  /*缩小首页布 局顶部的高度*/
+  @height: 59px;
+
+  .sider {
+    box-shadow: none !important;
+    .logo {
+      height: @height !important;
+      line-height: @height !important;
+      box-shadow: none !important;
+      transition: background 300ms;
+
+      a {
+        color: white;
+        &:hover {
+          color: rgba(255, 255, 255, 0.8);
+        }
+      }
+    }
+
+    &.light .logo {
+      background-color: @primary-color;
+    }
+  }
 </style>

+ 286 - 286
src/components/tools/UserMenu.vue

@@ -1,287 +1,287 @@
-<template>
-  <div class="user-wrapper" :class="theme">
-    <!-- update_begin author:zhaoxin date:20191129 for: 做头部菜单栏导航 -->
-    <!-- update-begin author:sunjianlei date:20191@20 for: 解决全局样式冲突的问题 -->
-    <span class="action" @click="showClick">
-      <a-icon type="search"></a-icon>
-    </span>
-    <!-- update-begin author:sunjianlei date:20200219 for: 菜单搜索改为动态组件,在手机端呈现出弹出框 -->
-    <component :is="searchMenuComp" v-show="searchMenuVisible || isMobile()" class="borders" :visible="searchMenuVisible" title="搜索菜单" :footer="null" @cancel="searchMenuVisible=false">
-      <a-select
-        class="search-input"
-        showSearch
-        :showArrow="false"
-        placeholder="搜索菜单"
-        optionFilterProp="children"
-        :filterOption="filterOption"
-        :open="isMobile()?true:null"
-        :getPopupContainer="(node) => node.parentNode"
-        :style="isMobile()?{width: '100%',marginBottom:'50px'}:{}"
-        @change="searchMethods"
-        @blur="hiddenClick"
-      >
-        <a-select-option v-for="(site,index) in searchMenuOptions" :key="index" :value="site.id">{{site.meta.title}}</a-select-option>
-      </a-select>
-    </component>
-    <!-- update-end author:sunjianlei date:20200219 for: 菜单搜索改为动态组件,在手机端呈现出弹出框 -->
-    <!-- update-end author:sunjianlei date:20191220 for: 解决全局样式冲突的问题 -->
-    <!-- update_end  author:zhaoxin date:20191129 for: 做头部菜单栏导航 -->
-    <span class="action">
-      <a class="logout_title" target="_blank" href="http://doc.jeecg.com">
-        <a-icon type="question-circle-o"></a-icon>
-      </a>
-    </span>
-    <header-notice class="action"/>
-    <a-dropdown>
-      <span class="action action-full ant-dropdown-link user-dropdown-menu">
-        <a-avatar class="avatar" size="small" :src="getAvatar()"/>
-        <span v-if="isDesktop()">欢迎您,{{ nickname() }}</span>
-      </span>
-      <a-menu slot="overlay" class="user-dropdown-menu-wrapper">
-        <a-menu-item key="0">
-          <router-link :to="{ name: 'account-center' }">
-            <a-icon type="user"/>
-            <span>个人中心</span>
-          </router-link>
-        </a-menu-item>
-        <a-menu-item key="1">
-          <router-link :to="{ name: 'account-settings-base' }">
-            <a-icon type="setting"/>
-            <span>账户设置</span>
-          </router-link>
-        </a-menu-item>
-        <a-menu-item key="3"  @click="systemSetting">
-           <a-icon type="tool"/>
-           <span>系统设置</span>
-        </a-menu-item>
-        <a-menu-item key="4" @click="updatePassword">
-          <a-icon type="setting"/>
-          <span>密码修改</span>
-        </a-menu-item>
-        <a-menu-item key="5" @click="updateCurrentDepart">
-          <a-icon type="cluster"/>
-          <span>切换部门</span>
-        </a-menu-item>
-        <a-menu-item key="6" @click="clearCache">
-          <a-icon type="sync"/>
-          <span>清理缓存</span>
-        </a-menu-item>
-       <!-- <a-menu-item key="2" disabled>
-          <a-icon type="setting"/>
-          <span>测试</span>
-        </a-menu-item>
-        <a-menu-divider/>
-        <a-menu-item key="3">
-          <a href="javascript:;" @click="handleLogout">
-            <a-icon type="logout"/>
-            <span>退出登录</span>
-          </a>
-        </a-menu-item>-->
-      </a-menu>
-    </a-dropdown>
-    <span class="action">
-      <a class="logout_title" href="javascript:;" @click="handleLogout">
-        <a-icon type="logout"/>
-        <span v-if="isDesktop()">&nbsp;退出登录</span>
-      </a>
-    </span>
-    <user-password ref="userPassword"></user-password>
-    <depart-select ref="departSelect" :closable="true" title="部门切换"></depart-select>
-    <setting-drawer ref="settingDrawer" :closable="true" title="系统设置"></setting-drawer>
-  </div>
-</template>
-
-<script>
-  import HeaderNotice from './HeaderNotice'
-  import UserPassword from './UserPassword'
-  import SettingDrawer from "@/components/setting/SettingDrawer";
-  import DepartSelect from './DepartSelect'
-  import { mapActions, mapGetters,mapState } from 'vuex'
-  import { mixinDevice } from '@/utils/mixin.js'
-  import { getFileAccessHttpUrl,getAction } from "@/api/manage"
-  import Vue from 'vue'
-  import { UI_CACHE_DB_DICT_DATA } from "@/store/mutation-types"
-
-  export default {
-    name: "UserMenu",
-    mixins: [mixinDevice],
-    data(){
-      return{
-        // update-begin author:sunjianlei date:20200219 for: 头部菜单搜索规范命名 --------------
-        searchMenuOptions:[],
-        searchMenuComp: 'span',
-        searchMenuVisible: false,
-        // update-begin author:sunjianlei date:20200219 for: 头部菜单搜索规范命名 --------------
-      }
-    },
-    components: {
-      HeaderNotice,
-      UserPassword,
-      DepartSelect,
-      SettingDrawer
-    },
-    props: {
-      theme: {
-        type: String,
-        required: false,
-        default: 'dark'
-      }
-    },
-    /* update_begin author:zhaoxin date:20191129 for: 做头部菜单栏导航*/
-    created() {
-      let lists = []
-      this.searchMenus(lists,this.permissionMenuList)
-      this.searchMenuOptions=[...lists]
-    },
-    mounted() {
-      //如果是单点登录模式
-      if (process.env.VUE_APP_SSO == 'true') {
-        let depart = this.userInfo().orgCode
-        if (!depart) {
-          this.updateCurrentDepart()
-        }
-      }
-    },
-    computed: {
-      ...mapState({
-        // 后台菜单
-        permissionMenuList: state => state.user.permissionList
-
-      })
-    },
-    /* update_end author:zhaoxin date:20191129 for: 做头部菜单栏导航*/
-    watch: {
-      // update-begin author:sunjianlei date:20200219 for: 菜单搜索改为动态组件,在手机端呈现出弹出框
-      device: {
-        immediate: true,
-        handler() {
-          this.searchMenuVisible = false
-          this.searchMenuComp = this.isMobile() ? 'a-modal' : 'span'
-        },
-      },
-      // update-end author:sunjianlei date:20200219 for: 菜单搜索改为动态组件,在手机端呈现出弹出框
-    },
-    methods: {
-      /* update_begin author:zhaoxin date:20191129 for: 做头部菜单栏导航*/
-      showClick() {
-        this.searchMenuVisible = true
-      },
-      hiddenClick(){
-        this.shows = false
-      },
-      /* update_end author:zhaoxin date:20191129 for: 做头部菜单栏导航*/
-      ...mapActions(["Logout"]),
-      ...mapGetters(["nickname", "avatar","userInfo"]),
-      getAvatar(){
-        return getFileAccessHttpUrl(this.avatar())
-      },
-      handleLogout() {
-        const that = this
-
-        this.$confirm({
-          title: '提示',
-          content: '真的要注销登录吗 ?',
-          onOk() {
-            return that.Logout({}).then(() => {
-              // update-begin author:scott date:20211223 for:【JTC-198】退出登录体验不好
-              //that.$router.push({ path: '/user/login' });
-              window.location.reload()
-              // update-end author:scott date:20211223 for:【JTC-198】退出登录体验不好
-            }).catch(err => {
-              that.$message.error({
-                title: '错误',
-                description: err.message
-              })
-            })
-          },
-          onCancel() {
-          },
-        });
-      },
-      updatePassword(){
-        let username = this.userInfo().username
-        this.$refs.userPassword.show(username)
-      },
-      updateCurrentDepart(){
-        this.$refs.departSelect.show()
-      },
-      systemSetting(){
-        this.$refs.settingDrawer.showDrawer()
-      },
-      /* update_begin author:zhaoxin date:20191129 for: 做头部菜单栏导航*/
-      searchMenus(arr,menus){
-        for(let i of menus){
-          if(!i.hidden && "layouts/RouteView"!==i.component){
-           arr.push(i)
-          }
-          if(i.children&& i.children.length>0){
-            this.searchMenus(arr,i.children)
-          }
-        }
-      },
-      filterOption(input, option) {
-        return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
-      },
-      // update_begin author:sunjianlei date:20191230 for: 解决外部链接打开失败的问题
-      searchMethods(value) {
-        let route = this.searchMenuOptions.filter(item => item.id === value)[0]
-        //update-begin-author:sunjianlei date:20220111 for: 【JTC-702】【菜单搜索】菜单搜索里点击跳转的菜单,无法将Token信息传递过去
-        if(route.component.includes('layouts/IframePageView')){
-          this.$router.push(route)
-        }else{
-          this.$router.push({ path: route.path })
-        }
-        //update-end-author:sunjianlei date:20220111 for: 【JTC-702】【菜单搜索】菜单搜索里点击跳转的菜单,无法将Token信息传递过去
-        this.searchMenuVisible = false
-      },
-      // update_end author:sunjianlei date:20191230 for: 解决外部链接打开失败的问题
-      /*update_end author:zhaoxin date:20191129 for: 做头部菜单栏导航*/
-      /*update_begin author:liushaoqian date:20200507 for: 刷新缓存*/
-      clearCache(){
-        getAction("sys/dict/refleshCache").then((res) => {
-          if (res.success) {
-            //重新加载缓存
-            getAction("sys/dict/queryAllDictItems").then((res) => {
-              if (res.success) {
-                Vue.ls.remove(UI_CACHE_DB_DICT_DATA)
-                Vue.ls.set(UI_CACHE_DB_DICT_DATA, res.result, 7 * 24 * 60 * 60 * 1000)
-              }
-            })
-            this.$message.success("刷新缓存完成!");
-          }
-        }).catch(e=>{
-          this.$message.warn("刷新缓存失败!");
-          console.log("刷新失败",e)
-        })
-      }
-      /*update_end author:liushaoqian date:20200507 for: 刷新缓存*/
-    }
-  }
-</script>
-
-<style lang="less" scoped>
-  /* update_begin author:zhaoxin date:20191129 for: 让搜索框颜色能随主题颜色变换*/
-  /* update-begin author:sunjianlei date:20191220 for: 解决全局样式冲突问题 */
-  .user-wrapper .search-input {
-    width: 180px;
-    color: inherit;
-
-    /deep/ .ant-select-selection {
-      background-color: inherit;
-      border: 0;
-      border-bottom: 1px solid white;
-      &__placeholder, &__field__placeholder {
-        color: inherit;
-      }
-    }
-  }
-  /* update-end author:sunjianlei date:20191220 for: 解决全局样式冲突问题 */
-  /* update_end author:zhaoxin date:20191129 for: 让搜索框颜色能随主题颜色变换*/
-</style>
-
-<style scoped>
-  .logout_title {
-    color: inherit;
-    text-decoration: none;
-  }
+<template>
+  <div class="user-wrapper" :class="theme">
+    <!-- update_begin author:zhaoxin date:20191129 for: 做头部菜单栏导航 -->
+    <!-- update-begin author:sunjianlei date:20191@20 for: 解决全局样式冲突的问题 -->
+    <!-- <span class="action" @click="showClick">
+      <a-icon type="search"></a-icon>
+    </span> -->
+    <!-- update-begin author:sunjianlei date:20200219 for: 菜单搜索改为动态组件,在手机端呈现出弹出框 -->
+    <!-- <component :is="searchMenuComp" v-show="searchMenuVisible || isMobile()" class="borders" :visible="searchMenuVisible" title="搜索菜单" :footer="null" @cancel="searchMenuVisible=false">
+      <a-select
+        class="search-input"
+        showSearch
+        :showArrow="false"
+        placeholder="搜索菜单"
+        optionFilterProp="children"
+        :filterOption="filterOption"
+        :open="isMobile()?true:null"
+        :getPopupContainer="(node) => node.parentNode"
+        :style="isMobile()?{width: '100%',marginBottom:'50px'}:{}"
+        @change="searchMethods"
+        @blur="hiddenClick"
+      >
+        <a-select-option v-for="(site,index) in searchMenuOptions" :key="index" :value="site.id">{{site.meta.title}}</a-select-option>
+      </a-select>
+    </component> -->
+    <!-- update-end author:sunjianlei date:20200219 for: 菜单搜索改为动态组件,在手机端呈现出弹出框 -->
+    <!-- update-end author:sunjianlei date:20191220 for: 解决全局样式冲突的问题 -->
+    <!-- update_end  author:zhaoxin date:20191129 for: 做头部菜单栏导航 -->
+    <!-- <span class="action">
+      <a class="logout_title" target="_blank" href="http://doc.jeecg.com">
+        <a-icon type="question-circle-o"></a-icon>
+      </a>
+    </span> -->
+    <!-- <header-notice class="action"/> -->
+    <a-dropdown>
+      <span class="action action-full ant-dropdown-link user-dropdown-menu">
+        <a-avatar class="avatar" size="small" :src="getAvatar()"/>
+        <span v-if="isDesktop()">欢迎您,{{ nickname() }}</span>
+      </span>
+      <a-menu slot="overlay" class="user-dropdown-menu-wrapper">
+        <!-- <a-menu-item key="0">
+          <router-link :to="{ name: 'account-center' }">
+            <a-icon type="user"/>
+            <span>个人中心</span>
+          </router-link>
+        </a-menu-item>
+        <a-menu-item key="1">
+          <router-link :to="{ name: 'account-settings-base' }">
+            <a-icon type="setting"/>
+            <span>账户设置</span>
+          </router-link>
+        </a-menu-item>
+        <a-menu-item key="3"  @click="systemSetting">
+           <a-icon type="tool"/>
+           <span>系统设置</span>
+        </a-menu-item> -->
+        <a-menu-item key="4" @click="updatePassword">
+          <a-icon type="setting"/>
+          <span>密码修改</span>
+        </a-menu-item>
+        <!-- <a-menu-item key="5" @click="updateCurrentDepart">
+          <a-icon type="cluster"/>
+          <span>切换部门</span>
+        </a-menu-item>
+        <a-menu-item key="6" @click="clearCache">
+          <a-icon type="sync"/>
+          <span>清理缓存</span>
+        </a-menu-item> -->
+       <!-- <a-menu-item key="2" disabled>
+          <a-icon type="setting"/>
+          <span>测试</span>
+        </a-menu-item>
+        <a-menu-divider/>
+        <a-menu-item key="3">
+          <a href="javascript:;" @click="handleLogout">
+            <a-icon type="logout"/>
+            <span>退出登录</span>
+          </a>
+        </a-menu-item>-->
+      </a-menu>
+    </a-dropdown>
+    <span class="action">
+      <a class="logout_title" href="javascript:;" @click="handleLogout">
+        <a-icon type="logout"/>
+        <span v-if="isDesktop()">&nbsp;退出登录</span>
+      </a>
+    </span>
+    <user-password ref="userPassword"></user-password>
+    <depart-select ref="departSelect" :closable="true" title="部门切换"></depart-select>
+    <setting-drawer ref="settingDrawer" :closable="true" title="系统设置"></setting-drawer>
+  </div>
+</template>
+
+<script>
+  import HeaderNotice from './HeaderNotice'
+  import UserPassword from './UserPassword'
+  import SettingDrawer from "@/components/setting/SettingDrawer";
+  import DepartSelect from './DepartSelect'
+  import { mapActions, mapGetters,mapState } from 'vuex'
+  import { mixinDevice } from '@/utils/mixin.js'
+  import { getFileAccessHttpUrl,getAction } from "@/api/manage"
+  import Vue from 'vue'
+  import { UI_CACHE_DB_DICT_DATA } from "@/store/mutation-types"
+
+  export default {
+    name: "UserMenu",
+    mixins: [mixinDevice],
+    data(){
+      return{
+        // update-begin author:sunjianlei date:20200219 for: 头部菜单搜索规范命名 --------------
+        searchMenuOptions:[],
+        searchMenuComp: 'span',
+        searchMenuVisible: false,
+        // update-begin author:sunjianlei date:20200219 for: 头部菜单搜索规范命名 --------------
+      }
+    },
+    components: {
+      HeaderNotice,
+      UserPassword,
+      DepartSelect,
+      SettingDrawer
+    },
+    props: {
+      theme: {
+        type: String,
+        required: false,
+        default: 'dark'
+      }
+    },
+    /* update_begin author:zhaoxin date:20191129 for: 做头部菜单栏导航*/
+    created() {
+      let lists = []
+      this.searchMenus(lists,this.permissionMenuList)
+      this.searchMenuOptions=[...lists]
+    },
+    mounted() {
+      //如果是单点登录模式
+      if (process.env.VUE_APP_SSO == 'true') {
+        let depart = this.userInfo().orgCode
+        if (!depart) {
+          this.updateCurrentDepart()
+        }
+      }
+    },
+    computed: {
+      ...mapState({
+        // 后台菜单
+        permissionMenuList: state => state.user.permissionList
+
+      })
+    },
+    /* update_end author:zhaoxin date:20191129 for: 做头部菜单栏导航*/
+    watch: {
+      // update-begin author:sunjianlei date:20200219 for: 菜单搜索改为动态组件,在手机端呈现出弹出框
+      device: {
+        immediate: true,
+        handler() {
+          this.searchMenuVisible = false
+          this.searchMenuComp = this.isMobile() ? 'a-modal' : 'span'
+        },
+      },
+      // update-end author:sunjianlei date:20200219 for: 菜单搜索改为动态组件,在手机端呈现出弹出框
+    },
+    methods: {
+      /* update_begin author:zhaoxin date:20191129 for: 做头部菜单栏导航*/
+      showClick() {
+        this.searchMenuVisible = true
+      },
+      hiddenClick(){
+        this.shows = false
+      },
+      /* update_end author:zhaoxin date:20191129 for: 做头部菜单栏导航*/
+      ...mapActions(["Logout"]),
+      ...mapGetters(["nickname", "avatar","userInfo"]),
+      getAvatar(){
+        return getFileAccessHttpUrl(this.avatar())
+      },
+      handleLogout() {
+        const that = this
+
+        this.$confirm({
+          title: '提示',
+          content: '真的要注销登录吗 ?',
+          onOk() {
+            return that.Logout({}).then(() => {
+              // update-begin author:scott date:20211223 for:【JTC-198】退出登录体验不好
+              //that.$router.push({ path: '/user/login' });
+              window.location.reload()
+              // update-end author:scott date:20211223 for:【JTC-198】退出登录体验不好
+            }).catch(err => {
+              that.$message.error({
+                title: '错误',
+                description: err.message
+              })
+            })
+          },
+          onCancel() {
+          },
+        });
+      },
+      updatePassword(){
+        let username = this.userInfo().username
+        this.$refs.userPassword.show(username)
+      },
+      updateCurrentDepart(){
+        this.$refs.departSelect.show()
+      },
+      systemSetting(){
+        this.$refs.settingDrawer.showDrawer()
+      },
+      /* update_begin author:zhaoxin date:20191129 for: 做头部菜单栏导航*/
+      searchMenus(arr,menus){
+        for(let i of menus){
+          if(!i.hidden && "layouts/RouteView"!==i.component){
+           arr.push(i)
+          }
+          if(i.children&& i.children.length>0){
+            this.searchMenus(arr,i.children)
+          }
+        }
+      },
+      filterOption(input, option) {
+        return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+      },
+      // update_begin author:sunjianlei date:20191230 for: 解决外部链接打开失败的问题
+      searchMethods(value) {
+        let route = this.searchMenuOptions.filter(item => item.id === value)[0]
+        //update-begin-author:sunjianlei date:20220111 for: 【JTC-702】【菜单搜索】菜单搜索里点击跳转的菜单,无法将Token信息传递过去
+        if(route.component.includes('layouts/IframePageView')){
+          this.$router.push(route)
+        }else{
+          this.$router.push({ path: route.path })
+        }
+        //update-end-author:sunjianlei date:20220111 for: 【JTC-702】【菜单搜索】菜单搜索里点击跳转的菜单,无法将Token信息传递过去
+        this.searchMenuVisible = false
+      },
+      // update_end author:sunjianlei date:20191230 for: 解决外部链接打开失败的问题
+      /*update_end author:zhaoxin date:20191129 for: 做头部菜单栏导航*/
+      /*update_begin author:liushaoqian date:20200507 for: 刷新缓存*/
+      clearCache(){
+        getAction("sys/dict/refleshCache").then((res) => {
+          if (res.success) {
+            //重新加载缓存
+            getAction("sys/dict/queryAllDictItems").then((res) => {
+              if (res.success) {
+                Vue.ls.remove(UI_CACHE_DB_DICT_DATA)
+                Vue.ls.set(UI_CACHE_DB_DICT_DATA, res.result, 7 * 24 * 60 * 60 * 1000)
+              }
+            })
+            this.$message.success("刷新缓存完成!");
+          }
+        }).catch(e=>{
+          this.$message.warn("刷新缓存失败!");
+          console.log("刷新失败",e)
+        })
+      }
+      /*update_end author:liushaoqian date:20200507 for: 刷新缓存*/
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+  /* update_begin author:zhaoxin date:20191129 for: 让搜索框颜色能随主题颜色变换*/
+  /* update-begin author:sunjianlei date:20191220 for: 解决全局样式冲突问题 */
+  .user-wrapper .search-input {
+    width: 180px;
+    color: inherit;
+
+    /deep/ .ant-select-selection {
+      background-color: inherit;
+      border: 0;
+      border-bottom: 1px solid white;
+      &__placeholder, &__field__placeholder {
+        color: inherit;
+      }
+    }
+  }
+  /* update-end author:sunjianlei date:20191220 for: 解决全局样式冲突问题 */
+  /* update_end author:zhaoxin date:20191129 for: 让搜索框颜色能随主题颜色变换*/
+</style>
+
+<style scoped>
+  .logout_title {
+    color: inherit;
+    text-decoration: none;
+  }
 </style>

+ 64 - 41
src/views/dashboard/Analysis.vue

@@ -1,41 +1,64 @@
-<template>
-  <div>
-<!--    <index-chart v-if="indexStyle==1"></index-chart>-->
-<!--    <index-bdc v-if="indexStyle==2"></index-bdc>-->
-<!--    <index-task v-if="indexStyle==3"></index-task>-->
-<!--    <div style="width: 100%;text-align: right;margin-top: 20px">-->
-<!--      请选择首页样式:-->
-<!--      <a-radio-group v-model="indexStyle">-->
-<!--        <a-radio :value="1">统计图表</a-radio>-->
-<!--        <a-radio :value="2">统计图表2</a-radio>-->
-<!--        <a-radio :value="3">任务表格</a-radio>-->
-<!--      </a-radio-group>-->
-<!--    </div>-->
-  </div>
-</template>
-
-<script>
-  import IndexChart from './IndexChart'
-  import IndexTask from "./IndexTask"
-  import IndexBdc from './IndexBdc'
-
-  export default {
-    name: "Analysis",
-    components: {
-      IndexChart,
-      IndexTask,
-      IndexBdc
-    },
-    data() {
-      return {
-        indexStyle:1
-      }
-    },
-    created() {
-
-    },
-    methods: {
-
-    }
-  }
-</script>
+<template>
+  <div class="home">
+    <div class="board">
+      <h1 style="text-align: left;margin-bottom: 6%;margin-top: 2%; font-size: 30px;margin-left: 2%;font-family: 'Microsoft YaHei'; color: #999e9f;font-weight: 500;">欢迎使用LG生产异常分析系统</h1>
+    </div>
+  </div>
+  <!-- <div>
+    <index-chart v-if="indexStyle==1"></index-chart>
+    <index-bdc v-if="indexStyle==2"></index-bdc>
+    <index-task v-if="indexStyle==3"></index-task>
+    <div style="width: 100%;text-align: right;margin-top: 20px">
+      请选择首页样式:
+      <a-radio-group v-model="indexStyle">
+        <a-radio :value="1">统计图表</a-radio>
+        <a-radio :value="2">统计图表2</a-radio>
+        <a-radio :value="3">任务表格</a-radio>
+      </a-radio-group>
+    </div>
+  </div> -->
+</template>
+
+<script>
+  import IndexChart from './IndexChart'
+  import IndexTask from "./IndexTask"
+  import IndexBdc from './IndexBdc'
+
+  export default {
+    name: "Analysis",
+    components: {
+      IndexChart,
+      IndexTask,
+      IndexBdc
+    },
+    data() {
+      return {
+        indexStyle:1
+      }
+    },
+    created() {
+
+    },
+    methods: {
+
+    }
+  }
+</script>
+<style >
+.home {
+  height: calc(100vh - 200px);
+  min-width: 1600px;
+  min-height: 900px;
+
+
+}
+.board {
+  background: #fff;
+  height: calc(100vh - 210px);
+  min-width: 1600px;
+  min-height: 880px;
+  display: flex;
+  padding: 10px;
+  flex-direction: column;
+}
+</style>

+ 213 - 213
src/views/user/Login.vue

@@ -1,214 +1,214 @@
-<template>
-  <div class="main">
-    <a-form-model class="user-layout-login" @keyup.enter.native="handleSubmit">
-      <a-tabs :activeKey="customActiveKey" :tabBarStyle="{ textAlign: 'center', borderBottom: 'unset' }"  @change="handleTabClick">
-        <a-tab-pane key="tab1" tab="账号密码登录">
-          <login-account ref="alogin" @validateFail="validateFail" @success="requestSuccess" @fail="requestFailed"></login-account>
-        </a-tab-pane>
-
-        <a-tab-pane key="tab2" tab="手机号登录">
-          <login-phone ref="plogin" @validateFail="validateFail" @success="requestSuccess" @fail="requestFailed"></login-phone>
-        </a-tab-pane>
-      </a-tabs>
-
-      <a-form-model-item>
-        <a-checkbox @change="handleRememberMeChange" default-checked>自动登录</a-checkbox>
-        <router-link :to="{ name: 'alteration'}" class="forge-password" style="float: right;">
-          忘记密码
-        </router-link>
-        <router-link :to="{ name: 'register'}" class="forge-password" style="float: right;margin-right: 10px" >
-          注册账户
-        </router-link>
-      </a-form-model-item>
-
-      <a-form-item style="margin-top:24px">
-        <a-button size="large"  type="primary"  htmlType="submit"  class="login-button"  :loading="loginBtn"  @click.stop.prevent="handleSubmit" :disabled="loginBtn">确定
-        </a-button>
-      </a-form-item>
-
-    </a-form-model>
-
-    <two-step-captcha v-if="requiredTwoStepCaptcha" :visible="stepCaptchaVisible" @success="stepCaptchaSuccess" @cancel="stepCaptchaCancel"></two-step-captcha>
-    <login-select-tenant ref="loginSelect" @success="loginSelectOk"></login-select-tenant>
-    <third-login ref="thirdLogin"></third-login>
-  </div>
-</template>
-
-<script>
-import Vue from 'vue'
-import { ACCESS_TOKEN, ENCRYPTED_STRING } from '@/store/mutation-types'
-import ThirdLogin from './third/ThirdLogin'
-import LoginSelectTenant from './LoginSelectTenant'
-import TwoStepCaptcha from '@/components/tools/TwoStepCaptcha'
-import { getEncryptedString } from '@/utils/encryption/aesEncrypt'
-import { timeFix } from '@/utils/util'
-
-import LoginAccount from './LoginAccount'
-import LoginPhone from './LoginPhone'
-
-export default {
-    components: {
-      LoginSelectTenant,
-      TwoStepCaptcha,
-      ThirdLogin,
-      LoginAccount,
-      LoginPhone
-    },
-    data () {
-      return {
-        customActiveKey: 'tab1',
-        rememberMe: true,
-        loginBtn: false,
-        requiredTwoStepCaptcha: false,
-        stepCaptchaVisible: false,
-        encryptedString:{
-          key:"",
-          iv:"",
-        },
-      }
-    },
-    created() {
-      Vue.ls.remove(ACCESS_TOKEN)
-      this.getRouterData();
-      this.rememberMe = true
-    },
-    methods:{
-      handleTabClick(key){
-        this.customActiveKey = key
-      },
-      handleRememberMeChange(e){
-        this.rememberMe = e.target.checked
-      },
-      /**跳转到登录页面的参数-账号获取*/
-      getRouterData(){
-        this.$nextTick(() => {
-          let temp = this.$route.params.username || this.$route.query.username || ''
-          if (temp) {
-            this.$refs.alogin.acceptUsername(temp)
-          }
-        })
-      },
-
-      //登录
-      handleSubmit () {
-        this.loginBtn = true;
-        if (this.customActiveKey === 'tab1') {
-          // 使用账户密码登录
-          this.$refs.alogin.handleLogin(this.rememberMe)
-        } else {
-          //手机号码登录
-          this.$refs.plogin.handleLogin(this.rememberMe)
-        }
-      },
-      // 校验失败
-      validateFail(){
-        this.loginBtn = false;
-      },
-      // 登录后台成功
-      requestSuccess(loginResult){
-        this.$refs.loginSelect.show(loginResult)
-      },
-      //登录后台失败
-      requestFailed (err) {
-        let description = ((err.response || {}).data || {}).message || err.message || "请求出现错误,请稍后再试"
-        this.$notification[ 'error' ]({
-          message: '登录失败',
-          description: description,
-          duration: 4,
-        });
-        //账户密码登录错误后更新验证码
-        if(this.customActiveKey === 'tab1' && description.indexOf('密码错误')>0){
-          this.$refs.alogin.handleChangeCheckCode()
-        }
-        this.loginBtn = false;
-      },
-      loginSelectOk(){
-        this.loginSuccess()
-      },
-      //登录成功
-      loginSuccess () {
-        this.$router.push({ path: "/dashboard/analysis" }).catch(()=>{
-          console.log('登录跳转首页出错,这个错误从哪里来的')
-        })
-        this.$notification.success({
-          message: '欢迎',
-          description: `${timeFix()},欢迎回来`,
-        });
-      },
-
-      stepCaptchaSuccess () {
-        this.loginSuccess()
-      },
-      stepCaptchaCancel () {
-        this.Logout().then(() => {
-          this.loginBtn = false
-          this.stepCaptchaVisible = false
-        })
-      },
-      //获取密码加密规则
-      getEncrypte(){
-        var encryptedString = Vue.ls.get(ENCRYPTED_STRING);
-        if(encryptedString == null){
-          getEncryptedString().then((data) => {
-            this.encryptedString = data
-          });
-        }else{
-          this.encryptedString = encryptedString;
-        }
-      }
-
-    }
-
-  }
-</script>
-<style lang="less" scoped>
-  .user-layout-login {
-    label {
-      font-size: 14px;
-    }
-  .getCaptcha {
-      display: block;
-      width: 100%;
-      height: 40px;
-    }
-
-  .forge-password {
-      font-size: 14px;
-    }
-
-    button.login-button {
-      padding: 0 15px;
-      font-size: 16px;
-      height: 40px;
-      width: 100%;
-    }
-
-  .user-login-other {
-      text-align: left;
-      margin-top: 24px;
-      line-height: 22px;
-
-    .item-icon {
-        font-size: 24px;
-        color: rgba(0,0,0,.2);
-        margin-left: 16px;
-        vertical-align: middle;
-        cursor: pointer;
-        transition: color .3s;
-
-      &:hover {
-          color: #1890ff;
-        }
-      }
-
-    .register {
-        float: right;
-      }
-    }
-  }
-</style>
-<style>
-  .valid-error .ant-select-selection__placeholder{
-    color: #f5222d;
-  }
+<template>
+  <div class="main">
+    <a-form-model class="user-layout-login" @keyup.enter.native="handleSubmit">
+      <a-tabs :activeKey="customActiveKey" :tabBarStyle="{ textAlign: 'center', borderBottom: 'unset' }"  @change="handleTabClick">
+        <a-tab-pane key="tab1" tab="账号密码登录">
+          <login-account ref="alogin" @validateFail="validateFail" @success="requestSuccess" @fail="requestFailed"></login-account>
+        </a-tab-pane>
+
+        <!-- <a-tab-pane key="tab2" tab="手机号登录">
+          <login-phone ref="plogin" @validateFail="validateFail" @success="requestSuccess" @fail="requestFailed"></login-phone>
+        </a-tab-pane> -->
+      </a-tabs>
+
+      <!-- <a-form-model-item>
+        <a-checkbox @change="handleRememberMeChange" default-checked>自动登录</a-checkbox>
+        <router-link :to="{ name: 'alteration'}" class="forge-password" style="float: right;">
+          忘记密码
+        </router-link>
+        <router-link :to="{ name: 'register'}" class="forge-password" style="float: right;margin-right: 10px" >
+          注册账户
+        </router-link>
+      </a-form-model-item> -->
+
+      <a-form-item style="margin-top:24px">
+        <a-button size="large"  type="primary"  htmlType="submit"  class="login-button"  :loading="loginBtn"  @click.stop.prevent="handleSubmit" :disabled="loginBtn">确定
+        </a-button>
+      </a-form-item>
+
+    </a-form-model>
+
+    <!-- <two-step-captcha v-if="requiredTwoStepCaptcha" :visible="stepCaptchaVisible" @success="stepCaptchaSuccess" @cancel="stepCaptchaCancel"></two-step-captcha> -->
+    <login-select-tenant ref="loginSelect" @success="loginSelectOk"></login-select-tenant>
+    <!-- <third-login ref="thirdLogin"></third-login> -->
+  </div>
+</template>
+
+<script>
+import Vue from 'vue'
+import { ACCESS_TOKEN, ENCRYPTED_STRING } from '@/store/mutation-types'
+import ThirdLogin from './third/ThirdLogin'
+import LoginSelectTenant from './LoginSelectTenant'
+import TwoStepCaptcha from '@/components/tools/TwoStepCaptcha'
+import { getEncryptedString } from '@/utils/encryption/aesEncrypt'
+import { timeFix } from '@/utils/util'
+
+import LoginAccount from './LoginAccount'
+import LoginPhone from './LoginPhone'
+
+export default {
+    components: {
+      LoginSelectTenant,
+      TwoStepCaptcha,
+      ThirdLogin,
+      LoginAccount,
+      LoginPhone
+    },
+    data () {
+      return {
+        customActiveKey: 'tab1',
+        rememberMe: true,
+        loginBtn: false,
+        requiredTwoStepCaptcha: false,
+        stepCaptchaVisible: false,
+        encryptedString:{
+          key:"",
+          iv:"",
+        },
+      }
+    },
+    created() {
+      Vue.ls.remove(ACCESS_TOKEN)
+      this.getRouterData();
+      this.rememberMe = true
+    },
+    methods:{
+      handleTabClick(key){
+        this.customActiveKey = key
+      },
+      handleRememberMeChange(e){
+        this.rememberMe = e.target.checked
+      },
+      /**跳转到登录页面的参数-账号获取*/
+      getRouterData(){
+        this.$nextTick(() => {
+          let temp = this.$route.params.username || this.$route.query.username || ''
+          if (temp) {
+            this.$refs.alogin.acceptUsername(temp)
+          }
+        })
+      },
+
+      //登录
+      handleSubmit () {
+        this.loginBtn = true;
+        if (this.customActiveKey === 'tab1') {
+          // 使用账户密码登录
+          this.$refs.alogin.handleLogin(this.rememberMe)
+        } else {
+          //手机号码登录
+          this.$refs.plogin.handleLogin(this.rememberMe)
+        }
+      },
+      // 校验失败
+      validateFail(){
+        this.loginBtn = false;
+      },
+      // 登录后台成功
+      requestSuccess(loginResult){
+        this.$refs.loginSelect.show(loginResult)
+      },
+      //登录后台失败
+      requestFailed (err) {
+        let description = ((err.response || {}).data || {}).message || err.message || "请求出现错误,请稍后再试"
+        this.$notification[ 'error' ]({
+          message: '登录失败',
+          description: description,
+          duration: 4,
+        });
+        //账户密码登录错误后更新验证码
+        if(this.customActiveKey === 'tab1' && description.indexOf('密码错误')>0){
+          this.$refs.alogin.handleChangeCheckCode()
+        }
+        this.loginBtn = false;
+      },
+      loginSelectOk(){
+        this.loginSuccess()
+      },
+      //登录成功
+      loginSuccess () {
+        this.$router.push({ path: "/dashboard/analysis" }).catch(()=>{
+          console.log('登录跳转首页出错,这个错误从哪里来的')
+        })
+        this.$notification.success({
+          message: '欢迎',
+          description: `${timeFix()},欢迎回来`,
+        });
+      },
+
+      stepCaptchaSuccess () {
+        this.loginSuccess()
+      },
+      stepCaptchaCancel () {
+        this.Logout().then(() => {
+          this.loginBtn = false
+          this.stepCaptchaVisible = false
+        })
+      },
+      //获取密码加密规则
+      getEncrypte(){
+        var encryptedString = Vue.ls.get(ENCRYPTED_STRING);
+        if(encryptedString == null){
+          getEncryptedString().then((data) => {
+            this.encryptedString = data
+          });
+        }else{
+          this.encryptedString = encryptedString;
+        }
+      }
+
+    }
+
+  }
+</script>
+<style lang="less" scoped>
+  .user-layout-login {
+    label {
+      font-size: 14px;
+    }
+  .getCaptcha {
+      display: block;
+      width: 100%;
+      height: 40px;
+    }
+
+  .forge-password {
+      font-size: 14px;
+    }
+
+    button.login-button {
+      padding: 0 15px;
+      font-size: 16px;
+      height: 40px;
+      width: 100%;
+    }
+
+  .user-login-other {
+      text-align: left;
+      margin-top: 24px;
+      line-height: 22px;
+
+    .item-icon {
+        font-size: 24px;
+        color: rgba(0,0,0,.2);
+        margin-left: 16px;
+        vertical-align: middle;
+        cursor: pointer;
+        transition: color .3s;
+
+      &:hover {
+          color: #1890ff;
+        }
+      }
+
+    .register {
+        float: right;
+      }
+    }
+  }
+</style>
+<style>
+  .valid-error .ant-select-selection__placeholder{
+    color: #f5222d;
+  }
 </style>