Files
JeecgBoot/ant-design-vue-jeecg/src/views/user/third/JeecgThirdLoginMixin.js
2021-02-21 09:40:03 +08:00

211 lines
6.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
*第三方登录
*/
import { mapActions } from 'vuex'
import { postAction } from '@api/manage'
import { timeFix } from '@/utils/util'
export const JeecgThirdLoginMixin = {
data() {
return {
//第三方登录相关信息
thirdLoginInfo: '',
thirdPasswordShow: false,
thirdLoginPassword: '',
thirdLoginUser: '',
thirdConfirmShow: false,
thirdCreateUserLoding: false,
thirdLoginState: false,
//绑定手机号弹窗
bindingPhoneModal: false,
thirdPhone: '',
thirdCaptcha: '',
//获取验证码按钮30s之内是否可点击
thirdState: {
time: 30,
smsSendBtn: false
},
//第三方用户UUID
thirdUserUuid: '',
thirdType: '',
url: {
bindingThirdPhone: '/sys/thirdLogin/bindingThirdPhone'
}
}
},
created() {
},
methods: {
...mapActions(['ThirdLogin']),
//第三方登录
onThirdLogin(source) {
let url = window._CONFIG['domianURL'] + `/sys/thirdLogin/render/${source}`
window.open(url, `login ${source}`, 'height=500, width=500, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no')
let that = this
that.thirdType = source
that.thirdLoginInfo = ''
that.thirdLoginState = false
let receiveMessage = function(event) {
let token = event.data
if (typeof token === 'string') {
//如果是字符串类型 说明是token信息
if (token === '登录失败') {
that.$message.warning(token)
} else if (token.includes('绑定手机号')) {
that.bindingPhoneModal = true
let strings = token.split(',')
that.thirdUserUuid = strings[1]
} else {
that.doThirdLogin(token)
}
} else if (typeof token === 'object') {
//对象类型 说明需要提示是否绑定现有账号
if (token['isObj'] === true) {
that.thirdConfirmShow = true
that.thirdLoginInfo = { ...token }
}
} else {
that.$message.warning('不识别的信息传递')
}
}
window.addEventListener('message', receiveMessage, false)
},
// 根据token执行登录
doThirdLogin(token) {
if (this.thirdLoginState === false) {
this.thirdLoginState = true
let param={};
param.thirdType=this.thirdType
param.token=token
this.ThirdLogin(param).then(res => {
if (res.success) {
this.loginSuccess()
} else {
this.requestFailed(res)
}
})
}
},
// 绑定已有账号 需要输入密码
thirdLoginUserBind() {
this.thirdLoginPassword = ''
this.thirdLoginUser = this.thirdLoginInfo.uuid
this.thirdConfirmShow = false
this.thirdPasswordShow = true
},
//创建新账号
thirdLoginUserCreate() {
this.thirdCreateUserLoding = true
// 账号名后面添加两位随机数
this.thirdLoginInfo['suffix'] = parseInt(Math.random() * 98 + 1)
//this.thirdLoginInfo.operateCode = 123 //测试校验失败
postAction('/sys/third/user/create', this.thirdLoginInfo).then(res => {
if (res.success) {
let token = res.result
console.log('thirdCreateNewAccount', token)
this.doThirdLogin(token)
this.thirdConfirmShow = false
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.thirdCreateUserLoding = false
})
},
// 核实密码
thirdLoginCheckPassword() {
//this.thirdLoginInfo.operateCode = 123 //测试校验失败
let param = Object.assign({}, this.thirdLoginInfo, { password: this.thirdLoginPassword })
postAction('/sys/third/user/checkPassword', param).then(res => {
if (res.success) {
this.thirdLoginNoPassword()
this.doThirdLogin(res.result)
} else {
this.$message.warning(res.message)
}
})
},
// 没有密码 取消操作
thirdLoginNoPassword() {
this.thirdPasswordShow = false
this.thirdLoginPassword = ''
this.thirdLoginUser = ''
},
//获取第三方验证码
getThirdCaptcha() {
let that = this
if (!this.thirdPhone) {
that.cmsFailed('请输入手机号')
} else {
this.thirdState.smsSendBtn = true
let interval = window.setInterval(() => {
if (that.thirdState.time-- <= 0) {
that.thirdState.time = 30
that.thirdState.smsSendBtn = false
window.clearInterval(interval)
}
}, 1000)
const hide = this.$message.loading('验证码发送中..', 0)
let smsParams = {}
smsParams.mobile = this.thirdPhone
smsParams.smsmode = '1'
postAction('/sys/sms', smsParams).then(res => {
if (!res.success) {
setTimeout(hide, 0)
this.cmsFailed(res.message)
}
setTimeout(hide, 500)
}).catch(err => {
setTimeout(hide, 1)
clearInterval(interval)
that.thirdState.time = 30
that.thirdState.smsSendBtn = false
this.requestFailed(err)
})
}
},
//绑定手机号点击确定按钮
thirdHandleOk() {
let bingingParams = {}
bingingParams.mobile = this.thirdPhone
bingingParams.captcha = this.thirdCaptcha
bingingParams.thirdUserUuid = this.thirdUserUuid
postAction(this.url.bindingThirdPhone, bingingParams).then(res => {
if (res.success) {
this.bindingPhoneModal = false
this.doThirdLogin(res.result)
} else {
this.$message.warning(res.message)
}
})
},
loginSuccess () {
// update-begin- author:sunjianlei --- date:20190812 --- for: 登录成功后不解除禁用按钮,防止多次点击
// this.loginBtn = false
// update-end- author:sunjianlei --- date:20190812 --- for: 登录成功后不解除禁用按钮,防止多次点击
this.$router.push({ path: "/dashboard/analysis" }).catch(()=>{
console.log('登录跳转首页出错,这个错误从哪里来的')
})
this.$notification.success({
message: '欢迎',
description: `${timeFix()}欢迎回来`,
});
},
cmsFailed(err){
this.$notification[ 'error' ]({
message: "登录失败",
description:err,
duration: 4,
});
},
requestFailed (err) {
this.$notification[ 'error' ]({
message: '登录失败',
description: ((err.response || {}).data || {}).message || err.message || "请求出现错误,请稍后再试",
duration: 4,
});
this.loginBtn = false;
},
}
}