<template>
|
<div id="background">
|
<!-- 产品名称 -->
|
<div class="text">
|
<div class="logo">
|
<img :src="imgUrl" alt="" />
|
</div>
|
<div class="text-r">
|
<h2 class="title font-extra-large">遂昌县智慧执法平台</h2>
|
<div class="title font-title-medium">
|
Suichang intelligent law enforcement platform
|
</div>
|
</div>
|
</div>
|
<el-card class="login-form-layout">
|
<!-- 表单 -->
|
<el-form
|
autoComplete="on"
|
:model="loginForm"
|
:rules="loginRules"
|
ref="loginForm"
|
label-position="left"
|
>
|
<!-- title -->
|
<h2 class="login-title">用户登录 / USER LOGIN</h2>
|
<el-form-item prop="username">
|
<!-- 用户名输入框 -->
|
<el-input
|
name="username"
|
type="text"
|
v-model="loginForm.username"
|
autoComplete="on"
|
placeholder="请输入用户名称"
|
>
|
<span slot="prefix">
|
<svg-icon icon-class="user" class="color-main"></svg-icon>
|
</span>
|
</el-input>
|
</el-form-item>
|
<el-form-item prop="password">
|
<!-- 密码输入框 -->
|
<el-input
|
name="password"
|
:type="pwdType ? 'text' : 'password'"
|
@keyup.enter.native="handleLogin"
|
v-model="loginForm.password"
|
autoComplete="on"
|
placeholder="请输入登录密码"
|
>
|
<!-- 输入框前icon -->
|
<span slot="prefix">
|
<svg-icon icon-class="password" class="color"></svg-icon>
|
</span>
|
<!-- 输入框后icon -->
|
<span slot="suffix" @click="showPwd">
|
<svg-icon
|
:icon-class="pwdType ? 'yanjing-zhengyan' : 'yanjing-biyan'"
|
class="pointer"
|
></svg-icon>
|
</span>
|
</el-input>
|
</el-form-item>
|
<el-form-item>
|
<el-input
|
v-model="loginForm.validCode"
|
placeholder="验证码"
|
></el-input>
|
<SIdentify @input="createValidCode"></SIdentify>
|
</el-form-item>
|
<!-- 表单提交按钮 -->
|
<el-form-item style="margin-bottom: 60px; text-align: center">
|
<el-button
|
style="width: 100%"
|
type="primary"
|
:loading="loading"
|
@click.native.prevent="handleLogin"
|
>
|
登录
|
</el-button>
|
</el-form-item>
|
</el-form>
|
</el-card>
|
</div>
|
</template>
|
|
<script>
|
import { isvalidUsername } from "@/utils/validate";
|
import { createNamespacedHelpers } from "vuex";
|
import users from "@/api/users";
|
import { Decrypt, Encrypt } from "@/utils/cryptojs";
|
import leafletMapVue from "../systemSetting/device/grid/components/components/leafletMap.vue";
|
// 引入登录验证组件
|
import SIdentify from "./SIdentify";
|
const { mapActions } = createNamespacedHelpers("users");
|
export default {
|
name: "login",
|
components: { SIdentify },
|
data() {
|
const validateUsername = (rule, value, callback) => {
|
if (!isvalidUsername(value)) {
|
callback(new Error("请填写用户名称"));
|
} else {
|
callback();
|
}
|
};
|
const validatePass = (rule, value, callback) => {
|
if (!value) {
|
callback(new Error("请填写登录密码"));
|
} else {
|
callback();
|
}
|
};
|
return {
|
loginForm: {
|
username: "",
|
password: "",
|
},
|
imgUrl: "",
|
loginRules: {
|
username: [
|
{ required: true, trigger: "blur", validator: validateUsername },
|
],
|
password: [
|
{ required: true, trigger: "blur", validator: validatePass },
|
],
|
},
|
loading: false,
|
pwdType: false,
|
};
|
},
|
created() {
|
const pic = JSON.parse(sessionStorage.getItem("pic"));
|
if (pic) {
|
this.imgUrl = pic.loginPageIconUrl;
|
} else {
|
this.$axios({
|
method: "get",
|
url: "sccg/system/portal/logo/search",
|
}).then((res) => {
|
this.imgUrl = res.data.loginPageIconUrl;
|
});
|
}
|
},
|
methods: {
|
showPwd() {
|
this.pwdType = !this.pwdType;
|
},
|
...mapActions(["login"]),
|
handleLogin() {
|
debugger;
|
// 登录函数中验证验证码是否正确:统一转换为小写
|
if (this.loginForm.validCode.toLowerCase() !== this.validCode.toLowerCase()) {
|
this.$message.error("验证码错误");
|
return;
|
}
|
let { username, password } = this.loginForm;
|
const that = this;
|
|
password = Encrypt(password);
|
this.$axios
|
.post("sccg/admin/login", {
|
password,
|
username,
|
})
|
.then(function (response) {
|
if (response.code === 200) {
|
// 设置toke时间
|
// 保存token
|
sessionStorage.setItem("token", response.data.token);
|
// 保存token
|
sessionStorage.setItem("tokenHead", response.data.tokenHead);
|
// 保存用户登录名
|
sessionStorage.setItem("name", username);
|
// 跳转到首页
|
that.$router.push("/home");
|
} else {
|
that.$refs.loginForm.validate((valid) => {
|
if (valid) {
|
that.$message({
|
type: "warning",
|
message: response.message,
|
});
|
}
|
});
|
}
|
})
|
.catch(function (error) {});
|
},
|
createValidCode(data) {
|
this.validCode = data;
|
},
|
},
|
};
|
</script>
|
|
<style lang="scss" scoped>
|
.color {
|
color: red;
|
}
|
|
#background {
|
width: 100vw;
|
height: 100vh;
|
background: url("@/assets/imgs/login/bk.png");
|
background-size: cover;
|
position: relative;
|
display: flex;
|
min-width: 800px;
|
}
|
|
.login-form-layout {
|
position: absolute;
|
top: 20%;
|
right: 5%;
|
width: 360px;
|
&:deep(.el-input__inner) {
|
background-color: #fff !important;
|
border: 1px solid #dcdfe6 !important;
|
}
|
}
|
|
.text {
|
align-self: flex-start;
|
position: absolute;
|
top: 20%;
|
left: 5%;
|
display: flex;
|
width: 420px;
|
justify-content: space-between;
|
|
.logo > img {
|
width: 75px;
|
height: 75px;
|
border-radius: 4px;
|
}
|
|
.text-r {
|
margin-left: 15px;
|
|
.title {
|
color: white;
|
}
|
|
.font-title-medium {
|
margin-top: -10px;
|
}
|
}
|
}
|
|
.login-title {
|
text-align: left;
|
font-size: 1.2rem;
|
margin: 40px 0;
|
color: #ccc;
|
}
|
</style>
|