import React, {Component} from 'react'
|
import { Spin } from 'antd'
|
import { connect } from 'react-redux'
|
import md5 from 'md5'
|
import moment from 'moment'
|
|
import Api from '@/api'
|
import Utils from '@/utils/utils.js'
|
import { styles } from '@/store/options.js'
|
import { modifyMemberLevel } from '@/store/action'
|
import './index.scss'
|
|
class SSOLogin extends Component {
|
UNSAFE_componentWillMount() {
|
try {
|
let _param = JSON.parse(window.decodeURIComponent(window.atob(this.props.match.params.param)))
|
|
if (typeof(_param) === 'object') {
|
_param.UserID && sessionStorage.setItem('UserID', _param.UserID)
|
_param.LoginUID && sessionStorage.setItem('LoginUID', _param.LoginUID)
|
_param.User_Name && sessionStorage.setItem('User_Name', _param.User_Name)
|
_param.Full_Name && sessionStorage.setItem('Full_Name', _param.Full_Name)
|
_param.debug && sessionStorage.setItem('debug', _param.debug)
|
_param.dataM && sessionStorage.setItem('dataM', _param.dataM)
|
_param.dataM && sessionStorage.setItem('localDataM', _param.dataM)
|
_param.avatar && sessionStorage.setItem('avatar', _param.avatar)
|
_param.role_id && sessionStorage.setItem('role_id', _param.role_id)
|
_param.role_id && sessionStorage.setItem('localRole_id', _param.role_id)
|
} else {
|
this.props.history.replace('/login')
|
}
|
this.getMessage()
|
} catch (e) {
|
this.props.history.replace('/login')
|
}
|
}
|
|
getMessage = () => {
|
let _param = {
|
func: 's_Get_style',
|
TypeCharOne: 'PC',
|
LText: `select '${window.GLOB.appkey}'`,
|
}
|
|
_param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
|
_param.secretkey = Utils.encrypt(_param.LText, _param.timestamp)
|
|
Api.getSystemConfig(_param).then(res => {
|
if (res.status) {
|
let _url = window.location.href.split('#')[0] + 'system'
|
let systemMsg = {
|
favicon: res.titlelogo || '',
|
platTitle: res.titleName || '',
|
platName: res.SysName || '',
|
bgImage: res.Banner || '',
|
loginlogo: res.loginlogo || '',
|
copyRight: res.CopyRightYear && res.CopyRightOrg ? `Copyright©${res.CopyRightYear} 所有相关版权归 ${res.CopyRightOrg}` : '',
|
ICP: res.ICP || '',
|
mainlogo: res.indexlogo || '',
|
doclogo: res.doclogo || '',
|
style: res.CSS || '',
|
webSite: res.WebSite || ''
|
}
|
|
// url标题
|
document.title = systemMsg.platTitle
|
|
try {
|
localStorage.setItem(_url, window.btoa(window.encodeURIComponent(JSON.stringify(systemMsg))))
|
} catch (e) {
|
localStorage.removeItem(_url)
|
}
|
|
let _loginurl = window.location.href.split('#')[0] + 'loginways'
|
let login_ways = []
|
let login_types = []
|
if (res.login_ways && res.login_ways.length > 0) {
|
res.login_ways.forEach(item => {
|
// 短信验证码登录,必须设置短信Id
|
if (item.way_no === 'sms_vcode' && !item.sms_id) return
|
if (login_types.includes(item.way_no)) return
|
|
login_types.push(item.way_no)
|
|
login_ways.push({
|
label: item.way_name,
|
type: item.way_no,
|
smsId: item.sms_id
|
})
|
})
|
} else {
|
login_ways.push({
|
label: '账号密码登录',
|
type: 'uname_pwd',
|
smsId: ''
|
})
|
}
|
|
try {
|
localStorage.setItem(_loginurl, window.btoa(window.encodeURIComponent(JSON.stringify(login_ways))))
|
} catch (e) {
|
localStorage.removeItem(_loginurl)
|
}
|
|
window.GLOB.mainlogo = systemMsg.mainlogo
|
window.GLOB.style = systemMsg.style
|
|
if (window.GLOB.style && styles[window.GLOB.style]) {
|
document.body.className = styles[window.GLOB.style]
|
}
|
|
if (res.titlelogo && window.GLOB.favicon !== res.titlelogo) {
|
let link = document.querySelector("link[rel*='icon']") || document.createElement('link')
|
link.type = 'image/x-icon'
|
link.rel = 'shortcut icon'
|
link.href = res.titlelogo
|
document.getElementsByTagName('head')[0].appendChild(link)
|
}
|
|
let memberLevel = res.member_level
|
|
if (typeof(memberLevel) === 'number' && memberLevel > 10 && parseInt(memberLevel / 10) * 10 === memberLevel) {
|
sessionStorage.setItem('Member_Level', md5('mksoft' + moment().format('YYYYMM') + memberLevel))
|
this.props.modifyMemberLevel(memberLevel)
|
}
|
this.props.history.replace('/main')
|
} else {
|
this.props.history.replace('/login')
|
}
|
}, () => {
|
this.props.history.replace('/login')
|
})
|
}
|
|
render () {
|
return (
|
<div className="sso-login">
|
<Spin size="large" />
|
</div>
|
)
|
}
|
}
|
|
const mapStateToProps = () => {
|
return {}
|
}
|
|
const mapDispatchToProps = (dispatch) => {
|
return {
|
modifyMemberLevel: (memberLevel) => dispatch(modifyMemberLevel(memberLevel))
|
}
|
}
|
|
export default connect(mapStateToProps, mapDispatchToProps)(SSOLogin)
|