|
|
<template> <div class="login" :style="'background-image:url(' + Background + ');'"> <div class="login-left-img" /> <el-form ref="loginForm" :model="loginForm" :rules="loginRules" label-position="left" label-width="0px" class="login-form" > <h3 class="login-title" /> <el-form-item prop="username"> <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="登录账号" > <i slot="prefix" class="iconfont icon-zhanghao login-icon" /> </el-input> </el-form-item> <el-form-item prop="password"> <el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="密码" @keyup.enter.native="handleLogin" > <i slot="prefix" class="iconfont icon-mima login-icon" /> </el-input> </el-form-item> <el-form-item class="login-code" prop="code"> <el-input v-model="loginForm.code" auto-complete="off" placeholder="验证码" @keyup.enter.native="handleLogin" > <i slot="prefix" class="iconfont icon-yanzhengma login-icon" /> </el-input> <div class="code-img"> <img :src="codeUrl" @click="getCode"> </div> </el-form-item> <el-button :loading="loading" size="medium" @click.native.prevent="handleLogin" > <span v-if="!loading">登 录</span> <span v-else>登 录 中...</span> </el-button> </el-form> <!-- 底部 --> <div v-if="$store.state.settings.showFooter" id="el-login-footer"> <div class="login-footer-link"> <a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">帮助</a> <span> | </span> <a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">隐私</a> <span> | </span> <a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">条款</a> </div> <span v-html="$store.state.settings.footerTxt" /> <!-- <span> ⋅ </span> <a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">{{ $store.state.settings.caseNumber }}</a> --> </div> </div> </template>
<script> import { encrypt } from '@/utils/rsaEncrypt' import Config from '@/settings' import { getCodeImg } from '@/api/login' import Cookies from 'js-cookie' import qs from 'qs' import Background from '@/assets/images/login/dl-bg.png' export default { name: 'Login', data() { return { Background: Background, codeUrl: '', cookiePass: '', loginForm: { username: '', password: '', 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, redirect: undefined } }, watch: { $route: { handler: function(route) { const data = route.query if (data && data.redirect) { this.redirect = data.redirect delete data.redirect if (JSON.stringify(data) !== '{}') { this.redirect = this.redirect + '&' + qs.stringify(data, { indices: false }) } } }, immediate: true } }, created() { // 获取验证码
this.getCode() // 获取用户名密码等Cookie
this.getCookie() // token 过期提示
this.point() }, methods: { getCode() { getCodeImg().then((res) => { this.codeUrl = res.img this.loginForm.uuid = res.uuid }) }, getCookie() { const username = Cookies.get('username') let password = Cookies.get('password') const rememberMe = Cookies.get('rememberMe') // 保存cookie里面的加密后的密码
this.cookiePass = password === undefined ? '' : password password = password === undefined ? this.loginForm.password : password this.loginForm = { username: username === undefined ? this.loginForm.username : username, password: password, rememberMe: rememberMe === undefined ? false : Boolean(rememberMe), code: '' } }, handleLogin() { this.$refs.loginForm.validate((valid) => { const user = { username: this.loginForm.username, password: this.loginForm.password, rememberMe: this.loginForm.rememberMe, code: this.loginForm.code, uuid: this.loginForm.uuid } if (user.password !== this.cookiePass) { user.password = encrypt(user.password) } if (valid) { this.loading = true if (user.rememberMe) { Cookies.set('username', user.username, { expires: Config.passCookieExpires }) Cookies.set('password', user.password, { expires: Config.passCookieExpires }) Cookies.set('rememberMe', user.rememberMe, { expires: Config.passCookieExpires }) } else { Cookies.remove('username') Cookies.remove('password') Cookies.remove('rememberMe') } this.$store .dispatch('Login', user) .then((res) => { this.loading = false if (res.code === 500) { this.$message({ message: res.message, type: 'warning', duration: 5000, offset: 8 }) this.getCode() } else { this.$router.push({ path: this.redirect || '/' }) } }).catch(res => { this.loading = false this.getCode() }) } else { console.log('error submit!!') return false } }) }, point() { const point = Cookies.get('point') !== undefined if (point) { this.$message({ message: '当前登录状态已过期,请重新登录!', type: 'warning', duration: 5000, offset: 8 }) Cookies.remove('point') } } } } </script>
<style rel="stylesheet/scss" lang="scss"> .login { display: flex; justify-content: center; align-items: center; width: 100%; height: 100vh; position: relative; background-size: cover; }
// 登录界面左边bg
.login-left-img{ position: absolute; top: 19.16%; left: 10.625%; width: 48%; height: 67.8%; background: url('~@/assets/images/login/dl-bgt.png') no-repeat; background-size: contain; }
// 登录框内标题
.login-title { width: 272px; height: 49px; margin: 0 auto 43px auto; background: url('~@/assets/images/login/dl-logo.png') no-repeat; background-size: contain; }
// 登录表单
.login-form { width: 26%; padding: 5% 2% 5.8% 2%; position: absolute; left: calc(100vw - 44%); top: 50%; transform: translateY(-50%); background: #fff; box-shadow: 0px 10px 25px -4px rgba(14,44,119,0.1); border-radius: 10px; .el-form-item { width: 100% !important; height: 48px; margin-bottom: 24px; .el-form-item__content{ height: 100%; .el-input{ font-size: 14px; height: 100%; input{ height: 100%; padding: 0 20px 0 45px; border-radius: 3px; border-color: #E6E8ED; } } } } .login-icon{ margin-left: 10px; line-height: 48px; color: #545B65; } // 图形验证码
.login-code { .el-form-item__content{ display: flex; justify-content: space-between; .el-input{ width: 60%; } .code-img{ flex: 1; height: 43px; margin-left: 20px; display: inline-block; img { width: 100%; height: 100% !important; cursor: pointer; } } } } // 登录btn
.el-button { width: 100% !important; height: 52px; margin-top: 36px; font-size: 20px; background: #0348F3; border-radius: 5px; color: #ffffff; border: none; } }
// 底部-备案
#el-login-footer{ position: absolute; left: 50%; bottom: 3%; transform: translateX(-50%); font-size: 12px; color: #A6ADB6; text-align: center; .login-footer-link{ margin-bottom: 10px; span{ display: inline-block; margin: 0 6px; color: #CBD5E6; } } } </style>
|