login 登录

qianlishi 3 years ago
parent dc4cced74f
commit c98ddf8de6

@ -49,7 +49,7 @@ service.interceptors.response.use(
type: 'error', type: 'error',
duration: 5 * 1000 duration: 5 * 1000
}) })
return Promise.reject('error') return response.data
} else { } else {
return response.data return response.data
} }

@ -8,20 +8,19 @@
<div class="login_container"> <div class="login_container">
<!-- 顶部logo --> <!-- 顶部logo -->
<div class="login_title"> <div class="login_title">
<img src="@/assets/images/home-logo.png" <img src="@/assets/images/home-logo.png" alt="logo" />
alt="logo" />
</div> </div>
<div class="login_contant"> <div class="login_contant">
<img src="@/assets/images/login.png" <img src="@/assets/images/login.png" alt="image" class="login_img" />
alt="image" <el-form
class="login_img" /> ref="loginForm"
<el-form ref="loginForm" :model="loginForm"
:model="loginForm" :rules="loginRules"
:rules="loginRules" class="login_form"
class="login_form" autocomplete="on"
autocomplete="on" label-position="left"
label-position="left" @keyup.enter.native="handleLogin"
@keyup.enter.native="handleLogin"> >
<div class="title_container"> <div class="title_container">
<h3 class="title"> <h3 class="title">
HELLO, HELLO,
@ -37,41 +36,48 @@
<div> <div>
<p>用户名</p> <p>用户名</p>
<el-form-item prop="loginName"> <el-form-item prop="loginName">
<el-input ref="loginName" <el-input
v-model="loginForm.loginName" ref="loginName"
placeholder="用户名" v-model="loginForm.loginName"
name="loginName" placeholder="用户名"
type="text" name="loginName"
tabindex="1" type="text"
autocomplete="on" tabindex="1"
@focus="setTop('0')" autocomplete="on"
@change="getPsw" /> @focus="setTop('0')"
@change="getPsw"
/>
</el-form-item> </el-form-item>
</div> </div>
<div> <div>
<p>密码</p> <p>密码</p>
<input name="password" <input
type="password" name="password"
autocomplete="off" type="password"
class="take" /> autocomplete="off"
<el-tooltip v-model="capsTooltip" class="take"
content="Caps lock is On" />
placement="right" <el-tooltip
manual> v-model="capsTooltip"
content="Caps lock is On"
placement="right"
manual
>
<el-form-item prop="password"> <el-form-item prop="password">
<el-input :key="passwordType" <el-input
ref="password" :key="passwordType"
v-model="loginForm.password" ref="password"
:type="passwordType" v-model="loginForm.password"
placeholder="用户密码" :type="passwordType"
name="password" placeholder="用户密码"
tabindex="2" name="password"
autocomplete="on" tabindex="2"
@blur="capsTooltip = false" autocomplete="on"
@focus="setTop('50')" @blur="capsTooltip = false"
@keyup.native="checkCapslock" /> @focus="setTop('50')"
<span class="show_pwd" @keyup.native="checkCapslock"
@click="showPwd"> />
<span class="show_pwd" @click="showPwd">
<i class="el-icon-view" /> <i class="el-icon-view" />
</span> </span>
</el-form-item> </el-form-item>
@ -80,180 +86,181 @@
</div> </div>
<div class="control"> <div class="control">
<div class="remember"> <div class="remember">
<input v-model="rememberPsw" <input v-model="rememberPsw" type="checkbox" />
type="checkbox" />
<p>记住密码</p> <p>记住密码</p>
</div> </div>
</div> </div>
<el-button :loading="loading" <el-button
type="primary" :loading="loading"
class="login_btn" type="primary"
@click.native.prevent="handleLogin">登录</el-button> class="login_btn"
@click.native.prevent="handleLogin"
>登录</el-button
>
</el-form> </el-form>
</div> </div>
<!-- 验证码 --> <!-- 验证码 -->
<Verify v-if="needCaptcha" <Verify
ref="verify" v-if="needCaptcha"
:captcha-type="'blockPuzzle'" ref="verify"
:img-size="{ width: '400px', height: '200px' }" :captcha-type="'blockPuzzle'"
@success="verifylogin" /> :img-size="{ width: '400px', height: '200px' }"
@success="verifylogin"
/>
</div> </div>
</template> </template>
<script> <script>
import Verify from '@/components/verifition/Verify' import Verify from "@/components/verifition/Verify";
import cookies from 'js-cookie' import cookies from "js-cookie";
import { Decrypt, Encrypt } from '@/utils/index' import { Decrypt, Encrypt } from "@/utils/index";
import { login } from '@/api/login' import { login } from "@/api/login";
import { transPsw } from '@/utils/encrypted' import { transPsw } from "@/utils/encrypted";
import { setToken, setAccessUser } from "@/utils/auth"; import { setToken, setAccessUser } from "@/utils/auth";
export default { export default {
name: 'Login', name: "Login",
components: { components: {
Verify, Verify
}, },
data () { data() {
return { return {
activeTop: '-50%', // activeTop: "-50%", //
rememberPsw: false, // rememberPsw: false, //
loginForm: { loginForm: {
loginName: 'admin', loginName: "admin",
password: '123456', password: "123456",
verifyCode: '', verifyCode: ""
}, // }, //
loginRules: { loginRules: {
loginName: [{ required: true, message: '用户名必填', trigger: 'blur' }], loginName: [{ required: true, message: "用户名必填", trigger: "blur" }],
password: [ password: [{ required: true, message: "用户密码必填", trigger: "blur" }]
{ required: true, message: '用户密码必填', trigger: 'blur' },
],
}, // }, //
passwordType: 'password', // passwordType: "password", //
capsTooltip: false, // capsTooltip: false, //
loading: false, // loding loading: false, // loding
redirect: undefined, // redirect: undefined, //
otherQuery: {}, // otherQuery: {}, //
needCaptcha: false, needCaptcha: false
} };
}, },
watch: { watch: {
$route: { $route: {
// from // from
handler: function (route) { handler: function(route) {
const query = route.query const query = route.query;
if (query) { if (query) {
this.redirect = query.redirect this.redirect = query.redirect;
this.otherQuery = this.getOtherQuery(query) this.otherQuery = this.getOtherQuery(query);
} }
}, },
immediate: true, immediate: true
}, }
}, },
mounted () { mounted() {
// //
if (this.loginForm.loginName === '') { if (this.loginForm.loginName === "") {
this.$refs.loginName.focus() this.$refs.loginName.focus();
} else if (this.loginForm.password === '') { } else if (this.loginForm.password === "") {
this.$refs.password.focus() this.$refs.password.focus();
} }
}, },
methods: { methods: {
// //
getPsw () { getPsw() {
const cookVal = cookies.get(`u_${this.loginForm.loginName}`) const cookVal = cookies.get(`u_${this.loginForm.loginName}`);
this.loginForm.password = cookVal && Decrypt(cookVal) this.loginForm.password = cookVal && Decrypt(cookVal);
}, },
// top // top
setTop (val) { setTop(val) {
this.activeTop = val this.activeTop = val;
}, },
// //
checkCapslock (e) { checkCapslock(e) {
const { key } = e const { key } = e;
this.capsTooltip = key && key.length === 1 && key >= 'A' && key <= 'Z' this.capsTooltip = key && key.length === 1 && key >= "A" && key <= "Z";
}, },
// //
showPwd () { showPwd() {
if (this.passwordType === 'password') { if (this.passwordType === "password") {
this.passwordType = '' this.passwordType = "";
} else { } else {
this.passwordType = 'password' this.passwordType = "password";
} }
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.password.focus() this.$refs.password.focus();
}) });
}, },
// //
useVerify () { useVerify() {
this.$refs.loginForm.validate((valid) => { this.$refs.loginForm.validate(valid => {
if (valid) { if (valid) {
this.$refs.verify.show() this.$refs.verify.show();
} else { } else {
return false return false;
} }
}) });
}, },
// //
verifylogin (params) { verifylogin(params) {
this.loginForm.verifyCode = params.captchaVerification this.loginForm.verifyCode = params.captchaVerification;
if (this.loginForm.verifyCode) { if (this.loginForm.verifyCode) {
this.loginApi() this.loginApi();
} }
}, },
// //
handleLogin () { handleLogin() {
this.$refs.loginForm.validate((valid) => { this.$refs.loginForm.validate(valid => {
if (valid) { if (valid) {
this.loading = true this.loading = true;
// //
if (this.needCaptcha) { if (this.needCaptcha) {
this.useVerify() this.useVerify();
return return;
} }
this.loginApi() this.loginApi();
} else { } else {
return false return false;
} }
}) });
}, },
async loginApi () { async loginApi() {
let obj = { let obj = {
loginName: this.loginForm.loginName, loginName: this.loginForm.loginName,
password: transPsw(this.loginForm.password), password: transPsw(this.loginForm.password),
verifyCode: '', verifyCode: ""
} };
const { code, data } = await login(obj) const { code, data } = await login(obj);
console.log(data) this.loading = false;
this.loading = false if (code != "200") return;
if (code != '200') return setToken(data.token);
setToken(data.token) setAccessUser(data);
setAccessUser(data)
// cookie,15 // cookie,15
this.rememberPsw && this.rememberPsw &&
cookies.set( cookies.set(
`u_${this.loginForm.loginName}`, `u_${this.loginForm.loginName}`,
Encrypt(this.loginForm.password), Encrypt(this.loginForm.password),
{ expires: 15 } { expires: 15 }
) );
if (data && data.captcha) { if (data && data.captcha) {
this.needCaptcha = true this.needCaptcha = true;
} else { } else {
this.needCaptcha = false this.needCaptcha = false;
this.$router.push({ this.$router.push({
path: this.redirect || '/index', path: this.redirect || "/index",
query: this.otherQuery, query: this.otherQuery
}) });
} }
}, },
getOtherQuery (query) { getOtherQuery(query) {
return Object.keys(query).reduce((acc, cur) => { return Object.keys(query).reduce((acc, cur) => {
if (cur !== 'redirect') { if (cur !== "redirect") {
acc[cur] = query[cur] acc[cur] = query[cur];
} }
return acc return acc;
}, {}) }, {});
}, }
}, }
} };
</script> </script>
<style lang="scss"> <style lang="scss">

Loading…
Cancel
Save