Commit 6d831a1d authored by 黄奎's avatar 黄奎

登录修改

parent b5880f11
...@@ -3,68 +3,83 @@ ...@@ -3,68 +3,83 @@
*/ */
import request from '../utils/request' import request from '../utils/request'
export function login({ Account, Password, AutoLoginId }) { export function login({
AutoLoginId = AutoLoginId ? AutoLoginId : 0 Account,
// headers: { Password,
// 'Content-Type': 'application/json;charset=UTF-8' AutoLoginId
// }, 申明Headers信息,不包含token ,token通过注入添加 }) {
return request({ AutoLoginId = AutoLoginId ? AutoLoginId : 0
url: '/login/login', // headers: {
method: "post", // 'Content-Type': 'application/json;charset=UTF-8'
// header, // }, 申明Headers信息,不包含token ,token通过注入添加
data: { return request({
Account, url: '/login/login',
Password, method: "post",
AccountType: 1, // header,
AutoLoginId data: {
} Account,
}); Password,
AccountType: 1,
AutoLoginId
}
});
} }
export function getInfo(token) { export function getInfo(token) {
return request({ return request({
url: '/user/info', url: '/user/info',
method: 'get', method: 'get',
data: {} data: {}
}) })
} }
export function getSeatNewToken() { export function getSeatNewToken() {
return request({ return request({
url: '/user/GetSeatNewToken', url: '/user/GetSeatNewToken',
method: 'post', method: 'post',
data: {} data: {}
}) })
} }
export function logout() { export function logout() {
return request({ return request({
url: '/logout', url: '/logout',
method: 'post', method: 'post',
data: {} data: {}
}) })
} }
export function loginByWeChat({ AutoLoginWorkId, AutoLoginOpenId }) { export function loginByWeChat({
return request({ AutoLoginWorkId,
url: '/login/login', AutoLoginOpenId
method: "post", }) {
// header, return request({
data: { url: '/login/login',
Account: '', method: "post",
Password: '', // header,
AccountType: 1, data: {
AutoLoginId: 0, Account: '',
AutoLoginWorkId, Password: '',
AutoLoginOpenId AccountType: 1,
} AutoLoginId: 0,
}); AutoLoginWorkId,
AutoLoginOpenId
}
});
} }
export function setUserCodeCallBack(data) { export function setUserCodeCallBack(data) {
return request({ return request({
url: '/QYWeChat/SetUserCodeCallBack', url: '/QYWeChat/SetUserCodeCallBack',
method: 'post', method: 'post',
data data
}) })
} }
\ No newline at end of file
export function setUserAutoLogin(data) {
return request({
url: '/QYWeChat/SetUserAutoLogin',
method: 'post',
data
})
}
...@@ -2,25 +2,12 @@ ...@@ -2,25 +2,12 @@
<div class="login"> <div class="login">
<div class="login-box"> <div class="login-box">
<div class="left-card"> <div class="left-card">
<q-carousel <q-carousel v-model="slide" :autoplay="10000" swipeable animated control-color="white" :padding="false" infinite
v-model="slide" height="100%" class="bg-primary text-white shadow-1">
:autoplay="10000"
swipeable
animated
control-color="white"
:padding="false"
infinite
height="100%"
class="bg-primary text-white shadow-1"
>
<q-carousel-slide name="first" class="q-pa-none"> <q-carousel-slide name="first" class="q-pa-none">
<div class="item-card"> <div class="item-card">
<div class="head-icon"> <div class="head-icon">
<q-img <q-img ratio="1" :img-style="{ borderRadius: '50%' }" src="../../assets/images/login/zhang.png" />
ratio="1"
:img-style="{ borderRadius: '50%' }"
src="../../assets/images/login/zhang.png"
/>
</div> </div>
<div class="publisher">张载</div> <div class="publisher">张载</div>
<div class="job">思想家、教育家</div> <div class="job">思想家、教育家</div>
...@@ -32,11 +19,7 @@ ...@@ -32,11 +19,7 @@
<q-carousel-slide name="tow" class="q-pa-none"> <q-carousel-slide name="tow" class="q-pa-none">
<div class="item-card"> <div class="item-card">
<div class="head-icon"> <div class="head-icon">
<q-img <q-img ratio="1" :img-style="{ borderRadius: '50%' }" src="../../assets/images/login/kong.jpg" />
ratio="1"
:img-style="{ borderRadius: '50%' }"
src="../../assets/images/login/kong.jpg"
/>
</div> </div>
<div class="publisher">孔子</div> <div class="publisher">孔子</div>
<div class="job">儒家学派创始人,编纂《春秋》,创办私学</div> <div class="job">儒家学派创始人,编纂《春秋》,创办私学</div>
...@@ -57,13 +40,8 @@ ...@@ -57,13 +40,8 @@
<div class="pwd_box"> <div class="pwd_box">
<div class="mu-text-field has-label"> <div class="mu-text-field has-label">
<div class="mu-text-field-content"> <div class="mu-text-field-content">
<q-input <q-input v-model="account" ref="account" class="text-h6" label="账号"
v-model="account" :rules="[val => !!val || '请输入账号信息']" />
ref="account"
class="text-h6"
label="账号"
:rules="[val => !!val || '请输入账号信息']"
/>
</div> </div>
</div> </div>
</div> </div>
...@@ -72,28 +50,14 @@ ...@@ -72,28 +50,14 @@
<div class="pwd_box"> <div class="pwd_box">
<div class="mu-text-field has-label"> <div class="mu-text-field has-label">
<div class="mu-text-field-content"> <div class="mu-text-field-content">
<q-input <q-input v-model="pwd" ref="pwd" class="text-h6" @keyup.enter.native="gologin" label="密码"
v-model="pwd" type="password" :rules="[val => !!val || '请输入密码凭证']" />
ref="pwd"
class="text-h6"
@keyup.enter.native="gologin"
label="密码"
type="password"
:rules="[val => !!val || '请输入密码凭证']"
/>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="field_wrap" style="margin-top:10px;"> <div class="field_wrap" style="margin-top:10px;">
<q-btn <q-btn :loading="isLogining" size="lg" label="立即登录" @click="gologin" class="full-width" color="primary">
:loading="isLogining"
size="lg"
label="立即登录"
@click="gologin"
class="full-width"
color="primary"
>
<template v-slot:loading> <template v-slot:loading>
<q-spinner-facebook /> <q-spinner-facebook />
</template> </template>
...@@ -110,17 +74,9 @@ ...@@ -110,17 +74,9 @@
</div> </div>
</div> </div>
</div> </div>
<div <div class="field_wrap" style="margin-top:20px !important" id="wechat" v-if="!isAdminUser && !autoLoginLoading">
class="field_wrap" </div>
style="margin-top:20px !important" <div class="field_wrap q-py-lg column justify-center" style="height:300px" v-if="autoLoginLoading">
id="wechat"
v-if="!isAdminUser && !autoLoginLoading"
></div>
<div
class="field_wrap q-py-lg column justify-center"
style="height:300px"
v-if="autoLoginLoading"
>
<div class="text-center"> <div class="text-center">
<q-spinner-ios color="primary" size="4em" class="q-mb-md" /> <q-spinner-ios color="primary" size="4em" class="q-mb-md" />
</div> </div>
...@@ -140,130 +96,114 @@ ...@@ -140,130 +96,114 @@
</template> </template>
<script> <script>
import { setUserCodeCallBack } from "../../api/login"; import {
export default { setUserCodeCallBack,
meta: { setUserAutoLogin
title: "登录 - 麦子教育系统" } from "../../api/login";
}, export default {
data() { meta: {
return { title: "登录 - 麦子教育系统"
accountStatus: false, },
account: "", data() {
pwdStatus: false, return {
pwd: "", accountStatus: false,
isLogining: false, account: "",
isAutoLogin: false, pwdStatus: false,
slide: "first", pwd: "",
redirect: undefined, isLogining: false,
isAdminUser: false, isAutoLogin: false,
autoLoginLoading: false slide: "first",
}; redirect: undefined,
}, isAdminUser: false,
created() { autoLoginLoading: false
if (!this.$route.query.code) { };
let autoLogin = localStorage.autoLogin },
? JSON.parse(localStorage.autoLogin) created() {
: null; if (!this.$route.query.code && !this.$route.query.wxworkAutoLogin) {
this.account = autoLogin ? autoLogin.acc : ""; let autoLogin = localStorage.autoLogin ?
this.pwd = autoLogin ? autoLogin.pwd : ""; JSON.parse(localStorage.autoLogin) :
this.isAutoLogin = autoLogin ? true : false; null;
if ( this.account = autoLogin ? autoLogin.acc : "";
(!this.isAutoLogin && this.$route.query.isa == "0021") || this.pwd = autoLogin ? autoLogin.pwd : "";
process.env.NODE_ENV == "development" this.isAutoLogin = autoLogin ? true : false;
) { if (
this.isAdminUser = true; (!this.isAutoLogin && this.$route.query.isa == "0021") ||
process.env.NODE_ENV == "development"
) {
this.isAdminUser = true;
} else {
this.isAdminUser = false;
this.getWeChat();
}
} else if (this.$route.query.wxworkAutoLogin &&
this.$route.query.wxworkAutoLogin == "1") {
this.autoLogin();
} else { } else {
this.getWeChat(); this.autoLoginLoading = true;
this.callBackUserInfo(this.$route.query.code);
} }
} else {
this.autoLoginLoading = true;
this.callBackUserInfo(this.$route.query.code);
}
},
watch: {
$route: {
handler: function(route) {
this.redirect = route.query && route.query.redirect;
if (route.query.code && route.query.appid) {
// this.callBackUserInfo(route.query.code);
}
},
immediate: true
}
},
mounted() {
if (tccc && tccc.Agent) {
tccc.Agent.offline();
}
},
methods: {
callBackUserInfo(code) {
setUserCodeCallBack({
appcode: "LinYangERP",
code: code
})
.then(r => {
this.loginErp(r.Data.UserId, r.Data.OpenId);
})
.catch(() => {
this.autoLoginLoading = false;
this.getWeChat();
window.location.href = `http://${window.location.host}/#/login`;
});
}, },
loginErp(AutoLoginWorkId, AutoLoginOpenId) { watch: {
this.$store $route: {
.dispatch("WeChatToLogin", { handler: function (route) {
AutoLoginWorkId, this.redirect = route.query && route.query.redirect;
AutoLoginOpenId if (route.query.code && route.query.appid) {
}) // this.callBackUserInfo(route.query.code);
.then(res => { }
this.$router.push({ },
path: this.redirect || "/home" immediate: true
}); }
})
.catch(() => {
this.autoLoginLoading = false;
this.getWeChat();
window.location.href = `http://${window.location.host}/#/login`;
});
}, },
getWeChat() { mounted() {
// 动态引入企业微信js文件 // if (tccc && tccc.Agent) {
const s = document.createElement("script"); // tccc.Agent.offline();
s.type = "text/javascript"; // }
s.src =
"https://wwcdn.weixin.qq.com/node/wework/wwopen/js/wwLogin-1.2.5.js";
const wxElement = document.body.appendChild(s);
// 调用企业微信二维码方法
wxElement.onload = function() {
var wwLogin = new WwLogin({
id: "wechat",
appid: "ww8418f1889fdded76",
agentid: "1000016",
redirect_uri: encodeURIComponent(window.location.href),
state: new Date().getTime(),
href: "",
lang: "zh"
});
};
}, },
gologin() { methods: {
this.isLogining = true; autoLogin() {
this.$refs.account.validate(); setUserAutoLogin({
this.$refs.pwd.validate(); mark: "LinYangERP"
if (!this.$refs.account.hasError && !this.$refs.pwd.hasError) { }).then(r => {
// this.$q.notify({ if (r.Data != "") {
// icon: 'error', alert(r.data);
// color: 'negative', location.href = r.Data;
// message: '账号或密码错误,请重新输入', } else {
// position: 'top' this.showErrorMsg(
// }) "未获取到授权回调信息,这可能是没有配置应用信息导致,请联系管理员"
);
}
});
},
goToAutoLogin() {
if (document.URL.indexOf("?loginId=") != -1) {
let url = `http://${
window.location.host
}/#/autologin?${document.URL.substring(
document.URL.indexOf("?") + 1,
document.URL.length
)}`;
document.location.href = url;
}
},
callBackUserInfo(code) {
setUserCodeCallBack({
appcode: "LinYangERP",
code: code
})
.then(r => {
this.loginErp(r.Data.UserId, r.Data.OpenId);
})
.catch(() => {
this.autoLoginLoading = false;
this.getWeChat();
window.location.href = `http://${window.location.host}/#/login`;
});
},
loginErp(AutoLoginWorkId, AutoLoginOpenId) {
this.$store this.$store
.dispatch("Login", { .dispatch("WeChatToLogin", {
Account: this.account, AutoLoginWorkId,
Password: this.pwd, AutoLoginOpenId
AutoLoginId: 0
}) })
.then(res => { .then(res => {
this.$router.push({ this.$router.push({
...@@ -271,275 +211,312 @@ export default { ...@@ -271,275 +211,312 @@ export default {
}); });
}) })
.catch(() => { .catch(() => {
this.isLogining = false; this.autoLoginLoading = false;
this.getWeChat();
window.location.href = `http://${window.location.host}/#/login`;
}); });
} else { },
getWeChat() {
// 动态引入企业微信js文件
const s = document.createElement("script");
s.type = "text/javascript";
s.src =
"https://wwcdn.weixin.qq.com/node/wework/wwopen/js/wwLogin-1.2.5.js";
const wxElement = document.body.appendChild(s);
// 调用企业微信二维码方法
wxElement.onload = function () {
var wwLogin = new WwLogin({
id: "wechat",
appid: "ww8418f1889fdded76",
agentid: "1000016",
redirect_uri: encodeURIComponent(window.location.href),
state: new Date().getTime(),
href: "",
lang: "zh"
});
};
},
gologin() {
this.isLogining = true;
this.$refs.account.validate();
this.$refs.pwd.validate();
if (!this.$refs.account.hasError && !this.$refs.pwd.hasError) {
// this.$q.notify({
// icon: 'error',
// color: 'negative',
// message: '账号或密码错误,请重新输入',
// position: 'top'
// })
this.$store
.dispatch("Login", {
Account: this.account,
Password: this.pwd,
AutoLoginId: 0
})
.then(res => {
this.$router.push({
path: this.redirect || "/home"
});
})
.catch(() => {
this.isLogining = false;
});
} else {}
setTimeout(() => {
this.isLogining = false;
}, 2000);
} }
setTimeout(() => {
this.isLogining = false;
}, 2000);
} }
} };
};
</script> </script>
<style scoped> <style scoped>
.login { .login {
background: url("~assets/images/login/bg.jpg") no-repeat 100% 100%; background: url("~assets/images/login/bg.jpg") no-repeat 100% 100%;
width: 100%; width: 100%;
height: 100vh; height: 100vh;
overflow: hidden; overflow: hidden;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.logo-box { .logo-box {
position: absolute; position: absolute;
top: 30px; top: 30px;
left: 30px; left: 30px;
width: 120px; width: 120px;
font-size: 48px; font-size: 48px;
font-family: perfectFont; font-family: perfectFont;
color: #fff; color: #fff;
} }
.login .login-box { .login .login-box {
width: 1000px; width: 1000px;
height: 560px; height: 560px;
box-shadow: 0 6px 20px 5px rgba(40, 120, 255, 0.1), box-shadow: 0 6px 20px 5px rgba(40, 120, 255, 0.1),
0 16px 24px 2px rgba(0, 0, 0, 0.05); 0 16px 24px 2px rgba(0, 0, 0, 0.05);
border-radius: 8px; border-radius: 8px;
background: #fff; background: #fff;
display: flex; display: flex;
overflow: hidden; overflow: hidden;
} }
.login .login-box .left-card { .login .login-box .left-card {
width: 440px; width: 440px;
height: 100%; height: 100%;
} }
.login .login-box .left-card .item-card { .login .login-box .left-card .item-card {
background: url("~assets/images/login/yinhao.png") right bottom/221px background: url("~assets/images/login/yinhao.png") right bottom/221px no-repeat,
no-repeat, linear-gradient(180deg, #43e97b, #1aad19);
linear-gradient(180deg, #43e97b, #1aad19); width: 100%;
width: 100%; height: 100%;
height: 100%; padding-top: 96px;
padding-top: 96px; color: white;
color: white; box-sizing: border-box;
box-sizing: border-box; }
}
.impowerBox .title { .impowerBox .title {
display: none; display: none;
} }
.login .login-box .left-card .item-card .head-icon {
width: 104px; .login .login-box .left-card .item-card .head-icon {
height: 104px; width: 104px;
margin: 0 auto; height: 104px;
border-radius: 100%; margin: 0 auto;
background: rgba(40, 120, 255, 0.5); border-radius: 100%;
padding: 5px; background: rgba(40, 120, 255, 0.5);
} padding: 5px;
}
.login .login-box .left-card .item-card .head-icon img {
width: 100%; .login .login-box .left-card .item-card .head-icon img {
height: 100%; width: 100%;
border-radius: 100%; height: 100%;
} border-radius: 100%;
}
.login .login-box .left-card .item-card .publisher,
.login .login-box .left-card .item-card .job { .login .login-box .left-card .item-card .publisher,
margin-top: 20px; .login .login-box .left-card .item-card .job {
font-size: 24px; margin-top: 20px;
font-family: perfectFont; font-size: 24px;
text-align: center; font-family: perfectFont;
} text-align: center;
}
.login .login-box .left-card .item-card .publisher {
font-weight: bold; .login .login-box .left-card .item-card .publisher {
} font-weight: bold;
}
.login .login-box .left-card .item-card .job {
font-size: 16px; .login .login-box .left-card .item-card .job {
margin-top: 10px; font-size: 16px;
} margin-top: 10px;
}
.login .login-box .left-card .item-card .content {
font-size: 13px; .login .login-box .left-card .item-card .content {
font-family: perfectFont; font-size: 13px;
margin-top: 20px; font-family: perfectFont;
margin: 20px; margin-top: 20px;
line-height: 24px; margin: 20px;
text-indent: 28px; line-height: 24px;
} text-indent: 28px;
}
.login .login-box .right-card {
flex: 1; .login .login-box .right-card {
padding-top: 50px; flex: 1;
font-family: perfectFont; padding-top: 50px;
} font-family: perfectFont;
}
.login .login-box .right-card .company {
font-size: 20px; .login .login-box .right-card .company {
text-align: center; font-size: 20px;
font-weight: bold; text-align: center;
} font-weight: bold;
}
.login .login-box .right-card .t {
margin-top: 20px; .login .login-box .right-card .t {
font-size: 34px; margin-top: 20px;
text-align: center; font-size: 34px;
font-weight: bold; text-align: center;
margin-bottom: 30px; font-weight: bold;
} margin-bottom: 30px;
}
.field_wrap {
width: 330px; .field_wrap {
margin: 0 auto; width: 330px;
font-family: perfectFont; margin: 0 auto;
} font-family: perfectFont;
}
.field_wrap .pwd_box {
position: relative; .field_wrap .pwd_box {
} position: relative;
}
.field_wrap .pwd_box .mu-text-field {
width: 100%; .field_wrap .pwd_box .mu-text-field {
color: rgba(0, 0, 0, 0.54); width: 100%;
} color: rgba(0, 0, 0, 0.54);
}
.field_wrap .pwd_box .mu-text-field.has-label {
min-height: 72px; .field_wrap .pwd_box .mu-text-field.has-label {
} min-height: 72px;
}
.field_wrap .pwd_box .mu-text-field .mu-text-field-content {
display: block; .field_wrap .pwd_box .mu-text-field .mu-text-field-content {
height: 100%; display: block;
padding-bottom: 12px; height: 100%;
padding-top: 4px; padding-bottom: 12px;
} padding-top: 4px;
}
.field_wrap .pwd_box .mu-text-field.has-label .mu-text-field-content {
padding-top: 28px; .field_wrap .pwd_box .mu-text-field.has-label .mu-text-field-content {
padding-bottom: 12px; padding-top: 28px;
} padding-bottom: 12px;
}
.field_wrap
.pwd_box .field_wrap .pwd_box .mu-text-field.has-label .mu-text-field-content .mu-text-field-label {
.mu-text-field.has-label line-height: 20px;
.mu-text-field-content transition: all 0.45s cubic-bezier(0.23, 1, 0.32, 1);
.mu-text-field-label { z-index: 1;
line-height: 20px; cursor: text;
transition: all 0.45s cubic-bezier(0.23, 1, 0.32, 1); transform: translateZ(0) scale(0.75);
z-index: 1; transform-origin: left top;
cursor: text; user-select: none;
transform: translateZ(0) scale(0.75); pointer-events: none;
transform-origin: left top; backface-visibility: hidden;
user-select: none; font-size: 16px;
pointer-events: none; font-family: perfectFont;
backface-visibility: hidden; font-weight: bold;
font-size: 16px; }
font-family: perfectFont;
font-weight: bold; .field_wrap .pwd_box .mu-text-field.has-label .mu-text-field-content .mu-text-field.has-label .mu-text-field-label {
} top: 8px;
position: absolute;
.field_wrap }
.pwd_box
.mu-text-field.has-label .field_wrap .pwd_box .mu-text-field.has-label .mu-text-field-content .mu-text-field-input {
.mu-text-field-content appearance: none;
.mu-text-field.has-label outline: none;
.mu-text-field-label { border: none;
top: 8px; background: none;
position: absolute; border-radius: 0 0 0 0;
} box-shadow: none;
display: block;
.field_wrap padding: 0;
.pwd_box margin: 0;
.mu-text-field.has-label width: 100%;
.mu-text-field-content height: 32px;
.mu-text-field-input { color: rgba(0, 0, 0, 0.87);
appearance: none; font-family: inherit;
outline: none; position: relative;
border: none; }
background: none;
border-radius: 0 0 0 0; .field_wrap .el-button,
box-shadow: none; .field_wrap .el-checkbox__inner {
display: block; border-radius: 0;
padding: 0; }
margin: 0;
width: 100%; .mu-text-field-line {
height: 32px; background-color: rgba(0, 0, 0, 0.4);
color: rgba(0, 0, 0, 0.87); margin: 0;
font-family: inherit; height: 1px;
position: relative; border: none;
} left: 0;
right: 0;
.field_wrap .el-button, position: absolute;
.field_wrap .el-checkbox__inner { box-sizing: content-box;
border-radius: 0; overflow: visible;
} }
.mu-text-field-line { .mu-text-field-focus-line {
background-color: rgba(0, 0, 0, 0.4); margin: 0;
margin: 0; height: 2px;
height: 1px; border: none;
border: none; background-color: #0d2481;
left: 0; position: absolute;
right: 0; left: 0;
position: absolute; right: 0;
box-sizing: content-box; margin-top: -1px;
overflow: visible; transform: scaleX(0);
} transition: -webkit-transform 0.45s cubic-bezier(0.23, 1, 0.32, 1);
transition: transform 0.45s cubic-bezier(0.23, 1, 0.32, 1);
.mu-text-field-focus-line { transition: transform 0.45s cubic-bezier(0.23, 1, 0.32, 1),
margin: 0; -webkit-transform 0.45s cubic-bezier(0.23, 1, 0.32, 1);
height: 2px; }
border: none;
background-color: #0d2481; .mu-text-field-focus-line.focus {
position: absolute; transform: scaleX(1);
left: 0; }
right: 0;
margin-top: -1px; .el-button--primary,
transform: scaleX(0); .el-checkbox__input.is-checked .el-checkbox__inner,
transition: -webkit-transform 0.45s cubic-bezier(0.23, 1, 0.32, 1); .el-checkbox__input.is-indeterminate .el-checkbox__inner {
transition: transform 0.45s cubic-bezier(0.23, 1, 0.32, 1); background-color: #0d2481 !important;
transition: transform 0.45s cubic-bezier(0.23, 1, 0.32, 1), border-color: #0d2481 !important;
-webkit-transform 0.45s cubic-bezier(0.23, 1, 0.32, 1); }
}
.login .login-box .right-card .forget {
.mu-text-field-focus-line.focus { margin-top: 12px;
transform: scaleX(1); display: flex;
} }
.el-button--primary, .login .login-box .right-card .forget .item-forget {
.el-checkbox__input.is-checked .el-checkbox__inner, flex: 1;
.el-checkbox__input.is-indeterminate .el-checkbox__inner { font-size: 14px;
background-color: #0d2481 !important; font-family: perfectFont;
border-color: #0d2481 !important; }
}
.login .login-box .right-card .forget .item-forget:last-child {
.login .login-box .right-card .forget { text-align: right;
margin-top: 12px; }
display: flex;
} .login .login-box .right-card .forget .item-forget a {
color: #000;
.login .login-box .right-card .forget .item-forget { text-decoration: none;
flex: 1; }
font-size: 14px;
font-family: perfectFont; .login .login-box .right-card .forget .item-forget a:hover {
} color: #0d2481;
}
.login .login-box .right-card .forget .item-forget:last-child {
text-align: right;
}
.login .login-box .right-card .forget .item-forget a {
color: #000;
text-decoration: none;
}
.login .login-box .right-card .forget .item-forget a:hover {
color: #0d2481;
}
</style> </style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment