提交 5d2ed091 编写于 作者: sq3536's avatar sq3536

登录样式

上级 cd54da87
.login{ .login{
width: 100vh; display: -webkit-box;
height: 100vh; display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
min-height: 100%;
background: #108cee;
> img{ > img{
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
} }
.login-logo{
position: fixed;
left: 80px;
top: 80px;
}
.login-content{
position: fixed;
left: 10%;
top: 30%;
width: 60%;
>span{
color: #fff;
font-size: 84px;
}
}
&-con{ &-con{
position: fixed; position: absolute;
right: 160px; left: 0;
top: 50%; right: 0;
transform: translateY(-60%); top: 150px;
width: 300px; margin: auto;
.ivu-card{ width: 450px;
border-radius: 15px; .ivu-card-head {
.ivu-card-head { padding: 30px 6px;
padding: 14px 6px; border-bottom: 0px;
>p{ >p{
line-height: 20px; line-height: 20px;
font-size: 20px; font-size: 24px;
color: #17233d; color: #666666;
font-weight: 700; font-weight: 700;
text-align:center;
}
}
&-header{
font-size: 16px;
font-weight: 300;
text-align: center;
padding: 30px 0;
}
.form-con{
padding: 10px 0 0;
.ivu-form-item{
margin-bottom: 20px;
}
p{
font-size: 14px;
font-weight: bold;
height: 21px;
line-height: 21px;
}
button{
background-image: linear-gradient(to bottom,#8bbcf1 0%,#2d8cf0 100%);
border-color:#8bbcf1;
}
} }
.login-tip{ }
font-size: 10px; &-header{
text-align: center; font-size: 16px;
color: #5f4949; font-weight: 300;
text-align: center;
padding: 30px 0;
}
.form-con{
padding: 0px 20px 0px 20px;
>i-button{
width: 170px;
height: 40px;
} }
} }
.login-tip{
font-size: 10px;
text-align: center;
color: red;
height: 30px;
}
} }
}
.login_btn{
width: 175px;
height: 40px;
font-size: 18px;
font-family: MicrosoftYaHei;
}
.login_reset {
width: 175px;
height: 40px;
font-size: 18px;
font-family: MicrosoftYaHei;
float: right;
}
.form_tipinfo {
font-family: MicrosoftYaHei-Bold;
font-size: 14px;
font-weight: bold;
font-stretch: normal;
line-height: 24px;
letter-spacing: 0px;
color: #666666;
}
form_tipinfo_more {
font-family: MicrosoftYaHei;
font-size: 14px;
font-weight: normal;
letter-spacing: 0px;
color: #666666;
}
.log_footer {
display: block;
padding: 0 16px;
margin: 48px 0 24px;
text-align: center;
color: #212529;
}
.log_footer a {
color: white;
text-decoration: none;
}
.sign-btn {
display: inline-block;
cursor: pointer;
margin-left: 10px;
}
.wx-svg-container,
.qq-svg-container {
display: inline-block;
width: 40px;
height: 40px;
line-height: 40px;
text-align: center;
padding-top: 1px;
border-radius: 4px;
margin-bottom: -20px;
margin-top: 10px;
} }
\ No newline at end of file
<template> <template>
<div class='login'> <div class='login'>
<img src="/assets/img/login_bg.png"/> <img src="/assets/img/background.png"/>
<div class="login-logo">
<img src ="/assets/img/logo.svg"/>
</div>
<div class="login-content">
<span>{{appTitle}}</span>
</div>
<div class='login-con'> <div class='login-con'>
<card :bordered="false"> <card :bordered="false">
<p slot='title'> <p slot='title' style="text-align: center">
<!-- <icon type='ios-log-in'></icon> --> &nbsp;&nbsp;{{appTitle}}
<!-- &nbsp;&nbsp; -->
{{this.$t('components.login.caption')}}
</p> </p>
<div class='form-con'> <div class='form-con'>
<i-form ref='loginForm' :rules="rules" :model="form"> <i-form ref='loginForm' :rules="rules" :model="form">
<form-item prop='loginname'> <form-item prop='loginname'>
<p>用户名</p>
<i-input <i-input
prefix='ios-contact' size='large'
v-model="form.loginname" prefix='ios-contact'
:placeholder="this.$t('components.login.loginname.placeholder')"> v-model.trim="form.loginname"
placeholder="用户名"
@keyup.enter.native="handleSubmit">
</i-input> </i-input>
</form-item> </form-item>
<form-item prop='password'> <form-item prop='password'>
<p>密码</p>
<i-input <i-input
prefix='ios-key' size='large'
v-model="form.password" prefix='ios-key'
type='password' v-model.trim="form.password"
:placeholder="this.$t('components.login.password.placeholder')"> type='password'
placeholder="密码"
@keyup.enter.native="handleSubmit">
</i-input> </i-input>
</form-item> </form-item>
<form-item> <form-item>
<i-button <i-button
@click="handleSubmit" @click="handleSubmit"
type='primary' type='primary'
long> class="login_btn">登录
{{this.$t('components.login.name')}} </i-button>
<i-button
@click="goReset"
type='success'
class="login_reset">重置
</i-button> </i-button>
</form-item> </form-item>
<form-item>
<div style="text-align: center">
<span class="form_tipinfo">其他登录方式</span>
</div>
<div style="text-align: center">
<div class="sign-btn" @click="tencentHandleClick('tencent')">
<img src="/assets/img/QQ.svg" class="qq-svg-container" draggable="false">
</div>
<div class="sign-btn" @click="wechatHandleClick('wechat')">
<img src="/assets/img/weixin.svg" class="wx-svg-container" draggable="false">
</div>
</div>
</form-item>
</i-form> </i-form>
<p class='login-tip'> <p class='login-tip'>
{{this.$t('components.login.tip')}} {{this.loginTip}}
<!--{{this.$t('components.login.tip')}}-->
</p> </p>
</div> </div>
</card> </card>
<div class="log_footer">
<div class="copyright">
<a href="https://www.ibizlab.cn/" target="_blank">{{appTitle}} is based on ibizlab .</a>
</div>
</div>
</div> </div>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { Vue, Component, Watch } from 'vue-property-decorator'; import {Vue, Component, Watch} from 'vue-property-decorator';
import { Environment } from '@/environments/environment'; import {Environment} from '@/environments/environment';
//import Divider from "ibiz-vue-lib/lib/ibiz-vue-lib.common";
@Component({
}) @Component({
export default class Login extends Vue { components: {}
})
/** export default class Login extends Vue {
* 表单对象
* /**
* @type {*} * 表单对象
* @memberof Login *
*/ * @type {*}
public form: any = { loginname: 'guest', password: 'guest' }; * @memberof Login
*/
/** public form: any = {loginname: 'ibzadmin', password: '123456'};
* 应用标题
* /**
* @type {string} * 登录提示语
* @memberof Login */
*/ public loginTip: any = "";
public appTitle:string = Environment.AppTitle;
/**
/** * 按钮可点击
* 值规则 */
* public canClick: any = true;
* @type {*}
* @memberof Login /**
*/ * 应用名称
public rules = {}; *
* @type {string}
/** * @memberof Login
* 设置值规则 */
* public appTitle: string = Environment.AppTitle;
* @memberof Login
*/ /**
public setRules(){ * 值规则
this.rules = { *
loginname: [ * @type {*}
{ required: true, message: this.$t('components.login.loginname.message'), trigger: 'change' }, * @memberof Login
], */
password: [ public rules = {};
{ required: true, message: this.$t('components.login.password.message'), trigger: 'change' },
], /**
* 设置值规则
*
* @memberof Login
*/
public setRules() {
this.rules = {
loginname: [
{required: true, message: this.$t('components.login.loginname.message'), trigger: 'change'},
],
password: [
{required: true, message: this.$t('components.login.password.message'), trigger: 'change'},
],
}
};
/**
* 生命周期Create
*
* @memberof Login
*/
public created() {
this.setRules();
} }
};
/**
* 生命周期Create
*
* @memberof Login
*/
public created(){
this.setRules();
}
/** public mounted() {
* 监听语言变化 this.getCookie();
* }
* @memberof Login
*/
@Watch('$i18n.locale')
onLocaleChange(newval: any, val: any) {
this.setRules();
}
/** /**
* 登陆处理 * 监听语言变化
* *
* @memberof Login * @memberof Login
*/ */
public handleSubmit(): void { @Watch('$i18n.locale')
const form: any = this.$refs.loginForm; onLocaleChange(newval: any, val: any) {
let validatestate: boolean = true; this.setRules();
form.validate((valid: boolean) => {
validatestate = valid ? true : false;
});
if (!validatestate) {
return;
} }
const post: Promise<any> = this.$http.post('v7/login', this.form, true);
post.then((response: any) => { /**
if (response && response.status === 200) { * 登陆处理
const data = response.data; *
if(data && data.token){ * @memberof Login
localStorage.setItem('token', data.token); */
public handleSubmit(): void {
const form: any = this.$refs.loginForm;
let validatestate: boolean = true;
form.validate((valid: boolean) => {
validatestate = valid ? true : false;
});
if (!validatestate) {
return;
}
const loginname: any = this.form.loginname;
const password: any = this.form.password;
const post: Promise<any> = this.$http.post('v7/login', this.form, true);
post.then((response: any) => {
if (response && response.status === 200) {
const data = response.data;
if (data && data.token) {
localStorage.setItem('token', data.token);
}
if (data && data.user) {
localStorage.setItem('user', JSON.stringify(data.user));
}
// 设置cookie,保存账号密码7天
this.setCookie(loginname, 7);
// 跳转首页
const url: any = this.$route.query.redirect ? this.$route.query.redirect : '*';
this.$router.push({path: url});
}
}).catch((error: any) => {
// const loginfailed: any = this.$t('components.login.loginfailed');
// this.$Notice.error({ title: (this.$t('components.login.error') as any), desc: loginfailed });
// 登录提示
const data = error.data;
if (data && data.message) {
this.loginTip = data.message;
this.$Message.error({
content: "登录失败," + data.message,
duration: 5,
closable: true
});
} else {
this.$Message.error({
content: "登录失败",
duration: 5,
closable: true
});
} }
if(data && data.user){ });
localStorage.setItem('user', JSON.stringify(data.user));
}
/**
* 重置页面
*/
public goReset(): void {
const _this = this;
_this.form={loginname: 'ibzadmin', password: '123456'}
}
/**
* 设置cookie,保存账号密码
* @param loginname
* @param password
*/
public setCookie(loginname: any, exdays: any) {
// 获取时间
let exdate = new Date();
// 保存的天数
exdate.setTime(exdate.getTime() + 24 * 60 * 60 * 1000 * exdays);
// 字符串拼接cookie
window.document.cookie = "loginname" + "=" + loginname + ";path=/;expires=" + exdate.toUTCString();
}
/**
* 获取cookie
*/
public getCookie() {
if (document.cookie.length > 0) {
var arr = document.cookie.split('; ');
for (var i = 0; i < arr.length; i++) {
var arr2 = arr[i].split('=');
//判断查找相对应的值
if (arr2[0] == 'loginname') {
this.form.loginname = arr2[1];
}
} }
const url: any = this.$route.query.redirect ? this.$route.query.redirect : '*';
this.$router.push({ path: url });
} }
}).catch((error: any) => { }
const loginfailed: any = this.$t('components.login.loginfailed');
this.$Notice.error({ title: (this.$t('components.login.error') as any), desc: loginfailed });
});
} /**
* qq授权登录
* @param thirdpart
*/
public tencentHandleClick(thirdpart: any) {
this.$Message.warning("qq授权登录暂未支持")
}
} /**
* 微信授权登录
* @param thirddpart
*/
public wechatHandleClick(thirddpart: any) {
this.$Message.warning("微信授权登录暂未支持")
}
}
</script> </script>
<style lang='less'> <style lang='less'>
@import './login.less'; @import './login.less';
</style> </style>
\ No newline at end of file
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册