Commit ee8224c2 by 程彤

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/views/user/Login.vue
parents 2bbd77c1 a7cada7f
<template> <template>
<div class="main clearfix"> <div class="main clearfix">
<div class="caption"> <div class="caption">
</div> </div>
<div class="form"> <div class="form">
<span class="form_title">您好,欢迎登陆</span> <span class="form_title">您好,欢迎登陆</span>
<a-form :form="form" class="user-layout-login" ref="formLogin" id="formLogin"> <a-form :form="form" class="user-layout-login" ref="formLogin" id="formLogin">
<a-form-item> <a-form-item>
<a-input <a-input
size="large" size="large"
v-decorator="['username',validatorRules.username,{ validator: this.handleUsernameOrEmail }]" v-decorator="['username',validatorRules.username,{ validator: this.handleUsernameOrEmail }]"
type="text" type="text"
placeholder="请输入帐户名"> placeholder="请输入帐户名">
<a-icon slot="prefix" type="user" :style="{ color: 'rgba(0,0,0,.25)' }"/> <a-icon slot="prefix" type="user" :style="{ color: 'rgba(0,0,0,.25)' }"/>
</a-input> </a-input>
</a-form-item> </a-form-item>
<a-row :gutter="0"> <a-row :gutter="0">
<a-col :span="14"> <a-col :span="14">
<a-form-item> <a-form-item>
<a-input <a-input
v-decorator="['inputCode',validatorRules.inputCode]" v-decorator="['inputCode',validatorRules.inputCode]"
size="large" size="large"
type="text" type="text"
@change="inputCodeChange" @change="inputCodeChange"
placeholder="请输入验证码"> placeholder="请输入验证码">
<a-icon <a-icon
slot="prefix" slot="prefix"
v-if=" inputCodeContent==verifiedCode " v-if=" inputCodeContent==verifiedCode "
type="smile" type="smile"
:style="{ color: 'rgba(0,0,0,.25)' }"/> :style="{ color: 'rgba(0,0,0,.25)' }"/>
<a-icon slot="prefix" v-else type="frown" :style="{ color: 'rgba(0,0,0,.25)' }"/> <a-icon slot="prefix" v-else type="frown" :style="{ color: 'rgba(0,0,0,.25)' }"/>
</a-input> </a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="10"> <a-col :span="10">
<j-graphic-code @success="generateCode" style="float: right"></j-graphic-code> <j-graphic-code @success="generateCode" style="float: right"></j-graphic-code>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="0"> <a-row :gutter="0">
<a-col :span="14"> <a-col :span="14">
<a-form-item> <a-form-item>
<a-input <a-input
:disabled="!loginBtn" :disabled="!loginBtn"
v-decorator="['phonecode',validatorRules.phoneCode]" v-decorator="['phonecode',validatorRules.phoneCode]"
size="large" size="large"
type="text" type="text"
placeholder="请输入手机验证码"> placeholder="请输入手机验证码">
<a-icon slot="prefix" type="message" :style="{ color: 'rgba(0,0,0,.25)' }"/> <a-icon slot="prefix" type="message" :style="{ color: 'rgba(0,0,0,.25)' }"/>
</a-input> </a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="10"> <a-col :span="10">
<a-button <a-button
size="small" size="small"
type="primary" type="primary"
htmlType="submit" htmlType="submit"
class="code-button" class="code-button"
@click.stop.prevent="getCode" @click.stop.prevent="getCode"
:disabled="!loginBtn">{{codeMsg}} :disabled="!loginBtn">{{codeMsg}}
</a-button> </a-button>
<!-- <j-graphic-code @success="generateCode" style="float: right"></j-graphic-code>--> <!-- <j-graphic-code @success="generateCode" style="float: right"></j-graphic-code>-->
</a-col> </a-col>
</a-row> </a-row>
<a-form-item> <a-form-item>
<a-input <a-input
:disabled="!loginBtn" :disabled="!loginBtn"
v-decorator="['password',validatorRules.password]" v-decorator="['password',validatorRules.password]"
size="large" size="large"
type="password" type="password"
autocomplete="false" autocomplete="false"
placeholder="密码"> placeholder="密码">
<a-icon slot="prefix" type="lock" :style="{ color: 'rgba(0,0,0,.25)' }"/> <a-icon slot="prefix" type="lock" :style="{ color: 'rgba(0,0,0,.25)' }"/>
</a-input> </a-input>
</a-form-item> </a-form-item>
<div style="top:10px;float: left;font-size: 12px;color: #8b8b8b"> <div style="top:10px;float: left;font-size: 12px;color: #8b8b8b">
<a-checkbox v-model="single" disabled></a-checkbox>&nbsp; <a-checkbox v-model="single" disabled></a-checkbox>&nbsp;
我已阅读<a @click="commitmentSubmit">《用户个人信息保护承诺书》</a> 我已阅读<a @click="commitmentSubmit">《用户个人信息保护承诺书》</a>
</div><br/> </div><br/>
<div class="register"><router-link :to="{path: '/user/register'}">找回密码</router-link></div> <div class="register"><router-link :to="{path: '/user/register'}">找回密码</router-link></div>
<a-form-item style="margin-top:24vw/@vw"> <a-form-item style="margin-top:24vw/@vw">
<a-button <a-button
size="large" size="large"
type="primary" type="primary"
htmlType="submit" htmlType="submit"
class="login-button" class="login-button"
@click.stop.prevent="handleSubmit" @click.stop.prevent="handleSubmit"
:disabled="!loginBtn">{{buttondata}} :disabled="!loginBtn">{{buttondata}}
</a-button> </a-button>
</a-form-item> </a-form-item>
</a-form> </a-form>
<two-step-captcha <two-step-captcha
v-if="requiredTwoStepCaptcha" v-if="requiredTwoStepCaptcha"
:visible="stepCaptchaVisible" :visible="stepCaptchaVisible"
@success="stepCaptchaSuccess" @success="stepCaptchaSuccess"
@cancel="stepCaptchaCancel"> @cancel="stepCaptchaCancel">
</two-step-captcha> </two-step-captcha>
<LeakProofModel :v-model="LeakProofModel"></LeakProofModel> <LeakProofModel :v-model="LeakProofModel"></LeakProofModel>
<commitment ref="commitment" :countNum="countNum" @appendData="appendData" v-show="commitment"></commitment> <commitment ref="commitment" :countNum="countNum" @appendData="appendData" v-show="commitment"></commitment>
</div>
</div> </div>
</div>
</template> </template>
<script> <script>
import TwoStepCaptcha from '@/components/tools/TwoStepCaptcha' import TwoStepCaptcha from '@/components/tools/TwoStepCaptcha'
import {mapActions} from "vuex" import {mapActions} from "vuex"
import { getPhoneCode } from "@/api/login" import { getPhoneCode } from "@/api/login"
import {timeFix} from "@/utils/util" import {timeFix} from "@/utils/util"
import Vue from 'vue' import Vue from 'vue'
import {ACCESS_TOKEN} from "@/store/mutation-types" import {ACCESS_TOKEN} from "@/store/mutation-types"
import JGraphicCode from '@/components/jeecg/JGraphicCode' import JGraphicCode from '@/components/jeecg/JGraphicCode'
import LeakProofModel from '@/views/user/protocol/Leak-proof-model' import LeakProofModel from '@/views/user/protocol/Leak-proof-model'
import commitment from '@/views/user/protocol/commitment' import commitment from '@/views/user/protocol/commitment'
import {setMaxDigits , RSAKeyPair , encryptedString} from '@/utils/RSA' import {setMaxDigits , RSAKeyPair , encryptedString} from '@/utils/RSA'
import AES from "@/api/AES.js"; import AES from "@/api/AES.js";
export default { export default {
components: { components: {
TwoStepCaptcha, TwoStepCaptcha,
JGraphicCode, JGraphicCode,
LeakProofModel, LeakProofModel,
commitment, commitment,
},
data() {
return {
flag:false,
LeakProofModel:true,
commitment:false,
countNum:0,
single:false,
buttondata:"登录",
customActiveKey: "tab1",
loginBtn: false,
// login type: 0 email, 1 username, 2 telephone
loginType: 0,
requiredTwoStepCaptcha: false,
stepCaptchaVisible: false,
form: this.$form.createForm(this),
updateTime:'',
formLogin: {
username: "",
password: "",
captcha: "",
mobile: ""
},
validatorRules: {
username: {rules: [{required: true, message: '请输入用户名!', validator: 'click'}]},
password: {rules: [{required: true, message: '请输入密码!', validator: 'click'}]},
mobile: {rules: [{validator: this.validateMobile}]},
captcha: {rule: [{required: true, message: '请输入验证码!'}]},
inputCode: {rules: [{required: true, message: '请输入验证码!'}, {validator: this.validateInputCode}]},
phoneCode: {rules: [{required: true, message: '请输入验证码!'}, {validator: this.validatephoneCode}]}
}, },
verifiedCode: "", data() {
inputCodeContent: "", return {
inputCodeNull: true, flag:false,
countdown: 0,// 倒计时秒数 LeakProofModel:true,
codeMsg: '获取验证码', // 按钮上的文字 commitment:false,
timer: null,// 定时器 countNum:0,
} single:false,
}, buttondata:"登录",
created() { customActiveKey: "tab1",
Vue.ls.remove(ACCESS_TOKEN) loginBtn: false,
this.getRouterData(); // login type: 0 email, 1 username, 2 telephone
}, loginType: 0,
methods: { requiredTwoStepCaptcha: false,
...mapActions(["Login", "Logout"]), stepCaptchaVisible: false,
// handler form: this.$form.createForm(this),
handleUsernameOrEmail(rule, value, callback) { updateTime:'',
const regex = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/; formLogin: {
if (regex.test(value)) { username: "",
this.loginType = 0 password: "",
} else { captcha: "",
this.loginType = 1 mobile: ""
} },
callback() validatorRules: {
}, username: {rules: [{required: true, message: '请输入用户名!', validator: 'click'}]},
handleTabClick(key) { password: {rules: [{required: true, message: '请输入密码!', validator: 'click'}]},
this.customActiveKey = key mobile: {rules: [{validator: this.validateMobile}]},
// this.form.resetFields() captcha: {rule: [{required: true, message: '请输入验证码!'}]},
}, inputCode: {rules: [{required: true, message: '请输入验证码!'}, {validator: this.validateInputCode}]},
getCode() { phoneCode: {rules: [{required: true, message: '请输入验证码!'}, {validator: this.validatephoneCode}]}
// 验证码60秒倒计时 },
if (!this.timer) { verifiedCode: "",
let username = encodeURIComponent(this.getPass(this.formLogin.username)); inputCodeContent: "",
let data = { inputCodeNull: true,
username: username, countdown: 0,// 倒计时秒数
} codeMsg: '获取验证码', // 按钮上的文字
getPhoneCode(data).then(res => { timer: null,// 定时器
if (res.code == 200) {
this.$notification.success({
message: res.message ? res.message :"发送成功",
});
return null;
}
this.$notification.error({
message: res.message ? res.message :"发送错误",
});
})
//初始化倒计时
this.countdown=60;
this.timer = setInterval(() => {
if (this.countdown > 0 && this.countdown <= 60) {
this.countdown--;
if (this.countdown !== 0) {
this.codeMsg = "重新发送(" + this.countdown + ")";
} else {
clearInterval(this.timer);
this.codeMsg = "获取验证码";
this.countdown = 0;
this.timer = null;
}
} }
}, 1000) },
} created() {
}, Vue.ls.remove(ACCESS_TOKEN)
this.getRouterData();
},
methods: {
...mapActions(["Login", "Logout"]),
// handler
handleUsernameOrEmail(rule, value, callback) {
const regex = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;
if (regex.test(value)) {
this.loginType = 0
} else {
this.loginType = 1
}
callback()
},
handleTabClick(key) {
this.customActiveKey = key
// this.form.resetFields()
},
getCode() {
// 验证码60秒倒计时
if (!this.timer) {
let username = encodeURIComponent(this.getPass(this.formLogin.username));
let data = {
username: username,
}
getPhoneCode(data).then(res => {
if (res.code == 200) {
this.$notification.success({
message: res.message ? res.message :"发送成功",
});
return null;
}
this.$notification.error({
message: res.message ? res.message :"发送错误",
});
})
//初始化倒计时
this.countdown=60;
this.timer = setInterval(() => {
if (this.countdown > 0 && this.countdown <= 60) {
this.countdown--;
if (this.countdown !== 0) {
this.codeMsg = "重新发送(" + this.countdown + ")";
} else {
clearInterval(this.timer);
this.codeMsg = "获取验证码";
this.countdown = 0;
this.timer = null;
}
}
}, 1000)
}
},
appendData(data) { appendData(data) {
this.single = data.single; this.single = data.single;
this.commitment = data.commitment; this.commitment = data.commitment;
}, },
commitmentSubmit(){ commitmentSubmit(){
if(!this.flag){ if(!this.flag){
this.countNum = 0; this.countNum = 0;
} }
this.commitment = true; this.commitment = true;
this.flag = true; this.flag = true;
this.$refs.commitment.setTimer(); this.$refs.commitment.setTimer();
}, },
handleSubmit() { handleSubmit() {
if(!this.flag){ if(!this.flag){
this.commitmentSubmit(); this.commitmentSubmit();
return; return;
} }
let that = this let that = this
let loginParams = { let loginParams = {
smsCode: "xxxx" smsCode: "xxxx"
}; };
// 使用账户密码登陆 // 使用账户密码登陆
that.form.validateFields(['username', 'password', 'inputCode',"phonecode"], {force: true}, (err, values) => { that.form.validateFields(['username', 'password', 'inputCode',"phonecode"], {force: true}, (err, values) => {
if (!err) { if (!err) {
loginParams.username = values.username; loginParams.username = values.username;
loginParams.password = encodeURIComponent(this.getPass(values.password)); loginParams.password = encodeURIComponent(this.getPass(values.password));
loginParams.remember = that.formLogin.remember; loginParams.remember = that.formLogin.remember;
loginParams.phonecode=encodeURIComponent(this.getPass(values.phonecode)); loginParams.phonecode=encodeURIComponent(this.getPass(values.phonecode));
//console.log(loginParams); //console.log(loginParams);
that.Login(loginParams).then((res) => { that.Login(loginParams).then((res) => {
this.updateTime = res.updateTime this.updateTime = res.updateTime
// console.log(res.updateTime) // console.log(res.updateTime)
this.departConfirm({}); this.departConfirm({});
}).catch((err) => { }).catch((err) => {
that.requestFailed(err); that.requestFailed(err);
}) })
} }
}) })
}, },
//密码加密 //密码加密
getPass(text){ getPass(text){
/*let keyss = setMaxDigits(130); /*let keyss = setMaxDigits(130);
keyss = new RSAKeyPair("10001","","a5d210338760bdbe2baabef73c410582e812dad8d9669d8c6ebfe026450e5cc10005290f17a0474c7351031edbff81bd8217a518bdf1a02855f53105ead0370e8a9e30b8560feab1d333a0b055b29419476b0eea1ea54315662ddfc46ec066f076e9490ec34c825afad9e44cf38e5ab600f3136acfe3a0ac0e672e2cb8e50371"); keyss = new RSAKeyPair("10001","","a5d210338760bdbe2baabef73c410582e812dad8d9669d8c6ebfe026450e5cc10005290f17a0474c7351031edbff81bd8217a518bdf1a02855f53105ead0370e8a9e30b8560feab1d333a0b055b29419476b0eea1ea54315662ddfc46ec066f076e9490ec34c825afad9e44cf38e5ab600f3136acfe3a0ac0e672e2cb8e50371");
let password = encryptedString(keyss,text);*/ let password = encryptedString(keyss,text);*/
// let publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCAcsbUyeRD2lQGPEnu5LbXOL2lycUJwK/8BsoZD3b932l4JehAvOKR/YNzs6EG4gnZ7gaXLCnWbE5kB1wuUooo6bv8fSAg0W5QmM1TH8zaIImdAaN6c8mw5dUS/2VJ/2GHI54R1NJziX9VHecpf2DrHnWngETsNytmXaVl3JiXywIDAQAB"; // let publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCAcsbUyeRD2lQGPEnu5LbXOL2lycUJwK/8BsoZD3b932l4JehAvOKR/YNzs6EG4gnZ7gaXLCnWbE5kB1wuUooo6bv8fSAg0W5QmM1TH8zaIImdAaN6c8mw5dUS/2VJ/2GHI54R1NJziX9VHecpf2DrHnWngETsNytmXaVl3JiXywIDAQAB";
// let encrypt = new window.JSEncrypt(); // let encrypt = new window.JSEncrypt();
// encrypt.setPublicKey(publicKey); // encrypt.setPublicKey(publicKey);
// var encryptPwd = encrypt.encryptLong(text); // var encryptPwd = encrypt.encryptLong(text);
// return encryptPwd; // return encryptPwd;
//return text; //return text;
let publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCAcsbUyeRD2lQGPEnu5LbXOL2lycUJwK/8BsoZD3b932l4JehAvOKR/YNzs6EG4gnZ7gaXLCnWbE5kB1wuUooo6bv8fSAg0W5QmM1TH8zaIImdAaN6c8mw5dUS/2VJ/2GHI54R1NJziX9VHecpf2DrHnWngETsNytmXaVl3JiXywIDAQAB"; let publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCAcsbUyeRD2lQGPEnu5LbXOL2lycUJwK/8BsoZD3b932l4JehAvOKR/YNzs6EG4gnZ7gaXLCnWbE5kB1wuUooo6bv8fSAg0W5QmM1TH8zaIImdAaN6c8mw5dUS/2VJ/2GHI54R1NJziX9VHecpf2DrHnWngETsNytmXaVl3JiXywIDAQAB";
var encrypts = AES.encrypt(text,publicKey); var encrypts = AES.encrypt(text,publicKey);
return encrypts; return encrypts;
// var dess = AES.decrypt(encrypts);解密 // var dess = AES.decrypt(encrypts);解密
}, },
stepCaptchaSuccess() { stepCaptchaSuccess() {
this.loginSuccess() this.loginSuccess()
}, },
stepCaptchaCancel() { stepCaptchaCancel() {
this.Logout().then(() => { this.Logout().then(() => {
this.loginBtn = false this.loginBtn = false
this.stepCaptchaVisible = false this.stepCaptchaVisible = false
}) })
}, },
loginSuccess() { loginSuccess() {
this.loginBtn = false this.loginBtn = false
this.$router.push({name: "dashboard"}) this.$router.push({name: "dashboard"})
this.$notification.success({ this.$notification.success({
message: '欢迎', message: '欢迎',
description: `${timeFix()},欢迎回来`, description: `${timeFix()},欢迎回来`,
}); });
}, },
cmsFailed(err) { cmsFailed(err) {
this.$notification['error']({ this.$notification['error']({
message: "登录失败", message: "登录失败",
description: err, description: err,
duration: 4, duration: 4,
}); });
}, },
requestFailed(err) { requestFailed(err) {
this.$notification['error']({ this.$notification['error']({
message: '登录失败', message: '登录失败',
description: ((err.response || {}).data || {}).message || err.message || "请求出现错误,请稍后再试", description: ((err.response || {}).data || {}).message || err.message || "请求出现错误,请稍后再试",
duration: 4, duration: 4,
}); });
// this.loginBtn = false; // this.loginBtn = false;
}, },
validateMobile(rule, value, callback) { validateMobile(rule, value, callback) {
if (!value || new RegExp(/^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/).test(value)) { if (!value || new RegExp(/^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/).test(value)) {
callback(); callback();
} else { } else {
callback("您的手机号码格式不正确!"); callback("您的手机号码格式不正确!");
} }
}, },
validateInputCode(rule, value, callback) { validateInputCode(rule, value, callback) {
if (!value || this.verifiedCode == this.inputCodeContent) { if (!value || this.verifiedCode == this.inputCodeContent) {
callback(); callback();
} else { } else {
this.loginBtn=false this.loginBtn=false
callback("您输入的验证码不正确!"); callback("您输入的验证码不正确!");
} }
}, },
validatephoneCode(rule, value, callback){ validatephoneCode(rule, value, callback){
callback(); callback();
}, },
generateCode(value) { generateCode(value) {
this.loginBtn=false; this.loginBtn=false;
this.verifiedCode = value.toLowerCase() this.verifiedCode = value.toLowerCase()
}, },
inputCodeChange(e) { inputCodeChange(e) {
this.inputCodeContent = e.target.value this.inputCodeContent = e.target.value
if (!e.target.value || 0 == e.target.value) { if (!e.target.value || 0 == e.target.value) {
this.inputCodeNull = true this.inputCodeNull = true
} else { } else {
this.inputCodeContent = this.inputCodeContent.toLowerCase() this.inputCodeContent = this.inputCodeContent.toLowerCase()
this.inputCodeNull = false this.inputCodeNull = false
} }
if (this.verifiedCode == this.inputCodeContent) { if (this.verifiedCode == this.inputCodeContent) {
this.form.validateFields(['username'], {force: true}, (err, values) => { this.form.validateFields(['username'], {force: true}, (err, values) => {
if (!err&&this.countdown==0) { if (!err&&this.countdown==0) {
clearInterval(this.timer); clearInterval(this.timer);
this.codeMsg = "获取验证码"; this.codeMsg = "获取验证码";
this.countdown = 60; this.countdown = 60;
this.timer = null; this.timer = null;
this.formLogin.username=values.username this.formLogin.username=values.username
this.getCode() this.getCode()
} }
this.loginBtn=true this.loginBtn=true
}) })
}
},
departConfirm() {
this.loginSuccess()
},
getRouterData() {
this.$nextTick(() => {
this.form.setFieldsValue({
'username': this.$route.params.username
});
})
},
} }
},
departConfirm() {
this.loginSuccess()
},
getRouterData() {
this.$nextTick(() => {
this.form.setFieldsValue({
'username': this.$route.params.username
});
})
},
} }
}
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
@import '~@/assets/less/style'; @import '~@/assets/less/style';
.main{ .main{
.code-button{ .code-button{
width:calc(100% - 10vw/@vw); width:calc(100% - 10vw/@vw);
height:68vw/@vw; height:68vw/@vw;
margin-left: 10vw/@vw; margin-left: 10vw/@vw;
background:#e6e6e6; background:#e6e6e6;
/*border-radius:40vw/@vw;*/ /*border-radius:40vw/@vw;*/
font-size:24vw/@vw; font-size:24vw/@vw;
font-family:PingFang SC; font-family:PingFang SC;
font-weight:bold; font-weight:bold;
color:#adadad; color:#adadad;
}
.caption{
width: 666vw/@vw;
height: 792vw/@vw;
background: url("~@/assets/bg_content_new.jpg") no-repeat center;
background-size: cover;
float: left;
}
.register{
margin-bottom: 10vw/@vw;
font-size: 12px;
width: 50px;
}
.form{
width: calc(100% - 666vw/@vw);
height: 792vw/@vw;
padding:80vw/@vw 80vw/@vw 0 60vw/@vw;
box-sizing: border-box;
float:left;
.form_title{
font-size:40vw/@vw;
font-family:PingFang SC;
font-weight:500;
color:rgba(51,51,51,1);
display: inline-block;
height: 55vw/@vw;
margin: 25vw/@vw 0vw/@vw 50vw/@vw 0;
border-bottom: 6vw/@vw solid #57bbff;
}
/deep/ .ant-form-item{
margin-bottom: 24vw/@vw;
}
@media (min-width: 1920px) {
/deep/.ant-input-affix-wrapper .ant-input-prefix{
font-size: 22vw/@vw;
top: 38% !important;
}
}
@media (min-width: 1400px) {
/deep/.ant-input-affix-wrapper .ant-input-prefix{
font-size: 22vw/@vw;
top: 40.5% !important;
} }
} .caption{
/deep/.ant-input-affix-wrapper .ant-input-prefix{ width: 666vw/@vw;
font-size: 22vw/@vw; height: 792vw/@vw;
top: 39%; background: url("~@/assets/bg_content_new.jpg") no-repeat center;
} background-size: cover;
/deep/ .user-layout-login div .ant-input{ float: left;
width:100%;
height:68vw/@vw;
margin-bottom: 15vw/@vw;
padding-left: 44vw/@vw;
background:rgba(245,245,245,1);
border:1vw/@vw solid rgba(221,221,221,1);
opacity:0.5;
border-radius:4vw/@vw;
&::-webkit-input-placeholder {
font-size:24vw/@vw;
font-family:PingFang SC;
font-weight:500;
color:#333;
line-height:88vw/@vw;
} }
&::-moz-placeholder { .register{
font-size:24vw/@vw; margin-bottom: 10vw/@vw;
font-family:PingFang SC; font-size: 12px;
font-weight:500; width: 50px;
color:#333;
line-height:88vw/@vw;
} }
&:-ms-input-placeholder { .form{
font-size:24vw/@vw; width: calc(100% - 666vw/@vw);
font-family:PingFang SC; height: 792vw/@vw;
font-weight:500; padding:80vw/@vw 80vw/@vw 0 60vw/@vw;
color:#333; box-sizing: border-box;
line-height:88vw/@vw; float:left;
.form_title{
font-size:40vw/@vw;
font-family:PingFang SC;
font-weight:500;
color:rgba(51,51,51,1);
display: inline-block;
height: 55vw/@vw;
margin: 25vw/@vw 0vw/@vw 50vw/@vw 0;
border-bottom: 6vw/@vw solid #57bbff;
}
/deep/ .ant-form-item{
margin-bottom: 24vw/@vw;
}
@media (min-width: 1920px) {
/deep/.ant-input-affix-wrapper .ant-input-prefix{
font-size: 22vw/@vw;
top: 38% !important;
}
}
@media (min-width: 1400px) {
/deep/.ant-input-affix-wrapper .ant-input-prefix{
font-size: 22vw/@vw;
top: 40.5% !important;
}
}
/deep/.ant-input-affix-wrapper .ant-input-prefix{
font-size: 22vw/@vw;
top: 39%;
}
/deep/ .user-layout-login div .ant-input{
width:100%;
height:68vw/@vw;
margin-bottom: 15vw/@vw;
padding-left: 44vw/@vw;
background:rgba(245,245,245,1);
border:1vw/@vw solid rgba(221,221,221,1);
opacity:0.5;
border-radius:4vw/@vw;
&::-webkit-input-placeholder {
font-size:24vw/@vw;
font-family:PingFang SC;
font-weight:500;
color:#333;
line-height:88vw/@vw;
}
&::-moz-placeholder {
font-size:24vw/@vw;
font-family:PingFang SC;
font-weight:500;
color:#333;
line-height:88vw/@vw;
}
&:-ms-input-placeholder {
font-size:24vw/@vw;
font-family:PingFang SC;
font-weight:500;
color:#333;
line-height:88vw/@vw;
}
}
/deep/ #gc-canvas{
height: 67vw/@vw;
}
/deep/ .user-layout-login button.login-button{
width:595vw/@vw;
height:80vw/@vw;
background:rgba(87,148,255,1);
border-radius:40vw/@vw;
font-size:36vw/@vw;
font-family:PingFang SC;
font-weight:bold;
color:rgba(255,255,255,1);
}
} }
}
/deep/ #gc-canvas{
height: 67vw/@vw;
}
/deep/ .user-layout-login button.login-button{
width:595vw/@vw;
height:80vw/@vw;
background:rgba(87,148,255,1);
border-radius:40vw/@vw;
font-size:36vw/@vw;
font-family:PingFang SC;
font-weight:bold;
color:rgba(255,255,255,1);
}
} }
}
/*.user-layout-login { /*.user-layout-login {
margin-top: 20px; margin-top: 20px;
label { label {
font-size: 14px; font-size: 14px;
} }
.getCaptcha { .getCaptcha {
display: block; display: block;
width: 100%; width: 100%;
height: 40px; height: 40px;
} }
.forge-password { .forge-password {
font-size: 14px; font-size: 14px;
} }
button.login-button { button.login-button {
padding: 0 15px; padding: 0 15px;
font-size: 16px; font-size: 16px;
height: 40px; height: 40px;
width: 100%; width: 100%;
} }
.user-login-other { .user-login-other {
text-align: left; text-align: left;
margin-top: 24px; margin-top: 24px;
line-height: 22px; line-height: 22px;
.item-icon { .item-icon {
font-size: 24px; font-size: 24px;
color: rgba(0, 0, 0, .2); color: rgba(0, 0, 0, .2);
margin-left: 16px; margin-left: 16px;
vertical-align: middle; vertical-align: middle;
cursor: pointer; cursor: pointer;
transition: color .3s; transition: color .3s;
&:hover { &:hover {
color: #1890ff; color: #1890ff;
}
} }
}
.register { .register {
float: right; float: right;
}
} }
} }*/
}*/
</style> </style>
<style> <style>
.valid-error .ant-select-selection__placeholder { .valid-error .ant-select-selection__placeholder {
color: #f5222d; color: #f5222d;
} }
.ant-modal-wrap{ .ant-modal-wrap{
top:10% top:10%
} }
</style> </style>
This source diff could not be displayed because it is too large. You can view the blob instead.
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