|
|
@@ -10,15 +10,37 @@
|
|
|
<script>
|
|
|
import GlobalMessage from '@/components/Basic/GlobalMessage'
|
|
|
import SlideUpTransition from '@/animations/SlideUpTransition'
|
|
|
+import { mapState } from 'vuex'
|
|
|
|
|
|
export default {
|
|
|
components: { GlobalMessage, SlideUpTransition },
|
|
|
- data () {
|
|
|
- return {
|
|
|
- userInfo: {}
|
|
|
- }
|
|
|
+ computed: {
|
|
|
+ ...mapState({
|
|
|
+ userInfo: state => state.main.userInfo
|
|
|
+ })
|
|
|
},
|
|
|
created () {
|
|
|
+ // 拦截 401 - 无登录信息 前往登录界面
|
|
|
+ this.$axios.interceptors.response.use((response) => {
|
|
|
+ return response
|
|
|
+ }, (error) => {
|
|
|
+ if (error.response.status === 401 && this.$route.matched.some(record => record.meta.roles)) {
|
|
|
+ this.$router.push({ name: 'login' })
|
|
|
+ this.$setErrorMessage('请重新登录')
|
|
|
+ } else {
|
|
|
+ return Promise.reject(error)
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ 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('所前往的页面需要使用' + (this.userInfo.type === 'TEACHER' ? '学生' : '教师') + '身份登录')
|
|
|
+ next({ name: this.userInfo.type === 'TEACHER' ? 'teacher' : 'student' })
|
|
|
+ } else {
|
|
|
+ next()
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
// 在页面加载时读取sessionStorage里的状态信息
|
|
|
if (sessionStorage.getItem('store')) {
|
|
|
this.$store.replaceState(Object.assign({}, this.$store.state, JSON.parse(sessionStorage.getItem('store'))))
|