| <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>  |