121 lines
3.1 KiB
JavaScript
121 lines
3.1 KiB
JavaScript
import router from './router'
|
|
import store from '@/store'
|
|
import { getToken, setToken, removeToken } from '@/utils/auth'
|
|
import { callMessage } from '@/utils/ui-merge'
|
|
import { entRegisterInfoCurrent } from '@/api/市场主体信息相关'
|
|
import { oauthLogin, oauthLoginByCerno } from '@/api/user'
|
|
import { sysNmgSsoCallback } from '@/api/系统支撑'
|
|
|
|
const StartRoute = '/login'
|
|
const skipToken = []
|
|
const skipPortalCode = []
|
|
router.beforeEach(async (to, from, next) => {
|
|
if (to.query.code && to.query.state2 === 'portal') {
|
|
const portalCode = to.query.code
|
|
if (!skipPortalCode.includes(portalCode)) {
|
|
skipPortalCode.push(portalCode)
|
|
await sysNmgSsoCallback({
|
|
code: to.query.code,
|
|
state: to.query.state
|
|
}).then(() => {
|
|
setToken('token')
|
|
next({
|
|
path: '/business',
|
|
replace: true
|
|
})
|
|
}).catch((error) => {
|
|
removeToken()
|
|
callMessage({
|
|
type: 'error',
|
|
message: error?.message || '统一门户登录失败'
|
|
})
|
|
next({
|
|
path: StartRoute,
|
|
replace: true
|
|
})
|
|
})
|
|
return
|
|
}
|
|
}
|
|
if (to.path === '/oauth' && !skipToken.includes(to.query.token)) {
|
|
skipToken.push(to.query.token)
|
|
if (to.query.cerno && to.query.tel) {
|
|
await oauthLoginByCerno(to.query.token, to.query.cerno, to.query.tel).then((data) => {
|
|
setToken('token')
|
|
}).catch(() => {
|
|
})
|
|
} else {
|
|
await oauthLogin(to.query.token).then((data) => {
|
|
setToken('token')
|
|
}).catch(() => {
|
|
})
|
|
}
|
|
next({
|
|
path: '/redirect',
|
|
replace: true,
|
|
query: {
|
|
redirect: '/'
|
|
}
|
|
})
|
|
return
|
|
}
|
|
if (!getToken()) {
|
|
await entRegisterInfoCurrent().then((data) => {
|
|
if (data.username !== 'guest') {
|
|
setToken('token')
|
|
}
|
|
}).catch((e) => {
|
|
removeToken()
|
|
// need login
|
|
})
|
|
}
|
|
const hasToken = getToken()
|
|
if (hasToken) {
|
|
if (to.path === StartRoute) {
|
|
next({ path: '/' })
|
|
} else {
|
|
const hasRoles = store.getters.roles && store.getters.roles.length > 0
|
|
if (hasRoles) {
|
|
next()
|
|
} else {
|
|
try {
|
|
await store.dispatch('user/getInfo')
|
|
const accessRoutes = await store.dispatch(
|
|
'permission/generateRoutes',
|
|
store.getters.roles
|
|
)
|
|
for (const route of accessRoutes) {
|
|
router.addRoute(route)
|
|
}
|
|
next({ ...to, replace: true })
|
|
} catch (error) {
|
|
console.error(error)
|
|
// remove token and go to login page to re-login
|
|
await store.dispatch('user/resetToken')
|
|
callMessage({
|
|
type: 'error',
|
|
message: error || 'Has Error'
|
|
})
|
|
next({
|
|
path: StartRoute,
|
|
query: {
|
|
redirect: to.fullPath
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (to?.meta?.roles?.includes('guest')) {
|
|
next()
|
|
} else {
|
|
next({
|
|
path: StartRoute,
|
|
query: {
|
|
redirect: to.fullPath
|
|
}
|
|
})
|
|
}
|
|
}
|
|
})
|