|
@@ -16,30 +16,53 @@
|
|
|
import GlobalMessage from '@/components/Basic/GlobalMessage'
|
|
import GlobalMessage from '@/components/Basic/GlobalMessage'
|
|
|
import SlideUpTransition from '@/animations/SlideUpTransition'
|
|
import SlideUpTransition from '@/animations/SlideUpTransition'
|
|
|
import { mapState } from 'vuex'
|
|
import { mapState } from 'vuex'
|
|
|
-import { userTypeNaming } from '@/enums/user-type'
|
|
|
|
|
|
|
+import userType, { userTypeNaming } from '@/enums/user-type'
|
|
|
|
|
+// import { jumpToLogin } from '@/server/auth'
|
|
|
|
|
+import { SET_TOKEN, SET_USER_INFO } from '@/store/types/main-types'
|
|
|
|
|
+import { getUserInfo } from '@/server/user'
|
|
|
|
|
|
|
|
export default {
|
|
export default {
|
|
|
components: { GlobalMessage, SlideUpTransition },
|
|
components: { GlobalMessage, SlideUpTransition },
|
|
|
computed: {
|
|
computed: {
|
|
|
...mapState({
|
|
...mapState({
|
|
|
- userInfo: state => state.main.userInfo
|
|
|
|
|
|
|
+ userInfo: state => state.main.userInfo,
|
|
|
|
|
+ token: state => state.main.token
|
|
|
})
|
|
})
|
|
|
},
|
|
},
|
|
|
|
|
+ watch: {
|
|
|
|
|
+ $route: {
|
|
|
|
|
+ handler (newValue) {
|
|
|
|
|
+ const token = newValue.query['id_token']
|
|
|
|
|
+ if (token && token !== this.token) {
|
|
|
|
|
+ localStorage.setItem('token', token)
|
|
|
|
|
+ this.$store.commit(SET_TOKEN, { token })
|
|
|
|
|
+ this.fetchUserInfo()
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ immediate: true
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
created () {
|
|
created () {
|
|
|
|
|
+ this.$axios.interceptors.request.use(config => {
|
|
|
|
|
+ config.headers['Authorization'] = this.token
|
|
|
|
|
+ return config
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
// 拦截 401 - 无登录信息 前往登录界面
|
|
// 拦截 401 - 无登录信息 前往登录界面
|
|
|
this.$axios.interceptors.response.use((response) => {
|
|
this.$axios.interceptors.response.use((response) => {
|
|
|
return response
|
|
return response
|
|
|
}, (error) => {
|
|
}, (error) => {
|
|
|
if (error.response.status === 401 && this.$route.matched.some(record => record.meta.roles)) {
|
|
if (error.response.status === 401 && this.$route.matched.some(record => record.meta.roles)) {
|
|
|
- this.$router.push({ name: 'login' })
|
|
|
|
|
|
|
+ // this.$router.push({ name: 'login' })
|
|
|
|
|
+ // jumpToLogin()
|
|
|
}
|
|
}
|
|
|
return Promise.reject(error)
|
|
return Promise.reject(error)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
this.$router.beforeEach((to, from, next) => {
|
|
this.$router.beforeEach((to, from, next) => {
|
|
|
- if (to.matched.some(record => (record.meta.roles && !record.meta.roles.some(role => role === this.userInfo.type.toLowerCase())))) {
|
|
|
|
|
- this.$setInfoMessage('所前往的页面需要使用' + userTypeNaming[this.userInfo.type] + '身份登录')
|
|
|
|
|
- next({ name: this.userInfo.type.toLowerCase() })
|
|
|
|
|
|
|
+ if (to.matched.some(record => (record.meta.roles && !record.meta.roles.some(role => role === this.userInfo.role.toLowerCase())))) {
|
|
|
|
|
+ this.$setInfoMessage('所前往的页面需要使用' + userTypeNaming[this.userInfo.role] + '身份登录')
|
|
|
|
|
+ next({ name: this.userInfo.role.toLowerCase() })
|
|
|
} else {
|
|
} else {
|
|
|
next()
|
|
next()
|
|
|
}
|
|
}
|
|
@@ -54,6 +77,21 @@ export default {
|
|
|
window.addEventListener('beforeunload', () => {
|
|
window.addEventListener('beforeunload', () => {
|
|
|
sessionStorage.setItem('store', JSON.stringify(this.$store.state))
|
|
sessionStorage.setItem('store', JSON.stringify(this.$store.state))
|
|
|
})
|
|
})
|
|
|
|
|
+ },
|
|
|
|
|
+ mounted () {
|
|
|
|
|
+ this.fetchUserInfo()
|
|
|
|
|
+ },
|
|
|
|
|
+ methods: {
|
|
|
|
|
+ fetchUserInfo () {
|
|
|
|
|
+ getUserInfo().then(res => {
|
|
|
|
|
+ this.$store.commit(SET_USER_INFO, { userInfo: res })
|
|
|
|
|
+ if (res.role === userType.student) {
|
|
|
|
|
+ this.$router.push({ name: 'student-explore' })
|
|
|
|
|
+ } else {
|
|
|
|
|
+ this.$router.push({ name: 'teacher-explore' })
|
|
|
|
|
+ }
|
|
|
|
|
+ }).catch(err => this.$setErrorMessage(err.response.data.msg))
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
</script>
|
|
</script>
|