欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue-element-admin下載到登錄的一些坑

 更新時間:2022年04月27日 15:06:40   作者:Q?  
本文主要介紹了vue-element-admin下載到登錄的一些坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

快速上手

官方文檔:https://panjiachen.github.io/vue-element-admin-site/zh/guide/

啟動項目

拉取代碼之后進行npm i 安裝

在這里插入圖片描述

ctrl -c 之后

執(zhí)行命令:git config --global url.“https://”.insteadOf git://
重新 npm  i          
成功!
npm run dev 啟動成功

依賴下載成功截圖

在這里插入圖片描述

另外npm i之后也可能會發(fā)現(xiàn)其他的報錯

具體哪些就不一一列舉了,我這邊node版本 v10.20.0 ,npm版本6.14.4
這里列舉 是因為之前有報錯發(fā)現(xiàn)要升級npm版本下載依賴,有個core.js很難下載。

下載固定npm指令: npm install npm@6.14.4 -g
node的話nvm隨便下載就好了

啟動成功

在這里插入圖片描述

登錄流程解析

1.目錄結構

在這里插入圖片描述

重要文件

permission.js
登錄流程中,src/permission.js是最重要的環(huán)節(jié),這個文件是路由的全局鉤子(beforeEach和afterEach),全局鉤子的意思就是每次跳轉的時候可以根據(jù)情況進行攔截,不讓他跳轉。使用場景就是有些頁面需要登錄才能訪問,這時候就可以在beforeEach中校驗用戶登錄狀態(tài)來進行攔截。

utils/auth.js
設置token到cookie中的操作封裝。 

router
有關路由的一些設置

登錄流程解析

1.登錄頁面:view/login/index.vue

在這里插入圖片描述

點擊登錄按鈕后,觸發(fā)handleLogin方法,利用validate進行表單驗證,如果驗證通過,調(diào)用user/login方法傳遞表單里的數(shù)據(jù),根據(jù).then回調(diào)執(zhí)行this.$router.push方法,這個方法用于跟蹤:我是從哪里跳到/login頁面的,登錄后我就返回哪里。

2./user/login方法:src/store/modules/user.js

在這里插入圖片描述

這個方法主要做了以下工作:登錄驗證,登錄成功后,分別把token保存在vuex和cookie中。

3.permission.js :src/permission.js

router.beforeEach(async(to, from, next) => {
  // 從cookie中取得token
  const hasToken = getToken()
  
  // 如果有token 也就是已經(jīng)登陸的情況下
  if (hasToken) {
    // 并且要前往的路徑是'/login'  則返回 '/' 
    if (to.path === '/login') {
      next({ path: '/' })
    } else {
      // 從store中取得用戶的 roles, 也就是用戶的權限 并且用戶的權限數(shù)組必須有一個以上
      const hasRoles = store.getters.roles && store.getters.roles.length > 0
      // 有權限則直接進入
      if (hasRoles) {
        next()
      } else {
        // 沒有權限的話
        try {
          // 獲取用戶信息
          const { roles } = await store.dispatch('user/getInfo')
          // 生成可訪問路由
          const accessRoutes = await store.dispatch('permission/generateRoutes',                                    roles)
          // 將可訪問路由添加到路由上
          router.addRoutes(accessRoutes)
          // 進入路由
          next({ ...to, replace: true })
        } catch (error) {
          // 如果出現(xiàn)異常  清空路由 
          await store.dispatch('user/resetToken')
          // Message提示錯誤
          Message.error(error || 'Has Error')
          // 跳到login頁面重新登陸
          next(`/login?redirect=${to.path}`)
        }
      }
    }
  } else {
    // 沒有token 也就是沒有登陸的情況下  
    // 判斷是否是白名單(也就是說不需要登陸就可以訪問的路由)
    if (whiteList.indexOf(to.path) !== -1) {
      next()
    } else {
      // 其他的一律給我跳到login頁面 老老實實的進行登陸
      next(`/login?redirect=${to.path}`)
      NProgress.done()
    }
  }
})


利用beforeEach進行訪問攔截,如果沒登錄,跳轉到登錄頁面進行登錄。

4.user/getInfo:src/store/modules/user.js

在這里插入圖片描述

getInfo用于獲取用戶信息并保存到vuex中,后面是一堆的數(shù)據(jù)校驗。

5.permission/generateRoutes:src/store/modules/permission.js

// 判斷是否有權限
function hasPermission(roles, route) {
  if (route.meta && route.meta.roles) {
    // roles.some => Array.some 相當于是只要有一個滿足就為true 
      
    // 判斷用戶的權限于當前路由訪問所需要的權限是否有一個滿足
    // 比如說用戶權限為 ['one','two']  當前路由訪問所需要權限為 ['two','three']  那么就說明當前用戶可以訪問這個路由
    return roles.some(role => route.meta.roles.includes(role))
  } else {
    // 默認是可訪問的
    return true
  }
}
// 生成可訪問路由
export function filterAsyncRoutes(routes, roles) {
  const res = []

  routes.forEach(route => {
    const tmp = { ...route }
    // 判斷當前路由是否可以訪問
    if (hasPermission(roles, tmp)) {
      // 如果當前路由還有子路由
      if (tmp.children) {
        // 進行遞歸處理
        tmp.children = filterAsyncRoutes(tmp.children, roles)
      }
      // 將可訪問路由放入數(shù)組中
      res.push(tmp)
    }
  })  
  // 返回
  return res
}
// 為什么要寫這里呢,因為后面的Sidebar組件與這個環(huán)環(huán)相扣
const mutations = {
  SET_ROUTES: (state, routes) => {
    // 添加的路由
    state.addRoutes = routes
    // 將vuex中的路由進行更新
    state.routes = constantRoutes.concat(routes)
  }
}
const actions = {
  generateRoutes({ commit }, roles) {
    return new Promise(resolve => {
      let accessedRoutes
      // 如果roles包含 'admin' 直接可以全部訪問
      if (roles.includes('admin')) {
        accessedRoutes = asyncRoutes || []
      } else {
        // 利用 filterAsyncRoutes 過濾出可訪問的路由
        accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
      }
      // 保存可訪問的路由到store中
      commit('SET_ROUTES', accessedRoutes)
      // 將可訪問路由返回
      resolve(accessedRoutes)
    })
  }
}

