develop_cloud #1

Merged
dashixiong merged 234 commits from develop_cloud into main-cloud 2026-02-11 02:06:04 +00:00
116 changed files with 12462 additions and 385 deletions
Showing only changes of commit a4ae820e98 - Show all commits

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

View File

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