master
yujialong 1 month ago
parent 86457cbb21
commit 1c1d4ab585
  1. 7
      src/api/index.js
  2. BIN
      src/assets/images/login/account.png
  3. BIN
      src/assets/images/login/code.png
  4. 1
      src/assets/images/login/correct.svg
  5. BIN
      src/assets/images/login/female.png
  6. BIN
      src/assets/images/login/male.png
  7. BIN
      src/assets/images/login/password.png
  8. BIN
      src/assets/images/login/school.png
  9. BIN
      src/assets/images/login/workNumber.png
  10. BIN
      src/assets/images/shapes/shape1.png
  11. BIN
      src/assets/images/shapes/shape2.png
  12. BIN
      src/assets/images/shapes/shape3.png
  13. BIN
      src/assets/images/shapes/shape4.png
  14. BIN
      src/assets/images/shapes/shape5.png
  15. BIN
      src/assets/images/shapes/shape6.png
  16. BIN
      src/assets/images/shapes/shape7.png
  17. BIN
      src/assets/images/shapes/shape8.png
  18. BIN
      src/assets/images/shapes/shape9.png
  19. 1
      src/libs/auth/generateBtnPermission.js
  20. 250
      src/pages/account/login/accountApply.vue
  21. 585
      src/pages/account/login/index.vue
  22. 11
      src/router/routes.js
  23. 3
      src/setting.js

