<template>  
 | 
  <div class="wrap" :style="{  
 | 
    'background': `url(${$store.state.VUE_APP_CONFIG.BG_IMAGE})`,  
 | 
    'background-repeat': 'no-repeat',  
 | 
    'background-size': 'cover',  
 | 
    'background-clip': 'content-box',  
 | 
    'background-position': 'center',  
 | 
    }"  
 | 
  >  
 | 
    <div class="introduce">  
 | 
      <div v-if="$store.state.VUE_APP_CONFIG.LOGO">  
 | 
        <img :src="$store.state.VUE_APP_CONFIG.LOGO" alt="">  
 | 
      </div>  
 | 
      <h2>{{ $store.state.VUE_APP_CONFIG.COMPANY_NAME }}</h2>  
 | 
        
 | 
    </div>  
 | 
    <div class="login">  
 | 
      <h1>系统登录 / LOGIN IN</h1>  
 | 
      <h3>{{test}}</h3>  
 | 
      <div class="info-input">  
 | 
        <!-- <el-input v-if="$store.state.VUE_APP_CONFIG.COMPANY_INPUT" v-model="companyId" placeholder="公司id" prefix-icon="el-icon-user-solid" maxlength="50" v-trim/> -->  
 | 
        <el-input v-model="username" placeholder="请输入用户名" prefix-icon="el-icon-user-solid" maxlength="50" v-trim/>  
 | 
        <div style="height: 15px;"></div>  
 | 
        <el-input v-model="password" placeholder="请输入密码" type="password" prefix-icon="eva-icon-password" maxlength="30" show-password/>  
 | 
        <div class="captcha-input">  
 | 
          <el-input v-model="captcha.value" placeholder="图片验证码" prefix-icon="eva-icon-shield" maxlength="4" @keypress.enter.native="login"/>  
 | 
          <img v-if="!captcha.loading" :src="captcha.uri" @click="refreshCaptcha">  
 | 
          <span v-else><i class="el-icon-loading"></i></span>  
 | 
        </div>  
 | 
      </div>  
 | 
      <el-button :loading="loading" @click="login">登  录</el-button>  
 | 
    </div>  
 | 
  </div>  
 | 
</template>  
 | 
  
 | 
<script type="text/javascript">  
 | 
import { mapMutations } from 'vuex'  
 | 
import { getCaptcha, loginByPassword } from '@/api/system/common'  
 | 
  
 | 
export default {  
 | 
  name: 'Login',  
 | 
    
 | 
  data () {  
 | 
    return {  
 | 
      test:'',  
 | 
      loading: false,  
 | 
      username: '',  
 | 
      password: '',  
 | 
      companyId: 8,  
 | 
      // 验证码  
 | 
      captcha: {  
 | 
        loading: false,  
 | 
        value: '',  
 | 
        uuid: '',  
 | 
        uri: ''  
 | 
      }  
 | 
    }  
 | 
  },  
 | 
  created () {  
 | 
    this.refreshCaptcha()  
 | 
    // this.companyId = this.$route.params.companyId || this.$store.state.VUE_APP_CONFIG.COMPANY_ID  
 | 
    // console.log(this.companyId);  
 | 
  },  
 | 
  methods: {  
 | 
    ...mapMutations(['setUserInfo']),  
 | 
    /**  
 | 
     * 登录  
 | 
     */  
 | 
    login () {  
 | 
      if (this.loading) {  
 | 
        return  
 | 
      }  
 | 
      if (!this.__check()) {  
 | 
        return  
 | 
      }  
 | 
      this.loading = true  
 | 
      loginByPassword({  
 | 
        username: this.username.trim(),  
 | 
        password: this.password,  
 | 
        code: this.captcha.value.trim(),  
 | 
        companyId: this.companyId,  
 | 
        uuid: this.captcha.uuid  
 | 
      })  
 | 
        .then(() => {  
 | 
          window.location.href = process.env.VUE_APP_CONTEXT_PATH  
 | 
        })  
 | 
        .catch(e => {  
 | 
          this.refreshCaptcha()  
 | 
          this.$tip.apiFailed(e)  
 | 
        })  
 | 
        .finally(() => {  
 | 
          this.loading = false  
 | 
        })  
 | 
    },  
 | 
    /**  
 | 
     * 刷新验证码  
 | 
     */  
 | 
    refreshCaptcha () {  
 | 
      this.captcha.loading = true  
 | 
      getCaptcha()  
 | 
        .then(data => {  
 | 
          this.captcha.uri = data.image  
 | 
          this.captcha.uuid = data.uuid  
 | 
        })  
 | 
        .catch(e => {  
 | 
          this.$tip.apiFailed(e)  
 | 
        })  
 | 
        .finally(() => {  
 | 
          setTimeout(() => {  
 | 
            this.captcha.loading = false  
 | 
          }, 150)  
 | 
        })  
 | 
    },  
 | 
    /**  
 | 
     * 登录前验证  
 | 
     *  
 | 
     * @returns {boolean}  
 | 
     * @private  
 | 
     */  
 | 
    __check () {  
 | 
      if (this.username.trim() === '') {  
 | 
        this.$tip.error('请输入用户名')  
 | 
        return false  
 | 
      }  
 | 
      if (this.password === '') {  
 | 
        this.$tip.error('请输入密码')  
 | 
        return false  
 | 
      }  
 | 
      if (this.captcha.value.trim() === '') {  
 | 
        this.$tip.error('请输入图片验证码')  
 | 
        return false  
 | 
      }  
 | 
      return true  
 | 
    },  
 | 
      
 | 
  },  
 | 
    
 | 
    
 | 
}  
 | 
