登陆页面背景图片

This commit is contained in:
2025-09-27 15:45:56 +08:00
parent 466d3a14b6
commit a4ae820e98
7 changed files with 168 additions and 69 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1021 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 509 KiB

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="login"> <div class="login">
<img :src="loginBg" alt="" srcset="" class="login-bg" />
<el-form <el-form
ref="loginForm" ref="loginForm"
:model="loginForm" :model="loginForm"
@ -93,12 +94,19 @@
import { getCodeImg } from "@/api/login"; import { getCodeImg } from "@/api/login";
import Cookies from "js-cookie"; import Cookies from "js-cookie";
import { encrypt, decrypt } from "@/utils/jsencrypt"; import { encrypt, decrypt } from "@/utils/jsencrypt";
import intervalUpdate from "@/mixins/ems/intervalUpdate";
export default { export default {
name: "Login", name: "Login",
mixins: [intervalUpdate],
computed: {
loginBg() {
return require(`./../assets/images/ems/loginBg/${this.bgNum}.png`);
},
},
data() { data() {
return { return {
title: process.env.VUE_APP_TITLE, bgNum: 1,
codeUrl: "", codeUrl: "",
loginForm: { loginForm: {
username: "admin", username: "admin",
@ -136,7 +144,14 @@ export default {
this.getCode(); this.getCode();
this.getCookie(); this.getCookie();
}, },
mounted() {
this.updateInterval(this.updateBgNum, 5000);
},
methods: { methods: {
updateBgNum() {
if (this.bgNum >= 4) this.bgNum = 0;
this.bgNum += 1;
},
getCode() { getCode() {
getCodeImg().then((res) => { getCodeImg().then((res) => {
this.captchaEnabled = this.captchaEnabled =
@ -200,8 +215,15 @@ export default {
justify-content: left; justify-content: left;
align-items: center; align-items: center;
height: 100%; height: 100%;
background-image: url("../assets/images/ems/login-background.png"); }
background-size: cover; .login-bg {
position: absolute;
top: 0;
left: 0;
z-index: 1;
display: block;
height: 100%;
width: 100%;
} }
.login-logo { .login-logo {
display: block; display: block;
@ -209,18 +231,13 @@ export default {
height: auto; height: auto;
margin: 0 auto; margin: 0 auto;
} }
.title {
margin: 0px auto 30px auto;
text-align: center;
color: #707070;
}
.login-form { .login-form {
border-radius: 6px; border-radius: 6px;
background: #ffffff; background: #ffffff;
width: 400px; width: 400px;
padding: 0 25px 5px 25px; padding: 0 25px 5px 25px;
z-index: 1; z-index: 2;
.el-input { .el-input {
height: 38px; height: 38px;
input { input {

View File

@ -1,10 +1,30 @@
<template> <template>
<div class="register"> <div class="register">
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form"> <img :src="loginBg" alt="" srcset="" class="login-bg" />
<h3 class="title">{{title}}</h3> <el-form
ref="registerForm"
:model="registerForm"
:rules="registerRules"
class="register-form"
>
<img
src="./../assets/images/ems/logo.png"
alt=""
srcset=""
class="login-logo"
/>
<el-form-item prop="username"> <el-form-item prop="username">
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号"> <el-input
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> v-model="registerForm.username"
type="text"
auto-complete="off"
placeholder="账号"
>
<svg-icon
slot="prefix"
icon-class="user"
class="el-input__icon input-icon"
/>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="password"> <el-form-item prop="password">
@ -15,7 +35,11 @@
placeholder="密码" placeholder="密码"
@keyup.enter.native="handleRegister" @keyup.enter.native="handleRegister"
> >
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> <svg-icon
slot="prefix"
icon-class="password"
class="el-input__icon input-icon"
/>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="confirmPassword"> <el-form-item prop="confirmPassword">
@ -26,7 +50,11 @@
placeholder="确认密码" placeholder="确认密码"
@keyup.enter.native="handleRegister" @keyup.enter.native="handleRegister"
> >
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> <svg-icon
slot="prefix"
icon-class="password"
class="el-input__icon input-icon"
/>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="code" v-if="captchaEnabled"> <el-form-item prop="code" v-if="captchaEnabled">
@ -37,25 +65,31 @@
style="width: 63%" style="width: 63%"
@keyup.enter.native="handleRegister" @keyup.enter.native="handleRegister"
> >
<svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" /> <svg-icon
slot="prefix"
icon-class="validCode"
class="el-input__icon input-icon"
/>
</el-input> </el-input>
<div class="register-code"> <div class="register-code">
<img :src="codeUrl" @click="getCode" class="register-code-img"/> <img :src="codeUrl" @click="getCode" class="register-code-img" />
</div> </div>
</el-form-item> </el-form-item>
<el-form-item style="width:100%;"> <el-form-item style="width: 100%">
<el-button <el-button
:loading="loading" :loading="loading"
size="medium" size="medium"
type="primary" type="primary"
style="width:100%;" style="width: 100%"
@click.native.prevent="handleRegister" @click.native.prevent="handleRegister"
> >
<span v-if="!loading"> </span> <span v-if="!loading"> </span>
<span v-else> 中...</span> <span v-else> 中...</span>
</el-button> </el-button>
<div style="float: right;"> <div style="float: right">
<router-link class="link-type" :to="'/login'">使用已有账户登录</router-link> <router-link class="link-type" :to="'/login'"
>使用已有账户登录</router-link
>
</div> </div>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -67,106 +101,154 @@
</template> </template>
<script> <script>
import { getCodeImg, register } from "@/api/login" import { getCodeImg, register } from "@/api/login";
import intervalUpdate from "@/mixins/ems/intervalUpdate";
export default { export default {
name: "Register", name: "Register",
mixins: [intervalUpdate],
computed: {
loginBg() {
return require(`./../assets/images/ems/loginBg/${this.bgNum}.png`);
},
},
data() { data() {
const equalToPassword = (rule, value, callback) => { const equalToPassword = (rule, value, callback) => {
if (this.registerForm.password !== value) { if (this.registerForm.password !== value) {
callback(new Error("两次输入的密码不一致")) callback(new Error("两次输入的密码不一致"));
} else { } else {
callback() callback();
}
} }
};
return { return {
title: process.env.VUE_APP_TITLE, bgNum: 1,
codeUrl: "", codeUrl: "",
registerForm: { registerForm: {
username: "", username: "",
password: "", password: "",
confirmPassword: "", confirmPassword: "",
code: "", code: "",
uuid: "" uuid: "",
}, },
registerRules: { registerRules: {
username: [ username: [
{ required: true, trigger: "blur", message: "请输入您的账号" }, { required: true, trigger: "blur", message: "请输入您的账号" },
{ min: 2, max: 20, message: '用户账号长度必须介于 2 和 20 之间', trigger: 'blur' } {
min: 2,
max: 20,
message: "用户账号长度必须介于 2 和 20 之间",
trigger: "blur",
},
], ],
password: [ password: [
{ required: true, trigger: "blur", message: "请输入您的密码" }, { required: true, trigger: "blur", message: "请输入您的密码" },
{ min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" }, {
{ pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" } min: 5,
max: 20,
message: "用户密码长度必须介于 5 和 20 之间",
trigger: "blur",
},
{
pattern: /^[^<>"'|\\]+$/,
message: "不能包含非法字符:< > \" ' \\\ |",
trigger: "blur",
},
], ],
confirmPassword: [ confirmPassword: [
{ required: true, trigger: "blur", message: "请再次输入您的密码" }, { required: true, trigger: "blur", message: "请再次输入您的密码" },
{ required: true, validator: equalToPassword, trigger: "blur" } { required: true, validator: equalToPassword, trigger: "blur" },
], ],
code: [{ required: true, trigger: "change", message: "请输入验证码" }] code: [{ required: true, trigger: "change", message: "请输入验证码" }],
}, },
loading: false, loading: false,
captchaEnabled: true captchaEnabled: true,
} };
}, },
created() { created() {
this.getCode() this.getCode();
},
mounted() {
this.updateInterval(this.updateBgNum, 5000);
}, },
methods: { methods: {
updateBgNum() {
if (this.bgNum >= 4) this.bgNum = 0;
this.bgNum += 1;
},
getCode() { getCode() {
getCodeImg().then(res => { getCodeImg().then((res) => {
this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled this.captchaEnabled =
res.captchaEnabled === undefined ? true : res.captchaEnabled;
if (this.captchaEnabled) { if (this.captchaEnabled) {
this.codeUrl = "data:image/gif;base64," + res.img this.codeUrl = "data:image/gif;base64," + res.img;
this.registerForm.uuid = res.uuid this.registerForm.uuid = res.uuid;
} }
}) });
}, },
handleRegister() { handleRegister() {
this.$refs.registerForm.validate(valid => { this.$refs.registerForm.validate((valid) => {
if (valid) { if (valid) {
this.loading = true this.loading = true;
register(this.registerForm).then(res => { register(this.registerForm)
const username = this.registerForm.username .then((res) => {
this.$alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', { const username = this.registerForm.username;
this.$alert(
"<font color='red'>恭喜你,您的账号 " +
username +
" 注册成功!</font>",
"系统提示",
{
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,
type: 'success' type: "success",
}).then(() => { }
this.$router.push("/login") )
}).catch(() => {}) .then(() => {
}).catch(() => { this.$router.push("/login");
this.loading = false })
.catch(() => {});
})
.catch(() => {
this.loading = false;
if (this.captchaEnabled) { if (this.captchaEnabled) {
this.getCode() this.getCode();
} }
}) });
} }
}) });
} },
} },
} };
</script> </script>
<style rel="stylesheet/scss" lang="scss"> <style rel="stylesheet/scss" lang="scss">
.register { .register {
padding-left: 50px;
display: flex; display: flex;
justify-content: center; justify-content: left;
align-items: center; align-items: center;
height: 100%; height: 100%;
background-image: url("../assets/images/ems/login-background.png");
background-size: cover;
} }
.title { .login-bg {
margin: 0px auto 30px auto; position: absolute;
text-align: center; top: 0;
color: #707070; left: 0;
z-index: 1;
display: block;
height: 100%;
width: 100%;
}
.login-logo {
display: block;
width: 70%;
height: auto;
margin: 0 auto;
} }
.register-form { .register-form {
z-index: 2;
border-radius: 6px; border-radius: 6px;
background: #ffffff; background: #ffffff;
width: 400px; width: 400px;
padding: 25px 25px 5px 25px; padding: 0 25px 5px 25px;
.el-input { .el-input {
height: 38px; height: 38px;
input { input {