generateRoutes就是根據(jù)得到的用戶權限生成可以訪問的路由。

動態(tài)路由實現(xiàn)
router.addRoutes(accessRoutes)
思維流程圖

在這里插入圖片描述

替換接口實現(xiàn)登錄

第一步替換接口,這里有三個接口,建議一個一個改

在這里插入圖片描述

第二步,將mock數(shù)據(jù)注釋掉

在這里插入圖片描述

第三步,修改環(huán)境配置

在這里插入圖片描述

第四步,啟動項目之后查看eg:登錄接口返回數(shù)據(jù)的格式
如果你不想改那就必須與后端協(xié)商將接口返回數(shù)據(jù)格式與原有接口數(shù)據(jù)結構返回一模一樣(特別重要的一點),如果一模一樣點擊登錄就會跳轉。(成功)
如果接口已經(jīng)寫好,那就必須修改以下的文件,格式對不上不僅影響功能,控制臺也會報錯

格式與原有格式返回不同需要修改的文件

1.切入點,先找到登錄接口,所以從user/login開始查找

在這里插入圖片描述

返回res相關的登錄,獲取用戶信息,退出登錄接口,commit方法傳的值很可能傳錯,token的值都需要控制臺輸出一下判斷正確,以及邏輯傳參是否丟失

在這里插入圖片描述

這里是修改之后的,包括其他相關接口返回都需要修改

request.js響應code碼根據(jù)接口返回情況進行判斷

在這里插入圖片描述

替換接口遇到的問題

在這里插入圖片描述

報錯原因:

項目中使用的是Element UI消息提示Message:import { Message } from ‘element-ui’;

請求響應攔截器中err處理的代碼錯誤:

Message.error(response.data.data|| "出現(xiàn)錯誤,請稍后再試");//寫法錯誤,

解決方法:

Message.error({
  message: response.data.data || "出現(xiàn)錯誤,請稍后再試"
})
或
Message({
  type:'error',
  message: response.data.data || "出現(xiàn)錯誤,請稍后再試"
})

如果改完之后發(fā)現(xiàn)還報錯,也可能是改完登錄接口,沒改用戶信息接口,用戶信息接口(或是其他)報錯引發(fā)的

 到此這篇關于vue-element-admin下載到登錄的一些坑的文章就介紹到這了,更多相關vue-element-admin下載到登錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue3父子通訊方式及Vue3插槽的使用方法詳解

    Vue3父子通訊方式及Vue3插槽的使用方法詳解

    這篇文章主要介紹了Vue3父子通訊方式及Vue3插槽的使用方法詳解,需要的朋友可以參考下
    2023-01-01
  • 如何手寫一個簡易的 Vuex

    如何手寫一個簡易的 Vuex

    這篇文章主要介紹了如何手寫一個簡易的 Vuex,幫助大家更好的理解和學習vue,感興趣的朋友可以了解下
    2020-10-10
  • Vue實現(xiàn)萬年日歷的示例詳解

    Vue實現(xiàn)萬年日歷的示例詳解

    又是一個老生常談的功能,接下來會從零實現(xiàn)一個萬年日歷,從布局到邏輯,再到隨處可見的打卡功能。文中的示例代碼簡潔易懂,需要的可以參考一下
    2023-01-01
  • vue cli3.0 引入eslint 結合vscode使用

    vue cli3.0 引入eslint 結合vscode使用

    這篇文章主要介紹了vue cli3.0 引入eslint 結合vscode使用,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • 使用vue-cli+webpack搭建vue開發(fā)環(huán)境的方法

    使用vue-cli+webpack搭建vue開發(fā)環(huán)境的方法

    這篇文章主要介紹了使用vue-cli+webpack搭建vue開發(fā)環(huán)境的方法,需要的朋友可以參考下
    2017-12-12
  • Vue.js 實現(xiàn)數(shù)據(jù)展示全部和收起功能

    Vue.js 實現(xiàn)數(shù)據(jù)展示全部和收起功能

    這篇文章主要介紹了Vue.js 實現(xiàn)數(shù)據(jù)展示全部和收起功能,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • vue中beforeRouteLeave實現(xiàn)頁面回退不刷新的示例代碼

    vue中beforeRouteLeave實現(xiàn)頁面回退不刷新的示例代碼

    這篇文章主要介紹了vue中beforeRouteLeave實現(xiàn)頁面回退不刷新的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • 詳解vue2.0模擬后臺json數(shù)據(jù)

    詳解vue2.0模擬后臺json數(shù)據(jù)

    這篇文章主要介紹了vue2.0模擬后臺json數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • vue中then后的返回值解析

    vue中then后的返回值解析

    這篇文章主要介紹了vue中then后的返回值解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • VUE 全局變量的幾種實現(xiàn)方式

    VUE 全局變量的幾種實現(xiàn)方式

    這篇文章主要介紹了VUE 全局變量的幾種實現(xiàn)方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08

最新評論