@ -2,6 +2,13 @@ import Setting from '@/setting'
const { apiBaseURL: host } = Setting
export default {
login: `/users/users/user/login`,
verification: `${host}/users/users/user/captcha`,
sendPhoneVerificationCode: `/users/users/user/sendPhoneVerificationCode`,
forgotPassword: `/users/users/user/forgotPassword`,
forgotPreVerification: `/users/users/user/forgotPreVerification`,
sendPhoneVerificationCode: `/users/users/user/sendPhoneVerificationCode`,
getUserRolesPermissionMenu: `/users/users/user-role/getUserRolesPermissionMenu`,
getCurrentTime: `/competition/competition/management/getCurrentTime`,
encrypt: `/nakadai/data/encrypt`,

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 B

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725866385135" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="17452" width="20" height="20" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M513.365333 170.666667C300.928 170.666667 128 342.229333 128 554.666667s171.562667 384 384 384 384-171.562667 384-384c1.365333-212.437333-170.24-384-382.634667-384z m-21.888 544.384a33.024 33.024 0 0 1-39.893333 5.12c-2.56-1.28-5.12-2.56-6.4-5.12L323.157333 576a32.597333 32.597333 0 0 1 0-46.293333 32.597333 32.597333 0 0 1 46.336 0l98.816 115.84 212.224-212.181334a32.597333 32.597333 0 0 1 46.293334 0 32.597333 32.597333 0 0 1 0 46.293334l-235.349334 235.349333z" fill="#5DCB5A" p-id="17453"></path></svg>

After

Width:  |  Height:  |  Size: 842 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 796 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 885 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 541 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 912 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -15,7 +15,6 @@ function createAuth (data, auth) {
}
export default function (data) {
console.log("🚀 ~ data:", data)
createAuth(data)
store.commit('auth/addBtnAuth', result)
}

@ -0,0 +1,250 @@
<template>
<!-- 赛事报名-账号申请 -->
<div>
<el-dialog title="账号申请" :visible.sync="accountVisible" :close-on-click-modal="false" width="500px"
@close="accountClose" @closed="closeDia">
<el-form class="dia-form" ref="accountForm" label-width="110px" :model="accountForm" :rules="accountRules">
<el-form-item prop="schoolId" label="所属院校">
<el-select class="w-100" v-model="accountForm.schoolId" filterable placeholder="请选择院校" @change="schoolChange">
<el-option v-for="(item, i) in schoolList" :key="i" :label="item.schoolName"
:value="item.schoolId"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="workNumber" label="学号">
<el-input placeholder="申请后无法修改,请确认填写正确" v-model="accountForm.workNumber"
@change="workNumberChange"></el-input>
</el-form-item>
<el-form-item prop="userName" label="姓名">
<el-input placeholder="请输入姓名" v-model="accountForm.userName" :disabled="formEnable"></el-input>
</el-form-item>
<el-form-item prop="phone" label="手机号">
<el-input placeholder="请输入手机号" maxlength="11" v-model.trim="accountForm.phone"
:disabled="formEnable"></el-input>
</el-form-item>
<el-form-item prop="code" label="验证码">
<div class="ver-code">
<el-input v-model="accountForm.code" placeholder="请输入验证码" maxlength="6" :disabled="formEnable"></el-input>
<el-button style="top: 1px" type="text" @click="sendCode" :disabled="phoneDisabled && formEnable">{{
phoneBtnText }}
</el-button>
</div>
</el-form-item>
<el-form-item prop="password" label="登录密码">
<el-input placeholder="请输入登录密码" type="password" maxlength="6" v-model="accountForm.password"
:disabled="formEnable"></el-input>
</el-form-item>
<el-form-item prop="rePassword" label="确认登录密码">
<el-input placeholder="请再次输入登录密码" type="password" maxlength="6" v-model="accountForm.rePassword"
:disabled="formEnable"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button v-if="!formEnable" size="small" type="primary" @click="accountSubmit">申请</el-button>
<el-button size="small" @click="accountVisible = false">取消</el-button>
</span>
</el-dialog>
<!-- 购买弹框 -->
<el-dialog title="温馨提示" :visible.sync="buyVisible" width="400px" center :close-on-click-modal="false">
<div class="buy">
<p class="tips">您所选择的院校暂未在本平台开通组织账号请通知院校老师联系下方二维码客服咨询</p>
<img src="@/assets/img/wechat-code.jpeg" alt="">
</div>
</el-dialog>
</div>
</template>
<script>
import Setting from '@/setting'
import Util from '@/libs/util'
export default {
props: ['visible'],
data () {
const workNumberPass = (rule, value, callback) => {
const val = this.accountForm.workNumber
if (val === '') {
callback(new Error('请输入学号'))
} else {
const pattern = /^[A-Za-z0-9]*$/
if (pattern.test(val)) {
callback()
} else {
callback(new Error('请输入正确学号格式'))
}
}
}
const phonePass = (rule, value, callback) => {
const val = this.accountForm.phone
if (val === '') {
callback(new Error('请输入手机号'))
} else {
if (this.phoneReg.test(val)) {
callback()
} else {
callback(new Error('请输入正确手机号格式'))
}
}
}
return {
accountVisible: false,
formEnable: true,
schoolList: [],
accountForm: {
schoolId: '',
account: '',
code: '',
password: '',
rePassword: '',
phone: '',
userName: '',
workNumber: '',
uniqueIdentification: Date.now()
},
accountRules: {
schoolId: [{ required: true, message: "请选择所属院校", trigger: "change" }],
userName: [{ required: true, message: "请输入姓名", trigger: "blur" }],
workNumber: [{ required: true, validator: workNumberPass, trigger: "blur" }],
phone: [{ required: true, validator: phonePass, trigger: "blur" }],
password: [{ required: true, message: "请输入密码", trigger: "blur" }],
rePassword: [{ required: true, message: "请再次输入密码", trigger: "blur" }],
code: [{ required: true, message: "请输入验证码", trigger: "blur" }]
},
phoneDisabled: false,
phoneTimer: null,
phoneOpener: '',
phoneBtnText: '发送验证码',
buyVisible: false,
submiting: false,
};
},
watch: {
visible () {
this.accountVisible = this.visible
}
},
mounted () {
localStorage.getItem('toMatch') && this.getSchool()
},
methods: {
//
getSchool () {
this.$get(this.api.querySchool, {
provinceId: '',
cityId: ''
}).then(({ list }) => {
this.schoolList = list
}).catch(res => { })
},
//
workNumberChange () {
const form = this.accountForm
form.schoolId && form.workNumber && this.$get(`${this.api.enquireAboutSchoolStudents}?schoolId=${form.schoolId}&workNumber=${form.workNumber}&applyFor=1`).then(({ account }) => {
if (account) this.form = account
this.formEnable = !!account
}).catch(res => {
this.formEnable = true
})
},
//
schoolChange (schoolId) {
this.$get(this.api.getCustomerBySchoolId, {
schoolId
}).then(res => {
if (!res) {
this.accountVisible = false
this.buyVisible = true
}
}).catch(res => { })
},
//
sendCode () {
const { phone } = this.accountForm
//
phone && this.$get(`${this.api.checkPhoneOrEmailExist}?phone=${phone}&type=1&email=`).then(res => {
if (res) return Util.errorMsg('手机号已存在,请更换手机号!')
if (!this.verifyPhone(phone)) return false
this.$post(`${this.api.sendPhoneVerificationCode}?phoneOrEmail=${phone}&loginOrBind=1&platform=${Setting.platformId}`).then(({ message }) => {
Util.successMsg(message)
this.phoneCountdown()
}).catch(res => { })
}).catch(res => { })
},
//
phoneCountdown () {
let count = 60
if (!this.phoneTimer) {
this.phoneDisabled = true
this.phoneTimer = setInterval(() => {
if (count > 0) {
count--
this.phoneBtnText = `${count}秒后重试`
} else {
this.phoneDisabled = false
clearInterval(this.phoneTimer)
this.phoneTimer = null
this.phoneBtnText = `发送验证码`
}
}, 1000)
}
},
//
accountSubmit () {
this.$refs.accountForm.validate(valid => {
if (valid) {
const form = this.accountForm
if (form.password !== form.rePassword) return Util.errorMsg('两次输入的密码不一致,请重新输入!')
// id-id-schoolId-workNumber
form.account = `${Setting.platformId}-1-${form.schoolId}-${form.workNumber}`
this.$post(this.api.studentAccountApplication, form).then(res => {
this.accountVisible = false
Util.successMsg('账号申请已提交,需管理员审核,请10分钟后再登录')
}).catch(res => { })
}
})
},
//
accountClose () {
this.accountForm = {
schoolId: '',
account: '',
code: '',
password: '',
rePassword: '',
phone: '',
userName: '',
workNumber: '',
uniqueIdentification: Date.now()
}
},
//
closeDia () {
this.$emit('update:visible', false)
}
}
};
</script>
<style lang="scss" scoped>
.ver-code {
position: relative;
.el-button {
position: absolute;
top: 10px;
right: 10px;
}
}
.buy {
text-align: center;
.tips {
margin-bottom: 10px;
font-size: 14px;
}
img {
width: 85%;
}
}
</style>

@ -0,0 +1,585 @@
<template>
<div class="wrap">
<div class="login">
<div class="form">
<ul class="tab">
<li v-for="(item, i) in tabList" :key="i" :class="{ active: active == item.id }" @click="typeClick(item)">{{
item.label }}</li>
</ul>
<el-form :model="form" :rules="rules" ref="form" style="margin-top: 20px">
<el-form-item prop="account" ref="phoneItem">
<label class="label account"></label>
<el-input v-model.trim="form.account" placeholder="请输入手机号" @input="val => checkAccountByPhone(val, 0)"
@keyup.enter.native="submit">
<img v-if="verFormEnable" slot="suffix" class="correct-icon" src="@/assets/images/login/correct.svg"
alt="">
</el-input>
<p v-if="diaClientMsg" class="el-form-item__error">{{ diaClientMsg }}</p>
</el-form-item>
<el-form-item v-if="active" prop="code">
<label class="label code"></label>
<div class="ver-code">
<el-input v-model="form.code" placeholder="请输入验证码" maxlength="6" :disabled="!verFormEnable"
@keyup.enter.native="submit"></el-input>
<el-button type="text" @click="sendPhoneCodeLogin" :disabled="phoneDisabledLogin || !verFormEnable">{{
phoneBtnTextLogin
}}
</el-button>
</div>
</el-form-item>
<template v-else>
<el-form-item class="relative" prop="password">
<label class="password label"></label>
<el-input type="password" placeholder="请输入密码" v-model.trim="form.password" @keyup.enter.native="submit" />
<el-link class="resetPw" :underline="false" type="primary" @click="showResetPw">忘记密码</el-link>
</el-form-item>
<el-form-item prop="code">
<label class="label code"></label>
<el-input placeholder="请输入验证码" v-model.trim="form.code" @keyup.enter.native="submit">
</el-input>
<img @click="getVerImg" :src="verificationIMG" class="ver-img" alt="">
</el-form-item>
</template>
<el-button class="submit" type="primary" @click="submit">登录</el-button>
</el-form>
</div>
<div class="agree">
<div class="agreement">
<h6>专家评审承诺书</h6>
<div class="text">
<p class="line">本人受邀自愿参加2020年安徽省大学生金融投资创新大赛工作为进一步提高廉洁自律意识客观公正的履行职责我以大赛专家的身份和荣誉郑重作出如下承诺</p>
<p class="line">1.尊重大赛组委会及秘书处尊重仲裁尊重参赛单位和选手客观公正地履行职责</p>
<p class="line">2.遵守道德遵守大赛纪律在确定大赛专家身份后至大赛结束前不私下接触参赛单位和个人不参与以大赛名义举办的收费培训不收受他人的财物或其他好处</p>
<p class="line">3.遵守竞赛管理规定中的保密协议不透漏与大赛有关的涉密信息</p>
<p class="line">4.遵守公正公平原则不干预裁判工作不影响比赛成绩不给参赛选手或单位的违纪行为说情解脱</p>
<p class="line">5.不隐瞒按规定应该回避的事项</p>
<p class="line">6.不发表不传播没有根据并对大赛产生不利影响的言论</p>
<p class="line">7.对于涉嫌泄密事宜愿接受协助配合相关部门的监督检查并履行举证义务</p>
<p class="line">8.如若发生上述问题自愿承担相关责任</p>
<p class="line">特此承诺</p>
<p class="line">勾选后才可登录</p>
</div>
</div>
<el-checkbox class="m-t-15 m-l-20" v-model="agreeCheck">同意我已阅读</el-checkbox>
</div>
</div>
<el-dialog title="重设密码" :visible.sync="resetPwVisible" :close-on-click-modal="false" width="500px">
<el-form class="dia-form" ref="pwForm" label-width="110px" :model="pwForm" :rules="pwRules">
<el-form-item prop="phoneOrEmail" label="手机号/邮箱" ref="diaPhoneItem">
<el-input placeholder="请输入手机号/邮箱" v-model.trim="pwForm.phoneOrEmail"
@input="val => checkAccountByPhone(val, 1)">
<img v-if="diaClientExist" slot="suffix" style="margin-top: -6px;" src="@/assets/images/login/correct.svg"
alt="">
</el-input>
<p v-if="diaClientMsg" class="el-form-item__error">{{ diaClientMsg }}</p>
</el-form-item>
<el-form-item prop="code" label="验证码">
<div class="ver-code">
<el-input v-model="pwForm.code" placeholder="请输入验证码" maxlength="6" :disabled="!diaClientExist"></el-input>
<el-button style="top: 1px" type="text" @click="sendCodePw" :disabled="phoneDisabled || !diaClientExist">{{
phoneBtnText }}
</el-button>
</div>
</el-form-item>
<el-form-item prop="newPassword" label="登录密码">
<el-input placeholder="请输入登录密码" type="password" maxlength="6" v-model="pwForm.newPassword"></el-input>
</el-form-item>
<el-form-item prop="newPasswordTwo" label="确认登录密码">
<el-input placeholder="请再次输入登录密码" type="password" maxlength="6" v-model="pwForm.newPasswordTwo"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button v-if="diaClientExist" size="small" type="primary" @click="pwSubmit">确定</el-button>
<el-button size="small" @click="resetPwVisible = false">取消</el-button>
</span>
</el-dialog>
<!-- <AccountApplyMatch :visible.sync="accountApplyMatchVisible" /> -->
</div>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex'
import Util from '@/libs/util'
import Setting from "@/setting";
export default {
data: function () {
return {
tabList: [
{
id: 0,
label: '密码登录'
}, {
id: 1,
label: '验证码登录'
}
],
active: 0,
phoneReg: /^1[3456789]\d{9}$/,
mailReg: /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/,
verificationIMG: '',
form: {
workNumber: '',
account: '', //
password: '',
code: '', //
random: '', //
platform: 3,
distinguish: 1,
},
rules: {
account: [{ required: true, message: "请输入手机号", trigger: "blur" }],
password: [{ required: true, message: "请输入密码", trigger: "blur" }],
code: [{ required: true, message: "请输入验证码", trigger: "blur" }]
},
verFormEnable: false,
verCodeLogin: false,
phoneDisabledLogin: false,
phoneTimerLogin: null,
phoneBtnTextLogin: '发送验证码',
phoneVisible: false,
phone: '',
phoneCode: '',
phoneDisabled: false,
phoneTimer: null,
phoneOpener: '',
phoneBtnText: '发送验证码',
agreeCheck: false,
resetPwVisible: false,
diaClientExist: false,
diaClientMsg: '',
pwForm: {
code: '',
newPassword: '',
newPasswordTwo: '',
phoneOrEmail: '',
},
pwRules: {
phoneOrEmail: [{ required: true, message: "请输入手机号/邮箱", trigger: "blur" }],
password: [{ required: true, message: "请输入密码", trigger: "blur" }],
rePassword: [{ required: true, message: "请再次输入密码", trigger: "blur" }],
code: [{ required: true, message: "请输入验证码", trigger: "blur" }]
},
};
},
computed: {
...mapState('project', [
'courseId'
])
},
mounted () {
localStorage.removeItem('opened')
this.getVerImg()
//
this.$once("hook:beforeDestroy", function () {
clearInterval(this.phoneTimer)
clearInterval(this.phoneTimerLogin)
this.phoneTimer = null
this.phoneTimerLogin = null
})
},
methods: {
getVerImg () { //
this.form.random = Math.floor(Math.random() * 999999999);
this.verificationIMG = this.api.verification + "?random=" + `${this.form.random}`;
},
//
typeClick (tab) {
const { id } = tab
const form = this.form
//
this.form = {
workNumber: '',
account: '',
password: '',
code: '',
random: form.random,
distinguish: id,
platform: form.platform
}
this.rules.password[0].required = !id
this.active = id
this.$refs.form.clearValidate()
},
//
submit () {
if (!this.agreeCheck) return Util.errorMsg('请勾选同意,才可继续登录!')
this.$refs.form.validate(valid => {
if (valid) {
const form = JSON.parse(JSON.stringify(this.form))
this.$post(this.api.login, form).then(({ status, data, message }) => {
//
if (status == 30001) {
this.phoneVisible = true
this.getVerImg()
form.code = ''
} else if (status == 200) {
Util.local.set(Setting.tokenKey, this.token, Setting.tokenExpires)
Util.successMsg('登录成功')
this.$router.replace(`/myReview`)
}
}).catch(res => {
form.code = ''
this.getVerImg()
})
}
});
},
//
verifyPhone (phone) {
if (!phone) {
this.$message.error("请输入手机号")
return false
}
if (!this.phoneReg.test(phone) && !this.mailReg.test(phone)) {
this.$message.error("请输入正确的手机号/邮箱")
return false
}
return true
},
//
showResetPw () {
this.pwForm = {
code: '',
newPassword: '',
newPasswordTwo: '',
phoneOrEmail: '',
}
this.diaClientExist = false
this.resetPwVisible = true
this.diaClientMsg = ''
},
//
async sendCodePw () {
const { phoneOrEmail } = this.pwForm
if (!this.verifyPhone(phoneOrEmail)) return false
const { message } = await this.$post(`${this.api.sendPhoneVerificationCode}?phoneOrEmail=${phoneOrEmail}&loginOrBind=1&platform=${Setting.platformId}`)
Util.successMsg(message)
this.phoneCountdown()
},
//
pwSubmit () {
this.$refs.pwForm.validate(valid => {
if (valid) {
const form = this.pwForm
if (form.password !== form.rePassword) return Util.errorMsg('两次输入的密码不一致,请重新输入!')
form.platform = Setting.platformId
this.$post(this.api.forgotPassword, form).then(res => {
this.resetPwVisible = false
Util.successMsg('密码重置成功!请重新登录。')
}).catch(res => { })
}
})
},
// type01
async checkAccountByPhone (val, type) {
if (!this.phoneReg.test(val) && !this.mailReg.test(val)) {
this.$refs[type ? 'diaPhoneItem' : 'phoneItem'].clearValidate()
this.diaClientMsg = '请输入正确的手机号'
this[type ? 'diaClientExist' : 'verFormEnable'] = false
return false
}
try {
const { message } = await this.$get(`${this.api.forgotPreVerification}?phoneOrEmail=${val}&platform=${Setting.platformId}`)
const exist = message === 'success' //
this[type ? 'diaClientExist' : 'verFormEnable'] = exist
this.diaClientMsg = exist ? '' : message
} catch (e) {
this[type ? 'diaClientExist' : 'verFormEnable'] = false
this.diaClientMsg = e.message
}
},
//
phoneCountdownLogin () {
let count = 60
if (!this.phoneTimerLogin) {
this.phoneDisabledLogin = true
this.phoneTimerLogin = setInterval(() => {
if (count > 0) {
count--
this.phoneBtnTextLogin = `${count}秒后重试`
} else {
this.phoneDisabledLogin = false
clearInterval(this.phoneTimerLogin)
this.phoneTimerLogin = null
this.phoneBtnTextLogin = `发送验证码`
}
}, 1000)
}
},
//
sendPhoneCodeLogin () {
const phone = this.form.account
if (!this.verifyPhone(phone)) return false
this.$post(`${this.api.sendPhoneVerificationCode}?phoneOrEmail=${phone}&loginOrBind=0&platform=${Setting.platformId}`).then(({ message }) => {
Util.successMsg(message)
this.phoneCountdownLogin()
}).catch(res => { })
},
//
phoneCountdown () {
let count = 60
if (!this.phoneTimer) {
this.phoneDisabled = true
this.phoneTimer = setInterval(() => {
if (count > 0) {
count--
this.phoneBtnText = `${count}秒后重试`
} else {
this.phoneDisabled = false
clearInterval(this.phoneTimer)
this.phoneTimer = null
this.phoneBtnText = `发送验证码`
}
}, 1000)
}
},
}
};
</script>
<style scoped lang="scss">
.wrap {
min-height: 100%;
background-color: #f3f6fa;
}
.ver-code {
position: relative;
.el-button {
position: absolute;
top: 10px;
right: 10px;
}
}
.login {
display: flex;
justify-content: center;
align-items: center;
min-height: calc(100vh - 43px);
padding-top: calc((100vh - 584px) / 2);
background: url(../../../assets/images/shapes/shape1.png) (0 123px) / auto no-repeat,
url(../../../assets/images/shapes/shape2.png) (35px 238px) / auto no-repeat,
url(../../../assets/images/shapes/shape3.png) (0 485px) / auto no-repeat,
url(../../../assets/images/shapes/shape4.png) (right 50%) / auto no-repeat,
url(../../../assets/images/shapes/shape5.png) (right 80%) / auto no-repeat,
url(../../../assets/images/shapes/shape6.png) (right bottom) / auto no-repeat;
.agree {
width: 500px;
padding-bottom: 20px;
background-color: #062c87;
/deep/.el-checkbox {
color: #fff;
.el-checkbox__label {
color: #fff;
}
.el-checkbox__input.is-checked .el-checkbox__inner {
background-color: #cd4c01;
border-color: #cd4c01;
}
}
}
.agreement {
height: 394px;
padding: 20px;
overflow: auto;
h6 {
margin-bottom: 10px;
font-size: 20px;
font-weight: 600;
color: #fff;
}
.text {
color: #fff;
line-height: 1.6;
}
.line {
margin-top: 7px;
}
}
.tab {
display: flex;
justify-content: space-around;
align-items: center;
margin-bottom: 24px;
border-bottom: 2px solid #e1e6f2;
li {
padding: 18px 0;
// margin: 0 20px -1px 0;
margin-bottom: -1px;
font-size: 16px;
color: #555;
cursor: pointer;
border-bottom: 4px solid transparent;
&:last-child {
margin-right: 0;
}
&.active {
color: $main-color;
border-bottom-color: $main-color;
}
}
}
.items {
display: flex;
align-items: center;
}
.form {
width: 436px;
padding: 20px 38px 50px;
border-radius: 6px;
background-color: #fff;
.title {
margin-bottom: 25px;
font-size: 26px;
color: #0b1d30;
letter-spacing: 4px;
}
}
/deep/.el-form-item {
margin-bottom: 20px;
}
/deep/.el-input__inner {
position: relative;
height: 52px;
padding: 0 20px 0 34px;
line-height: 50px;
background-color: #fbfbfb;
border-color: #e1e6f2;
border-radius: 4px !important;
&:focus {
border-color: $main-color;
box-shadow: 0 0 2px #4486e9;
}
}
.resetPw {
position: absolute;
top: 10px;
right: 10px;
}
.bottom {
display: flex;
justify-content: space-between;
}
.el-select {
width: 100%;
}
.label {
z-index: 1;
position: absolute;
top: 17px;
left: 11px;
width: 18px;
height: 18px;
background: url(../../../assets/images/login/account.png) 0 0/100% 100% no-repeat;
}
.correct-icon {
width: 30px;
margin: 11px 3px 0 0;
}
.school {
background-image: url(../../../assets/images/login/school.png);
}
.workNumber {
width: 17px;
background-image: url(../../../assets/images/login/workNumber.png);
}
.password {
top: 18px;
background-image: url(../../../assets/images/login/password.png);
}
.code {
top: 18px;
background-image: url(../../../assets/images/login/code.png);
}
.ver-img {
position: absolute;
top: 2px;
right: 2px;
}
/deep/.el-form-item__error {
top: 105%;
left: auto;
right: 0;
color: #ffa94e;
}
.submit {
width: 100%;
height: 48px;
margin-top: 30px;
line-height: 48px;
padding: 0;
font-size: 20px;
background-color: $main-color;
border-radius: 4px;
border: 0;
}
}
/deep/.dia-form {
.w-100 {
width: 100%;
}
.tips {
display: flex;
justify-content: center;
align-items: center;
}
.err-msg {
font-size: 12px;
color: #F56C6C;
line-height: 1;
}
}
@media (max-height: 680px) {
.wrap .login {
padding: 40px 0;
}
}
</style>

@ -32,7 +32,16 @@ const frameIn = [
* 在主框架之外显示
*/
const frameOut = [];
const frameOut = [
{
path: '/login',
name: 'login',
meta: {
title: "登录"
},
component: () => import('@/pages/account/login')
},
];
/**
* 错误页面
*/

@ -14,7 +14,8 @@ const Setting = {
/**
* 基础配置
* */
titleSuffix: '评阅中心', // 网页标题的后缀
platformId: 3,
titleSuffix: '专家评阅平台', // 网页标题的后缀
routerMode: "hash", // 路由模式,可选值为 history 或 hash
showProgressBar: true, // 页面切换时,是否显示模拟的进度条
apiBaseURL: host, // 接口请求地址

Loading…
Cancel
Save