<template> <div class="login" :style="'background-image:url(' + Background + ');'"> <div class="headder"> <h2>隧道监测系统</h2> <!-- <h4>ONLINE MONITORING SYSTEM FOR TAILINGS POND DATA</h4> --> </div> <div class="logo-place"> <div class="logo-title">登录窗口</div> <!-- <h3 class="subtitle">欢迎登录后台系统</h3> --> <div class="ctn-place"> <div class="inbox-range"> <div class="ctn-fix"> <el-form ref="loginForm" :model="loginForm" :rules="loginRules" label-position="left" label-width="0px" class="login-form" > <el-form-item prop="username"> <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号" > <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-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" > <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> </el-input> </el-form-item> <el-form-item prop="code"> <el-input v-model="loginForm.code" auto-complete="off" placeholder="验证码" style="width: 63%" @keyup.enter.native="handleLogin" > <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" /> </el-input> <div class="login-code"> <img :src="codeUrl" @click="getCode" /> </div> </el-form-item> <el-form-item style="width: 100%"> <el-button :loading="loading" size="medium" type="primary" style="width: 100%" @click.native.prevent="handleLogin" > <span v-if="!loading">登 录</span> <span v-else>登 录 中...</span> </el-button> </el-form-item> </el-form> </div> </div> </div> </div> <!-- 底部 --> <!-- <div class="el-login-footer"> <span style="color: #eee; margin-top: 10px" >技术支持:威海晶合数字矿山技术有限公司</span > </div> --> </div> </template> <script> import { getCodeImg } from "@/api/login"; import Cookies from "js-cookie"; import { encrypt, decrypt } from "@/utils/jsencrypt"; import Background from "@/assets/images/login_bg.png"; export default { name: "Login", data() { return { Background: Background, codeUrl: "", 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, // 验证码开关 captchaEnabled: true, // 注册开关 register: false, redirect: undefined, }; }, watch: { $route: { handler: function (route) { this.redirect = route.query && route.query.redirect; }, immediate: true, }, }, created() { document.cookie=`Admin-Token=${new URLSearchParams(window.location.search).get('Admin')}`; this.getCode(); this.getCookie(); }, methods: { getCode() { getCodeImg().then((res) => { console.log(res); this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled; if (this.captchaEnabled) { this.codeUrl = "data:image/gif;base64," + res.img; this.loginForm.uuid = res.uuid; } }); }, getCookie() { const username = Cookies.get("username"); const password = Cookies.get("password"); const rememberMe = Cookies.get("rememberMe"); this.loginForm = { username: username === undefined ? this.loginForm.username : username, password: password === undefined ? this.loginForm.password : decrypt(password), rememberMe: rememberMe === undefined ? false : Boolean(rememberMe), }; }, handleLogin() { this.$refs.loginForm.validate((valid) => { if (valid) { this.loading = true; if (this.loginForm.rememberMe) { Cookies.set("username", this.loginForm.username, { expires: 30 }); Cookies.set("password", encrypt(this.loginForm.password), { expires: 30, }); Cookies.set("rememberMe", this.loginForm.rememberMe, { expires: 30, }); } else { Cookies.remove("username"); Cookies.remove("password"); Cookies.remove("rememberMe"); } this.$store .dispatch("Login", this.loginForm) .then(() => { this.$router.push({ path: this.redirect || "/" }).catch(() => {}); }) .catch(() => { this.loading = false; if (this.captchaEnabled) { this.getCode(); } }); } }); }, }, }; </script> <style rel="stylesheet/scss" lang="scss" scope> .login { display: flex; justify-content: center; align-items: center; flex-direction: column; height: 100%; background-size: cover; position: relative; .headder { margin-bottom: 48px; text-align: center; h2, h4 { margin: 0; padding: 0; line-height: 1; background-image: -webkit-linear-gradient(top, #fff, #a2deff, #23a5f9); -webkit-background-clip: text; -webkit-text-fill-color: transparent; font-weight: bold; } h2 { font-size: 66px; letter-spacing: 6px; } h4 { margin-top: 2px; font-size: 28.5px; } } .logo-place { position: relative; width: 968px; height: 556px; /* margin:2.01rem auto 0; */ background: no-repeat top center url("~@/assets/images/login_adorn1.png"); background-size: 100% 100%; } .ctn-place { position: absolute; top: 161px; right: 6px; height: auto; width: 479px; flex: 1; display: flex; .inbox-range { flex: 1; .ctn-fix { width: 380px; margin: 0 auto; } } .login-form { .el-input { height: 58px; min-height: 38px; input { height: 58px; padding-left: 40px; background-color: #1042a1 !important; color: #fff; border-color: #085fa2; } } .input-icon { height: 58px; width: 24px; margin-left: 2px; } .el-form-item__content { line-height: 58px; } .el-form-item { margin-bottom: 25px; &:last-child { margin-bottom: 0; } .el-select { width: 100%; } } } } .logo-title { position: absolute; top: 15px; left: 0; height: auto; width: 100%; text-align: center; cursor: default; font-size: 26px; line-height: 1; letter-spacing: 10px; color: rgb(56, 230, 255); text-shadow: 0px 0px 2px rgb(56 230 255); } .subtitle { position: absolute; top: 91px; left: 0; height: auto; width: 100%; text-align: center; cursor: default; font-size: 34px; line-height: 1; letter-spacing: 10px; color: #b1edf8; } } .login-code { width: 33%; display: inline-block; height: 38px; float: right; img { cursor: pointer; vertical-align: middle; } } </style>