前端vue访问接口没有权限时则页面一直加载

1.问题描述

当后端返回接口状态为100时,代表没有权限,该页面不能访问,页面就一直加载。可点击到其他能访问的页面,清除加载状态

2. 效果展示

3. 使用vuex,新添状态进行判断

新添状态放在store/modules/user文件,重要代码如下

const state = {
  previousPage: true, // 默认加载,避免loading还未执行就close清除,导致报错
}
const mutations = {
  // 同步修改状态走这里
  PREVIOUS_PAGE: (state, data) => {
    state.previousPage = data
  }
}
const actions = {
  // 异步修改状态走这里
  changePreviousPage({ commit }, data) {
    commit('PREVIOUS_PAGE', data)
  },
}

export default {
  state,
  mutations,
  actions
}

修改store/getters.js,对state.user.previousPage设置别名

const getters = {
  previousPage: (state) => state.user.previousPage,
}
export default getters

4. 将事件放在封装的请求里require.js文件

 不要每个请求接口页面都写,避免繁琐重复


import { Loading } from 'element-ui'

// 定义loading变量
var loading = null

// axios响应拦截器
service.interceptors.response.use((response) => {
  const res = response.data
  // getter文件已对state.user.previousPage设置别名,所以异步写的时别名
  var changePage = store.getters.previousPage // 异步获取值
  // var changePage = store.state.user.previousPage // 同步获取值

  if (res.code === '100') { // 没有权限
                 // 模块名/方法
    store.dispatch('user/changePreviousPage', true) // 异步修改值
    // store.commit('user/PREVIOUS_PAGE', true) // 同步修改值
    
    loading = Loading.service({
      lock: true,
      text: '该页面没有权限',
      background: 'rgba(255, 255, 255, 1)',
      spinner: "el-icon-loading",
      customClass: "perssionsPage-el-loading-mask" // customClass: "你要的类名"
    })
  } else if (res.code !== '100' && !changePage && loading !== null) {
    // 若该页面有多个接口,也不清除加载状态,因此设为true
    store.dispatch('user/changePreviousPage', true)
    setTimeout(() => {
      loading.close()
    });
  } 
})

loading设置的class名放在全局css中

.perssionsPage-el-loading-mask {
  // 没有权限时v-loading添加的样式
  z-index: 200 !important;
  .el-loading-spinner {
    .el-icon-loading, .el-loading-text {
      color: #000 !important;
    }
  }
}

5. 点击切换页面

点击左侧导航栏时,修改previousPage值,当页面没有权限一直加载时,跳转清除close

changePage() {
  this.$store.dispatch('user/changePreviousPage', false)
}

6.优化加载页面

 将一直转圈的部分更换为该图片,主要是修改requert文件,自己命名的类名

.perssionsPage-el-loading-mask {
  // 没有权限时v-loading添加的样式
  z-index: 200 !important;
  background-image: url(../images/noPermission.png);
  background-repeat: no-repeat;
  background-position: 50% 60%;
  background-size: 350px 320px;
  .el-loading-spinner {
    .el-icon-loading:before {
      content: '' !important;
    }
    .el-loading-text {
      color: #000 !important;
    }
  }
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值