vue-element-admin下載到登錄的一些坑
快速上手
官方文檔: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)錯(cuò)
具體哪些就不一一列舉了,我這邊node版本 v10.20.0 ,npm版本6.14.4
這里列舉 是因?yàn)橹坝袌?bào)錯(cuò)發(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提示錯(cuò)誤
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)錯(cuò)
格式與原有格式返回不同需要修改的文件
1.切入點(diǎn),先找到登錄接口,所以從user/login開始查找

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

這里是修改之后的,包括其他相關(guān)接口返回都需要修改
request.js響應(yīng)code碼根據(jù)接口返回情況進(jìn)行判斷

替換接口遇到的問題

報(bào)錯(cuò)原因:
項(xiàng)目中使用的是Element UI消息提示Message:import { Message } from ‘element-ui’;
請求響應(yīng)攔截器中err處理的代碼錯(cuò)誤:
Message.error(response.data.data|| "出現(xiàn)錯(cuò)誤,請稍后再試");//寫法錯(cuò)誤,
解決方法:
Message.error({
message: response.data.data || "出現(xiàn)錯(cuò)誤,請稍后再試"
})
或
Message({
type:'error',
message: response.data.data || "出現(xiàn)錯(cuò)誤,請稍后再試"
})
如果改完之后發(fā)現(xiàn)還報(bào)錯(cuò),也可能是改完登錄接口,沒改用戶信息接口,用戶信息接口(或是其他)報(bào)錯(cuò)引發(fā)的
到此這篇關(guān)于vue-element-admin下載到登錄的一些坑的文章就介紹到這了,更多相關(guān)vue-element-admin下載到登錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
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)境的方法,需要的朋友可以參考下2017-12-12
Vue.js 實(shí)現(xiàn)數(shù)據(jù)展示全部和收起功能
這篇文章主要介紹了Vue.js 實(shí)現(xiàn)數(shù)據(jù)展示全部和收起功能,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09
vue中beforeRouteLeave實(shí)現(xiàn)頁面回退不刷新的示例代碼
這篇文章主要介紹了vue中beforeRouteLeave實(shí)現(xiàn)頁面回退不刷新的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11

