You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
spms-vue/src/views/login/index.vue

311 lines
10 KiB
Vue

<template>
<div class="login-container">
<div>
<h3 class="toptitle">诏安县总医院</h3>
</div>
<el-form
class="card-box login-form"
autocomplete="on"
:model="ruleForm"
:rules="rules"
ref="ruleForm"
label-position="left"
>
<el-card class="box-card">
<div style="text-align: center; margin-top: 10px">
<img alt="element-logo" src="../../assets/logo.png"/>
</div>
<h3 class="title">用户登录</h3>
<el-form-item prop="username" class="item" style="margin-top: -20px">
<el-input
placeholder="账号"
name="userName"
autocomplete="on"
v-model="ruleForm.userName"
>
<i slot="prefix" class="el-input__icon">
<icon-svg icon-class="user"/>
</i>
</el-input>
</el-form-item>
<el-form-item prop="password" class="item">
<!--<span class="svg-container">-->
<!--<icon-svg icon-class="pwd"/>-->
<!--</span>-->
<el-input
placeholder="密码"
name="pwd"
:type="isShowPwd ? 'text' : 'password'"
@keyup.enter.native="handleLogin"
v-model="ruleForm.pwd"
autocomplete="on"
>
<i slot="prefix" class="el-input__icon">
<icon-svg icon-class="pwd"/>
</i>
<i
slot="suffix"
class="el-input__icon"
@click="isShowPwd = !isShowPwd"
>
<icon-svg icon-class="eye"/>
</i>
</el-input>
</el-form-item>
<el-form-item prop="verificationCode" class="item" style="background-color: white">
<!--<el-input-->
<!--placeholder="验证码"-->
<!--name="verificationCode"-->
<!--v-model="ruleForm.verificationCode"-->
<!--autocomplete="on"-->
<!--&gt;-->
<!--<i slot="prefix" class="el-input__icon">-->
<!--<icon-svg icon-class="tongyong"/>-->
<!--</i>-->
<!--</el-input>-->
<Verify ref="checkV" :showButton="false" :barSize="{width:'305px',height:'37px'}" :vOffset="5" @success="verifyAlert('success')" @error="verifyAlert('error')" :type="3"></Verify>
</el-form-item>
<div style="text-align: center; margin-top: 15px">
<el-button
type="primary"
style="width: 60%; margin-bottom: 30px"
:loading="loading"
@click.native="handleLogin()"
>登录
</el-button>
</div>
<div style="margin-top: -15px">
<a style="margin-left: 50%; font-size: 12px" :href="'#/register'"
>立即注册</a
>
<a style="margin-left: 5%; font-size: 12px" :href="'#/forgetPasswd'"
>忘记密码</a
>
</div>
</el-card>
</el-form>
<div style=" position: absolute; bottom: 0; left: 50%; transform: translate(-50%, -50%);" >
<a href="http://www.beian.gov.cn/portal/registerSystemInfo" style="color: white; font-size: 12px" >
厦门高立新鹏软件科技有限公司&nbsp; &nbsp;闽公网安备35020302034269号&nbsp;
</a>
<a href="http://beian.miit.gov.cn" style="color: white; font-size: 10px" >闽ICP备17019234号</a>
</div>
</div>
</template>
<script>
import Verify from 'vue2-verify'
export default {
data() {
let validatePwd = (rule, value, callback) => {
if (value === "") {
callback(new Error("请输入密码"));
} else {
callback();
}
};
return {
ruleForm: {
userName: "",
pwd: "",
checked: true,
verificationCode: false
},
rules: {
userName: [
{required: true, message: "请输入登录名", trigger: "blur"},
],
pwd: [{validator: validatePwd, trigger: "blur"}],
},
isShowPwd: false, // 是否显示密码
loading: false, // 登录loading
showDialog: false, // 显示dialog
redirect: null, // 回调地址
};
},
methods: {
verifyAlert(text) {
if (text === 'success') {
this.ruleForm.verificationCode = true;
}
},
handleLogin() {
if (!this.ruleForm.verificationCode) {
this.$message({
message: '请进行验证',
center: true,
type: 'warning'
});
return;
}
this.$refs["ruleForm"].validate((valid) => {
if (valid) {
this.loading = true;
this.$store
.dispatch("loginName", this.ruleForm)
.then((response) => {
this.loading = false;
if (response.code !== 20000) {
console.log("--code = " + response.code);
this.ruleForm.verificationCode = false;
this.$refs.checkV.refresh();
this.$message.error(response.message);
return;
}
let path = "/";
if (this.redirect) {
path = this.redirect;
}
console.log("path = " + path);
this.$router.push({
path: "../main",
});
// window.location.replace(path);
// this.showDialog = true
})
.catch(() => {
this.ruleForm.verificationCode = false;
this.$refs.checkV.refresh();
this.loading = false;
});
} else {
return false;
}
});
},
},
components: {
Verify
},
created() {
// 将参数拷贝进查询对象
let query = this.$route.query;
if (query.redirect) {
// URL Encode
this.redirect = decodeURIComponent(query.redirect);
}
}
};
</script>
<style type="text/scss" lang="scss">
@import "../../styles/mixin";
$bg: #2d3a4b;
$dark_gray: #889aa4;
$light_gray: #eee;
.login-container {
@include relative;
background-color: white;
background-image: url("../../assets/login.jpg");
background-size: 100vw 100vh;
height: 100%;
input:-webkit-autofill {
-webkit-box-shadow: 0 0 0 1000px #293444 inset !important;
-webkit-text-fill-color: #fff !important;
}
.item {
width: 22em;
margin-left: 5em;
.el-form-item__content {
display: flex;
flex-flow: row;
}
}
input {
background: transparent;
border: 0;
-webkit-appearance: none;
border-radius: 0;
padding: 0.46rem 0.0666rem 0.16rem 0.2rem;
color: $dark_gray;
height: 100%;
}
.el-input {
display: inline-block;
}
.tips {
font-size: 14px;
color: #fff;
margin-bottom: 0.13333rem;
}
.svg-container {
padding: 0.08rem 0.0666rem 0.08rem 0.2rem;
color: $dark_gray;
vertical-align: middle;
display: inline-block;
&_login {
font-size: 20px;
}
}
.title {
font-size: 26px;
color: #2d3a4b;
margin: 0 auto 0.5333rem auto;
text-align: center;
font-weight: bold;
margin-bottom: 50px;
}
.toptitle {
position: absolute;
font-size: 55px;
color: #FFFFFF;
margin: 50px auto 0.5333rem 50px;
text-align: center;
font-weight: bold;
}
.login-form {
//@include fxied-center;
margin: 0px 100px auto auto;
width: 50em;
/*background-color: silver;*/
/*background: #fff;*/
padding: 10em 10em 15em 10em;
}
.el-form-item {
border: 1px solid rgba(255, 255, 255, 0.1);
background: rgba(0, 0, 0, 0.1);
border-radius: 0.0666rem;
color: #454545;
}
.show-pwd {
position: absolute;
right: 0.1333rem;
top: 0.09333rem;
font-size: 16px;
color: $dark_gray;
cursor: pointer;
}
.thirdparty-button {
/*position: absolute;*/
/*right: .4666rem;*/
/*bottom: .37333rem;*/
}
.box-card {
margin-top: -20px;
height: 550px;
width: 490px;
}
}
</style>