亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

快速上手

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

啟動項(xiàng)目

拉取代碼之后進(jìn)行npm i 安裝

在這里插入圖片描述

ctrl -c 之后

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

依賴下載成功截圖

在這里插入圖片描述

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

具體哪些就不一一列舉了,我這邊node版本 v10.20.0 ,npm版本6.14.4
這里列舉 是因?yàn)橹坝袌?bào)錯發(fā)現(xiàn)要升級npm版本下載依賴,有個(gè)core.js很難下載。

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

啟動成功

在這里插入圖片描述

登錄流程解析

1.目錄結(jié)構(gòu)

在這里插入圖片描述

重要文件

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

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

router
有關(guān)路由的一些設(shè)置

登錄流程解析

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

在這里插入圖片描述

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

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

在這里插入圖片描述

這個(gè)方法主要做了以下工作:登錄驗(yàn)證,登錄成功后,分別把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, 也就是用戶的權(quán)限 并且用戶的權(quán)限數(shù)組必須有一個(gè)以上
      const hasRoles = store.getters.roles && store.getters.roles.length > 0
      // 有權(quán)限則直接進(jìn)入
      if (hasRoles) {
        next()
      } else {
        // 沒有權(quán)限的話
        try {
          // 獲取用戶信息
          const { roles } = await store.dispatch('user/getInfo')
          // 生成可訪問路由
          const accessRoutes = await store.dispatch('permission/generateRoutes',                                    roles)
          // 將可訪問路由添加到路由上
          router.addRoutes(accessRoutes)
          // 進(jìn)入路由
          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頁面 老老實(shí)實(shí)的進(jìn)行登陸
      next(`/login?redirect=${to.path}`)
      NProgress.done()
    }
  }
})


利用beforeEach進(jìn)行訪問攔截,如果沒登錄,跳轉(zhuǎn)到登錄頁面進(jìn)行登錄。

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

在這里插入圖片描述

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

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

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

  routes.forEach(route => {
    const tmp = { ...route }
    // 判斷當(dāng)前路由是否可以訪問
    if (hasPermission(roles, tmp)) {
      // 如果當(dāng)前路由還有子路由
      if (tmp.children) {
        // 進(jìn)行遞歸處理
        tmp.children = filterAsyncRoutes(tmp.children, roles)
      }
      // 將可訪問路由放入數(shù)組中
      res.push(tmp)
    }
  })  
  // 返回
  return res
}
// 為什么要寫這里呢,因?yàn)楹竺娴腟idebar組件與這個(gè)環(huán)環(huán)相扣
const mutations = {
  SET_ROUTES: (state, routes) => {
    // 添加的路由
    state.addRoutes = routes
    // 將vuex中的路由進(jìn)行更新
    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ù)得到的用戶權(quán)限生成可以訪問的路由。

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

在這里插入圖片描述

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

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

在這里插入圖片描述

替換接口遇到的問題

在這里插入圖片描述

報(bào)錯原因:

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

請求響應(yīng)攔截器中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)還報(bào)錯,也可能是改完登錄接口,沒改用戶信息接口,用戶信息接口(或是其他)報(bào)錯引發(fā)的

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

相關(guān)文章

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

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

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

    如何手寫一個(gè)簡易的 Vuex

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

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

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

    vue cli3.0 引入eslint 結(jié)合vscode使用

    這篇文章主要介紹了vue cli3.0 引入eslint 結(jié)合vscode使用,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    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 實(shí)現(xiàn)數(shù)據(jù)展示全部和收起功能

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

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

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

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

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

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

    vue中then后的返回值解析

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

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

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

最新評論