parent
c8b0df3774
commit
28d2a2b6fb
14 changed files with 78 additions and 413 deletions
@ -1,328 +0,0 @@ |
||||
<template> |
||||
<div class="wrap"> |
||||
<div class="main"> |
||||
<div class="box"> |
||||
<el-tabs v-model="activeName" @tab-click="handleClick"> |
||||
<el-tab-pane label="账号登录" name="1"></el-tab-pane> |
||||
<el-tab-pane label="手机号/邮箱登录" name="2"></el-tab-pane> |
||||
<el-form :model="loginForm" :rules="loginRules" ref="loginForm" style="margin-top: 20px"> |
||||
<el-form-item v-if="activeName === '1'" prop="account"> |
||||
<el-input v-model.trim="loginForm.account" placeholder="请输入账号"></el-input> |
||||
</el-form-item> |
||||
<el-form-item v-if="activeName === '2'" prop="account"> |
||||
<el-input v-model.trim="loginForm.account" placeholder="请输入手机号/邮箱"></el-input> |
||||
</el-form-item> |
||||
<el-form-item prop="password"> |
||||
<el-input type="password" placeholder="请输入密码" v-model.trim="loginForm.password"> |
||||
</el-input> |
||||
</el-form-item> |
||||
<el-form-item prop="code"> |
||||
<el-input placeholder="请输入验证码" v-model.trim="loginForm.code" @keyup.enter.native="submitFormLogin"> |
||||
</el-input> |
||||
<img @click="getVerImg" :src="verificationIMG" class="verification" alt=""> |
||||
</el-form-item> |
||||
<el-button class="submit" type="primary" @click="submitFormLogin">马上登录</el-button> |
||||
</el-form> |
||||
</el-tabs> |
||||
</div> |
||||
</div> |
||||
|
||||
<el-dialog title="绑定手机号" :visible.sync="phoneVisible" :close-on-click-modal="false" width="30%"> |
||||
<div style='padding: 0 13px 20px 13px;'> |
||||
依据国家政策法规,需绑定手机号进行网络实名才可登录使用本平台 |
||||
</div> |
||||
<el-form ref="form" label-width="60px"> |
||||
<el-form-item label="手机号"> |
||||
<el-input style="width: 100%;" placeholder="请输入手机号" v-model="phone" maxlength="11"></el-input> |
||||
</el-form-item> |
||||
<el-form-item label="验证码"> |
||||
<div style="display: flex;"> |
||||
<el-input v-model="phoneCode" placeholder="请输入验证码" maxlength="6"></el-input> |
||||
<el-button style="margin-left: 10px" type="text" @click="sendPhoneCode" :disabled="phoneDisabled">{{ |
||||
phoneBtnText }} |
||||
</el-button> |
||||
</div> |
||||
</el-form-item> |
||||
</el-form> |
||||
<span slot="footer" class="dialog-footer"> |
||||
<el-button @click="phoneVisible = false">取 消</el-button> |
||||
<el-button type="primary" @click="phoneSubmit">确 定</el-button> |
||||
</span> |
||||
</el-dialog> |
||||
<v-footer class="footer"></v-footer> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import { mapActions, mapMutations } from "vuex"; |
||||
import vFooter from "@/layouts/footer"; |
||||
import util from "@/libs/util"; |
||||
import Setting from "@/setting"; |
||||
|
||||
export default { |
||||
data: function () { |
||||
return { |
||||
activeName: "1", |
||||
loginForm: { |
||||
account: "", |
||||
password: "", |
||||
code: "", // 验证码 |
||||
random: "", // 随机数 |
||||
distinguish: 1, // 区分手机号账号登录,1为账号登录,2为手机号或邮箱登录 |
||||
type: 0, // 平台端区分:0->教师端 1->学生端 2->无端 |
||||
platform: Setting.platformId |
||||
}, |
||||
loginRules: { |
||||
account: [{ required: true, message: "请输入账号", trigger: "blur" }], |
||||
password: [{ required: true, message: "请输入密码", trigger: "blur" }], |
||||
code: [{ required: true, message: "请输入验证码", trigger: "blur" }] |
||||
}, |
||||
verificationIMG: "", |
||||
phoneVisible: false, // 绑定手机号对话框 |
||||
phone: "", |
||||
phoneCode: "", |
||||
phoneDisabled: false, |
||||
phoneTimer: null, |
||||
phoneBtnText: "发送验证码" |
||||
}; |
||||
}, |
||||
components: { |
||||
vFooter |
||||
}, |
||||
created () { |
||||
this.getVerImg(); |
||||
}, |
||||
mounted () { |
||||
// 页面离开的时候销毁手机和邮箱验证码定时器 |
||||
this.$once("hook:beforeDestroy", function () { |
||||
clearInterval(this.phoneTimer); |
||||
this.phoneTimer = null; |
||||
}); |
||||
}, |
||||
methods: { |
||||
...mapMutations("user", [ |
||||
"SET_ROLENAME", 'SET_FROM' |
||||
]), |
||||
getVerImg () { // 获取验证码图片 |
||||
this.loginForm.random = Math.floor(Math.random() * 999999999); |
||||
this.verificationIMG = this.api.verification + "?random=" + `${this.loginForm.random}`; |
||||
}, |
||||
handleClick (tab, event) { // 切换标签 |
||||
this.loginForm.account = ""; |
||||
this.$refs.loginForm.clearValidate(); |
||||
this.loginRules.account[0].message = tab.index === "1" ? "请输入账号" : "请输入手机号/邮箱"; |
||||
}, |
||||
submitFormLogin () { // 提交登录 |
||||
this.$refs.loginForm.validate(valid => { |
||||
if (valid) { |
||||
this.loginForm.distinguish = Number(this.activeName); |
||||
this.$post(this.api.logins, this.loginForm).then(res => { |
||||
if (res && res.status == 30001) { |
||||
this.phoneVisible = true; |
||||
} |
||||
this.getVerImg() |
||||
this.loginForm.code = '' |
||||
util.local.set(Setting.tokenKey, res.data.token, Setting.tokenExpires); |
||||
this.SET_FROM(false) |
||||
this.getRole() |
||||
this.queryCustomer() |
||||
}).catch(res => { |
||||
this.getVerImg() |
||||
this.loginForm.code = '' |
||||
}) |
||||
} else { |
||||
return util.errorMsg("请检查表单数据"); |
||||
} |
||||
}); |
||||
}, |
||||
// 获取当前用户角色 |
||||
getRole () { |
||||
this.$post(`${this.api.getUserAllRoleByToken}?platformId=${Setting.platformId}`).then(res => { |
||||
this.SET_ROLENAME(res) |
||||
}).catch(err => { }) |
||||
}, |
||||
queryCustomer () { // 查询是否是客户 |
||||
const path = '/product/list' // 默认路径 |
||||
this.$get(`${this.api.getUserRolesPermissionMenu}?platformId=${Setting.platformId}`).then(res => { |
||||
const list = res.permissionMenu[0].children |
||||
this.$router.push(list.find(e => e.path === path) ? path : list[0].path) |
||||
}).catch(err => { }) |
||||
}, |
||||
phoneCountdown () { |
||||
let count = 60; |
||||
if (!this.phoneTimer) { |
||||
this.phoneDisabled = true; |
||||
this.phoneTimer = setInterval(() => { |
||||
console.log("倒计时中"); |
||||
if (count > 0) { |
||||
count--; |
||||
this.phoneBtnText = `${count}秒后重试`; |
||||
} else { |
||||
this.phoneDisabled = false; |
||||
clearInterval(this.phoneTimer); |
||||
this.phoneTimer = null; |
||||
this.phoneBtnText = `发送验证码`; |
||||
} |
||||
}, 1000); |
||||
} |
||||
}, |
||||
sendPhoneCode () { |
||||
if (!this.phone) return util.warningMsg("请输入手机号"); |
||||
if (!/^1[3456789]\d{9}$/.test(this.phone)) return util.warningMsg("请输入正确的手机号"); |
||||
let data = { |
||||
platform: Setting.platformId, |
||||
phone: this.phone, |
||||
types: 2 |
||||
}; |
||||
this.$post(this.api.sendPhoneOrEmailCode, data).then(res => { |
||||
if (res.message.opener) { |
||||
this.phoneCountdown(); |
||||
this.phoneOpener = res.message.opener; |
||||
} else { |
||||
util.errorMsg(res.message); |
||||
} |
||||
}).catch(res => { }); |
||||
}, |
||||
phoneSubmit () { |
||||
if (!this.phone) return util.warningMsg("请输入手机号"); |
||||
if (!/^1[3456789]\d{9}$/.test(this.phone)) return util.warningMsg("请输入正确的手机号"); |
||||
if (!this.phoneCode) return util.warningMsg("请输入验证码"); |
||||
let data = { |
||||
phone: this.phone, |
||||
types: 2, |
||||
code: this.phoneCode, |
||||
opener: this.phoneOpener, |
||||
platform: Setting.platformId, |
||||
account: this.loginForm.account |
||||
}; |
||||
this.$post(this.api.bindPhoneOrEmail, data).then(res => { |
||||
util.successMsg("绑定成功"); |
||||
this.loginForm.phone = this.phone; |
||||
this.phoneVisible = false; |
||||
|
||||
util.local.set(Setting.tokenKey, res.token, Setting.tokenExpires); |
||||
let redirect = this.$route.query.redirect ? decodeURIComponent(this.$route.query.redirect) : "/index"; |
||||
this.$router.replace(redirect); |
||||
util.successMsg("登录成功"); |
||||
this.queryCustomer(); |
||||
}).catch(res => { |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style lang="scss" scoped> |
||||
.wrap { |
||||
position: relative; |
||||
width: 100%; |
||||
height: 100%; |
||||
background-image: url(../../../assets/img/login-bg.png); |
||||
background-size: 100%; |
||||
|
||||
.header { |
||||
width: 100%; |
||||
height: 60px; |
||||
position: absolute; |
||||
top: 0; |
||||
left: 0; |
||||
background-color: #fff; |
||||
display: flex; |
||||
justify-content: space-between; |
||||
align-items: center; |
||||
font-size: 18px; |
||||
|
||||
.logo { |
||||
width: 150px; |
||||
margin-left: 20px; |
||||
|
||||
&.hh { |
||||
width: 220px; |
||||
} |
||||
} |
||||
} |
||||
|
||||
/deep/ .main { |
||||
position: absolute; |
||||
left: 50%; |
||||
top: 42px; |
||||
transform: translate(-50%, 0); |
||||
width: 1200px; |
||||
height: 82%; |
||||
margin-top: 60px; |
||||
background-image: url(../../../assets/img/login-input.png); |
||||
box-shadow: 0px 0px 79px 0px rgba(11, 15, 65, 0.36); |
||||
overflow: hidden; |
||||
|
||||
.box { |
||||
width: 548px; |
||||
position: absolute; |
||||
left: 50%; |
||||
top: 50px; |
||||
transform: translate(-50%, 0); |
||||
|
||||
.el-tabs__nav-scroll { |
||||
display: flex; |
||||
justify-content: center; |
||||
} |
||||
|
||||
.el-tabs__nav-wrap::after { |
||||
background-color: #fff; |
||||
opacity: 0; |
||||
|
||||
.el-tabs__active-bar { |
||||
background-color: #000; |
||||
border-radius: 2px; |
||||
} |
||||
|
||||
.el-tabs__item { |
||||
padding: 0 90px; |
||||
color: #999; |
||||
|
||||
&:hover { |
||||
color: #000; |
||||
} |
||||
|
||||
&.is-active { |
||||
color: #333; |
||||
font-weight: bold; |
||||
} |
||||
} |
||||
} |
||||
|
||||
.el-input__inner { |
||||
height: 80px; |
||||
line-height: 80px; |
||||
border: 1px solid rgba(220, 220, 220, 1); |
||||
border-radius: 2px; |
||||
} |
||||
|
||||
.verification { |
||||
position: absolute; |
||||
top: 1px; |
||||
right: 1px; |
||||
width: 160px; |
||||
height: 78px; |
||||
cursor: pointer; |
||||
} |
||||
|
||||
.submit { |
||||
width: 100%; |
||||
height: 88px; |
||||
margin-bottom: 50px; |
||||
font-weight: bold; |
||||
background: linear-gradient(90deg, rgba(94, 206, 253, 1), rgba(91, 67, 231, 1)); |
||||
box-shadow: 0px 7px 27px 0px rgba(50, 129, 255, 0.51); |
||||
border-radius: 10px; |
||||
} |
||||
} |
||||
} |
||||
|
||||
.footer { |
||||
position: absolute; |
||||
bottom: 0; |
||||
left: 0; |
||||
width: 100%; |
||||
} |
||||
} |
||||
</style> |
Loading…
Reference in new issue