</script>  
 | 
  
 | 
<style scoped lang="scss">  
 | 
@import "@/assets/style/variables.scss";  
 | 
$input-gap: 30px;  
 | 
.wrap {  
 | 
  display: flex;  
 | 
  width: 100%;  
 | 
  height: 100vh;  
 | 
  background-repeat: no-repeat;  
 | 
  background-size: cover;  
 | 
  background-clip: content-box;  
 | 
  background-position: center;  
 | 
  // 左边介绍  
 | 
  .introduce {  
 | 
    // padding-left: 10%;  
 | 
    position: relative;  
 | 
    width: 100%;  
 | 
    height: 100%;  
 | 
    box-sizing: border-box;  
 | 
    color: #fff;  
 | 
    background: rgba(0, 0, 0, 0.4);  
 | 
    display: flex;  
 | 
    flex-direction: column;  
 | 
    justify-content: center;  
 | 
    div {  
 | 
      position: absolute;  
 | 
      top: 60px;  
 | 
      left: 60px;  
 | 
      width: 300px;  
 | 
      height: 60px;  
 | 
      img {  
 | 
        max-width: 100%;  
 | 
        // margin: auto;  
 | 
        height: 100%;  
 | 
      }  
 | 
    }  
 | 
    h2 {  
 | 
      align-items: center;  
 | 
      padding-left: 60px;  
 | 
      font-size:45px;  
 | 
      font-style: italic;  
 | 
      font-weight: 900;  
 | 
      margin-top: 50px;  
 | 
    }  
 | 
    // h3 {  
 | 
    //   font-size: 49px;  
 | 
    //   font-weight: 300;  
 | 
    //   margin: 25px 0;  
 | 
    // }  
 | 
  }  
 | 
  // 右边登录  
 | 
  .login {  
 | 
    height: 100%;  
 | 
    width: 38%;  
 | 
    max-width: 560px;  
 | 
    min-width: 460px;  
 | 
    flex-shrink: 0;  
 | 
    text-align: center;  
 | 
    background: #fff;  
 | 
    padding: 0 80px;  
 | 
    display: flex;  
 | 
    flex-direction: column;  
 | 
    justify-content: center;  
 | 
    box-sizing: border-box;  
 | 
    h1 {  
 | 
      font-size: 28px;  
 | 
      font-weight: 500;  
 | 
    }  
 | 
    .info-input {  
 | 
      margin-top: $input-gap;  
 | 
      margin-bottom: 60px;  
 | 
      ::v-deep .el-input {  
 | 
        margin-top: 30px;  
 | 
        .el-input__inner {  
 | 
          // height: 50px;  
 | 
          background: #F9F9F9;  
 | 
          border: 1px solid transparent;  
 | 
          &:focus {  
 | 
            border: 1px solid $primary-color;  
 | 
          }  
 | 
        }  
 | 
      }  
 | 
    }  
 | 
    // 验证码输入  
 | 
    .captcha-input {  
 | 
      display: flex;  
 | 
      margin-top: $input-gap;  
 | 
      height: 30px;  
 | 
      .el-input {  
 | 
        width: 100%;  
 | 
        margin-top: 0;  
 | 
      }  
 | 
      span, img {  
 | 
        width: 40%;  
 | 
        height: 100%;  
 | 
        flex-shrink: 0;  
 | 
        margin-left: 16px;  
 | 
      }  
 | 
      span {  
 | 
        display: flex;  
 | 
        align-items: center;  
 | 
        justify-content: center;  
 | 
        background: #f7f7f7;  
 | 
        border-radius: 8px;  
 | 
      }  
 | 
    }  
 | 
    .el-button {  
 | 
      height: 50px;  
 | 
      width: 100%;  
 | 
      color: #fff;  
 | 
      font-size: 16px;  
 | 
      background: linear-gradient(130deg, $primary-title-start-color 0%, $icon-background-color 100%);  
 | 
    }  
 | 
  }  
 | 
}  
 | 
</style>  
 |