最近在做vue-element-admin的项目中,遇到一些问题,写个博客记录一下问题及其解决方案

axios响应拦截的error里如何获取后台传过来的错误信息

因为后台传过来的错误信息里用中文提醒,页面需要显示这些提醒,所以在进行操作时,
要使用error.response才能获取到后台传过来的错误信息,然后进行响应处理,

service.interceptors.response.use(
response => {
    const res = response.data
     if (res.code !== 0 && res.active != true) {
       return Promise.reject(res || 'Error')
    } else {
      return res
    }
  },
  (error) => { //这里要用error.response才能取到后台接口返回的信息
     let Warings = error.response.data.msg.match(/([\u4e00-\u9fa5])+/g) //匹配中文
     if(error.response.data.code == 1&&error.response.data.msg.match(/([\u4e00-\u9fa5])+/g).length >= 1){
     var err;
     if(error.response.data.msg.match(/([\u4e00-\u9fa5])+/g).length == 2 ){
        err = new Error(`${Warings[0]},${Warings[1]}!`||'Error')
        err.name = '错误'

      }else{
         err = new Error(`${Warings[0]}!`||'Error')
         err.name = '错误'
    return Promise.reject(err|| 'error')
  }
  }

使用element-ui的项目打包放到线上时,偶尔会出现图标乱码的情况见下图

在这里插入图片描述

解决方法,卸载掉sass,安装4.x版本的node-sass,
1.npm uninstall sass
2.npm install node-sass (错误)
2.npm install node-sass@4.14.1 -S
原因:elementui 源码使用的是 node-sass,所以使用原有的sass在打包时会使得代码出现乱码的情况,像这样
在这里插入图片描述
而至于为什么要下载4.x版本的,因为此sass-loader,因为node-sass @latest为v5.0.0,而sass-loader期望值为^ 4.0.0。
一顿操作后看下打包以后的app.css
在这里插入图片描述
大功告成

根据角色不同进入不同主页

刚开始拿到感觉这个需求很简单,因为vue-element-admin本身就有这种权限验证功能,但是在实际开发时,发现无法在路由中直接控制,只好在登录页面中判断

 handleLogin() {
      var that = this
      this.$refs.loginForm.validate((valid) => {
        if (valid) {
          this.loading = true;
          console.log(this.loginForm)
          this.$store
            .dispatch("user/login", this.loginForm)
            .then(async (response) => {
              // console.log(this)
              const {
                roles,
                firstFlag,
                id
              } = await this.$store.dispatch('user/getInfo')
              const accessRoutes = await this.$store.dispatch('permission/generateRoutes', roles)

              // dynamically add accessible routes
              this.$router.addRoutes(accessRoutes)
              console.log(roles)
              if (roles == 'ORGANIZE') {
                this.$router.push({
                  path: "/org-admin-org",
                  query: this.otherQuery,
                });
              } else {
                this.$router.replace({
                  path: '/',
                  query: this.otherQuery,
                });
              }
              this.loading = false;
            })
            }

验证登录后要发送请求获取角色信息,但是这还不够,后面这两步才是关键·
const accessRoutes = await this.$store.dispatch(‘permission/generateRoutes’, roles)

this.$router.addRoutes(accessRoutes)
有了这两步才算成功,至于为什么,我理解就是前端要拿到这个用户的路由表才能允许你跳转,不是你角色给我我就允许你跳

GitHub 加速计划 / vu / vue-element-admin
87.26 K
30.42 K
下载
PanJiaChen/vue-element-admin: 是一个基于 Vue.js 和 Element UI 的后台管理系统模板,支持多种数据源和插件扩展。该项目提供了一个完整的后台管理系统模板,可以方便地实现后台管理系统的快速搭建和定制,同时支持多种数据源和插件扩展。
最近提交(Master分支:2 个月前 )
0caa975e - 2 年前
cd3f7267 - 2 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